c# - unity camera 通过鼠标输入旋转,如何旋转移动到默认位置?
问题描述
相机通过鼠标输入旋转,如何旋转移动到默认位置?
public class CameraOrbit : MonoBehaviour
{
public float turnSpeed = 1.0f;
public Transform player;
private Vector3 offset;
private void Start()
{
offset = new Vector3(0, 2.5f, -5);
}
private void LateUpdate()
{
if (Input.GetMouseButton(0))
{
offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset;
transform.localPosition = offset;
transform.LookAt(player.position);
}
}
}
这种东西直接移动到位,我想把它弄平。
public void RevertCamera()
{
offset = new Vector3(0, 2.5f, -5);
transform.localPosition = offset;
transform.LookAt(player.position);
}
我已经尝试了多种变体,但它们似乎都不起作用。
解决方案
最简单的方法是使用相机的变换RotateAround(...)
方法:
void LateUpdate
{
if(Input.GetMouseDown(0))
{
float delta = Input.GetAxis("Mouse X") * turnSpeed;
transform.RotateAround(player.position, Vector3.up, delta);
}
}
(取自:https ://docs.unity3d.com/ScriptReference/Transform.RotateAround.html )
建议:如果我想控制聚焦在某个目标上的摄像机移动,我通常会设置一个摄像机装置。尽管对于一个简单的 RotateAround 调用,这可能是过度设计的。
推荐阅读
- flutter - 在按了几下继续按钮后,我的垂直步进器视图消失了
- chatbot - 是否可以创建基于用户输入进行自我训练的 rasa 2.0 聊天机器人?
- vb.net - 如何从异步任务中获取结果
- javascript - 在 Function 组件上使用 React.cloneElement 时如何设置引用?
- hadoop - 无法在 db2 中创建外部 hadoop 表
- bash - 如何在 Ansible Jinja2 (.j2) 模板中指定“if else”语句?
- javascript - PWA IOS:身体的孩子没有占据 100% 的高度,底部有间隙
- .net-core - 在 .NET Core 解决方案中使用 Dynamics AX 2009 Business Connector .NET Framework 3.5
- content-security-policy - 内容安全策略指令:“default-src 'self'”。请注意,'frame-src' 没有明确设置,所以 'default-src' 用作后备
- laravel - 为什么当我通过 composer 安装时找不到 Doctrine Dbal 包驱动程序?