Потрачено много часов, пытаясь выяснить ротацию, и много часов в поисках ответов, но не смог найти ничего подходящего моей проблеме. Мне нужно повернуть весь gameObject в определенном направлении, а не вращать по оси y:
1) Как объект вращается в настоящее время, когда ему дано направление внутри Quaternion.LookRotation илиАтан2. 2,3) Примеры того, как оно должно вращаться. Красная точка симболизирует точку поворота, из которой происходит вращение
Не так много кода, чтобы показать, так как в нем не так много, кроме преобразований gameObject, которые вращаются, и направление, в котором вращается gameObject.
По запросу
[System.Serializable]
public class ToRotate
{
//Object which will be rotated by the angle
public GameObject gameObject;
//Object last known position of this object. The object is rotated towards it's last global position
private Vector3 lastPosition;
//Initializes starting world position values to avoid a strange jump at the start.
public void Init()
{
if (gameObject == null)
return;
lastPosition = gameObject.transform.position;
}
//Method which updates the rotation
public void UpdateRotation()
{
//In order to avoid errors when object given is null.
if (gameObject == null)
return;
//If the objects didn't move last frame, no point in recalculating and having a direction of 0,0,0
if (lastPosition == gameObject.transform.position)
return;
//direction the rotation must face
Vector3 direction = (lastPosition - gameObject.transform.position).normalized;
/* Code that modifies the rotation angle is written here */
//y angle
float angle = Mathf.Rad2Deg * Mathf.Atan2(direction.x, direction.z);
Quaternion rotation = Quaternion.Euler(0, angle, 0);
gameObject.transform.rotation = rotation;
lastPosition = gameObject.transform.position;
}
}