以前的帖子似乎没有解决我的问题。
我试图让我的相机在一个名为" target"的特定点周围移动。目标是一个空的游戏对象设置在我的游戏中心。这个想法是摄像机不会移动到离目标更近或更远的距离,只是围绕目标旋转,好像它围绕一个看不见的球体移动一样。相机应始终指向目标。 transform.LookAt(target)
可以很好地保持相机在目标上的训练,但是我无法正确地进行动作。无论我是沿着水平轴还是垂直轴移动,它总是直接旋转到目标中而不是仅仅在它周围移动。有什么想法吗?
public class CameraController : MonoBehaviour {
public float speed;
public Transform target;
void Update () {
transform.LookAt(target);
if(Input.GetAxis("Vertical") != 0)
{
transform.Translate(transform.up * Input.GetAxis("Vertical") * Time.deltaTime * speed); //.up = positive y
}
if(Input.GetAxis("Horizontal") != 0)
{
transform.Translate(transform.right * Input.GetAxis("Horizontal") * Time.deltaTime * speed); //.right = positive x
}
}
}
答案 0 :(得分:2)
要围绕特定点旋转,请使用Transform.RotateAround
:
transform.RotateAround(target.position, transform.right, -Input.GetAxis("Mouse Y") * speed);
transform.RotateAround(target.position, transform.up, -Input.GetAxis("Mouse X") * speed);
或者,如果您的目标移动并希望相机与目标之间保持相同的距离,则可以使用answers.unity3d.com
页面中的this piece of code:
public class SphericalCam
: MonoBehaviour
{
public float MinDist, CurrentDist, MaxDist, TranslateSpeed, AngleH, AngleV;
public Transform Target;
public void Update()
{
AngleH += Input.GetAxis("Mouse X");
AngleV -= Input.GetAxis("Mouse Y");
CurrentDist += Input.GetAxis("Mouse ScrollWheel");
}
public void LateUpdate()
{
Vector3 tmp;
tmp.x = (Mathf.Cos(AngleH * (Mathf.PI / 180)) * Mathf.Sin(AngleV * (Mathf.PI / 180)) * CurrentDist + Target.position.x;
tmp.z = (Mathf.Sin(AngleH * (Mathf.PI / 180)) * Mathf.Sin(AngleV * (Mathf.PI / 180)) * CurrentDist + Target.position.z;
tmp.y = Mathf.Sin(AngleV * (Mathf.PI / 180)) * CurrentDist + Target.position.y;
transform.position = Vector3.Slerp(transform.position, tmp, TranslateSpeed * Time.deltaTime);
transform.LookAt(Target);
}
}
答案 1 :(得分:1)
摄像机围绕目标水平旋转:
transform.RotateAround(target.position, target.forward, Time.deltaTime * speed);
垂直:
transform.RotateAround(target.position, target.right, Time.deltaTime * speed);