c# - 玩家旋转和摄像机旋转
问题描述
我希望玩家看向方向,相机在看。
摄像机跟随玩家(第三人称游戏风格)。
我试过了
transform.localRotation = new Quaternion(transform.localRotation.x,
cameraMain.transform.localRotation.y,
transform.localRotation.z,
transform.localRotation.w);
但它不起作用。
有时玩家会开始向另一个方向旋转。
解决方案
以下代码将使对象(在参数中指定)朝向主摄像头所看的方向:
public void lookInDirectionOfCamera(Transform object) {
RayCastHit hit;
if (Physics.raycast(cameraMain.transform.position, cameraMain.transform.forward, out hit)) {
object.forward = hit.point - object.position;
}else { //if the raycast didnt hit anything, make the object face 100 units in front of the camera
Vector3 point = Camera.main.transform.position + Camera.main.transform.forward * 100;
object.forward = point - object.position;
}
}
这将使玩家面对镜头前方的点。如果您只是希望它们在 y 轴上具有相同的旋转,请不要使用四元数!相反,你可以用欧拉角来做:
transform.eulerAngles = new Vector3(transform.eulerAngles.x,
cameraMain.transform.eulerAngles.y,
transform.eulerAngles.y);
不使用 transform.localRotation 的原因是因为那是一个四元数。四元数中的 y 分量与欧拉角中的 y 轴(您习惯于看到的)不同,四元数非常令人困惑,因此您几乎不应该在其中设置单独的值。如果要编辑它们,请仅使用内置方法。
推荐阅读
- c - 如何在尾数之后创建具有值的浮点数?
- c# - 无法将 MathNet.Numerics.LinearAlgebra.Matrix 定义为 Const?
- python - Django我可以在不传递任何参数的情况下反转参数化的url吗?
- bash - 如果三个实例,删除行
- javascript - 如何在不触发渲染方法的情况下将数据传递给父组件
- python - Django - 如何根据条件在模板中声明变量
- io - Fortran read statement's iostat parameter returning code 5001
- javascript - 根据渲染时的父高度随机设置元素的顶部属性
- google-apps-script - 在 GAS 中调用工作表函数
- python - 如何阻止 Kivy 在 RecycleView 中自动选择模数项?