繁体   English   中英

围绕 object 旋转相机,轻松更改 position

[英]Rotate camera around object, ease on change position

这个问题似乎很受欢迎,但我的搜索似乎都没有解决我的问题。

我有一座塔,它正在逐块建造。 我想要一个相机,围绕当前的构建块盘旋,当即将放置下一个块时,垂直平移相机,或者在任何需要的方向上,所以旋转的中心(在 3D 空间中)总是那个立方体。

我目前有这段代码,但经过几个街区后,它并没有保持当前的视角,而且移动只是一个很大的跳跃。 请注意,position 在任何方向上变化 1。

这是代码:

transform.position = targetPosition + (transform.position - targetPosition).normalized * orbitDistance;
transform.RotateAround(targetPosition, Vector3.up, orbitSpeed * Time.deltaTime);

我究竟做错了什么?

我会在这里使用相机吊杆技术。

首先,有一个代表相机“焦点”的游戏对象,即相机始终面向并旋转的点。 称之为Focus Point 然后,有一个Focus Point的子对象来保存相机组件。 称之为Camera 他们会有这种关系:

├──Focus Point
│   └── Camera

Camera游戏对象应旋转并定位,使其面向Focus Point的 position。 这不需要在代码中完成,因为您所做的只是改变Focus Point的旋转和 position 来调整相机。 像这样的脚本可以附加到Focus Point

public class FocusPointScript : MonoBehaviour 
{ 
    public Vector3 targetPosition;
    public float translateSpeed = 0.1f;
    public float rotateSpeed = 10f;

    void Start()
    {
        targetPosition = transform.position;
    }
  
    void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, 
                translateSpeed * Time.deltaTime);
        transform.Rotate(0f, rotateSpeed * Time.deltaTime, 0f);
    }
}

如果你想调整相机离焦点的距离,你可以改变Camera的 position 向前或向后(我不会同时做)改变Focus PointlocalScale

float moveDelta = 0f; 
// calculate how to adjust
cameraGameObject.transform.Translate(moveDelta * Vector3.forward);

或者

float scaleFactor = 1f; 
// calculate how to adjust
focusPointGameObject.transform.localScale = 
        scaleFactor * focusPointGameObject.transform.localScale;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM