Итак, я думаю, что наконец-то у меня есть решение, и я решил поделиться им с людьми, которые могут быть заинтересованы.
Задача состояла в том, чтобы повернуть направление дельты мыши в соответствии с положением камеры, чтобы оно давало естественную вибрацию.игроку при перетаскивании и отпускании мяча для сдачи.Я провел несколько тестов, чтобы увидеть, где в моем коде возникли проблемы с правильным поворотом дельта-направления (так, чтобы оно соответствовало экрану), и понял, когда я «смотрю из» (0,0,1) для сравнения, в то время как положение x камеры положительно, это работаетхорошо.Но когда x отрицательно, оно не , потому что Vector3.Angle
не возвращает отрицательное значение , насколько я понимаю , поэтому я просто умножил результат на минус.Кажется, работает.
Вот окончательный код:
private void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
void OnMouseDown()
{
ballPos = Input.mousePosition;
}
void OnMouseUp()
{
Vector2 m_direction = Input.mousePosition - ballPos;
Vector3 direction = new Vector3(m_direction.x, 0, m_direction.y);
float userDrag = Mathf.Clamp(direction.magnitude, 0f, maxVelocity);
direction = Translation(direction);
direction = Vector3.Normalize(direction);
rigidbody.velocity = (direction * userDrag) * force;
}
private Vector3 Translation(Vector3 direction)
{
float angle = GetAngle();
Quaternion translatedAngle = Quaternion.AngleAxis(angle, Vector3.up);
direction = translatedAngle * direction;
return direction;
}
private float GetAngle()
{
Vector3 camPos = Camera.main.transform.position;
camPos.y = 0;
if (camPos.x > 0)
{
angle = Vector3.Angle(Vector3.forward, camPos);
}
else if (camPos.x <0)
{ angle = -Vector3.Angle(Vector3.forward, camPos); }
return angle;
}
Пожалуйста, поделитесь, если у вас есть предложения относительно кода.