![](/img/trans.png)
[英]Unity: Using Mouse Position To Make Angles For My Camera To Rotate Around An Object
[英]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 Point
的localScale
:
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.