2301_76848274 2023-03-25 21:21 采纳率: 50%
浏览 37
已结题

unity实现鼠标控制人物视角,但方向变不了

用Input.GetAxis("Mouse X") * speedTime.deltaTime; 获取到了鼠标x轴的移动角度,
player.Rotate(Vector.up
moveX)
注:这个脚本放在空物体player下的camera上

img


player是一个空物体,里面放的是胶囊模拟角色。但是我发现光胶囊跟着鼠标旋转,视角也是,但是方向不变,
还有就是我创建一个空物体发现,用右边的Transform也控制不了空物体的旋转,只能鼠标在窗口手动旋转。这是怎么回事呢

  • 写回答

1条回答 默认 最新

  • JoseKe 2023-03-25 22:48
    关注
    问题描述:
    在Unity中,使用Input.GetAxis(\"Mouse X\") * speed * Time.deltaTime获取到了鼠标在x轴上的移动角度,并使用player.Rotate(Vector.up, moveX)来控制人物的视角旋转。但是发现无论怎么移动鼠标,人物的视角只能向一个方向旋转,无法改变方向。
    分析:
    根据问题描述,可以初步判断问题出现在player.Rotate(Vector.up, moveX)这一行代码上。在这行代码中,使用了Vector.up来表示绕y轴旋转,而moveX则表示旋转的角度。因此,问题可能出现在Vector.up这个向量上。
    Vector.up是一个单位向量,表示在三维坐标系中y轴正方向的向量。在使用它来控制旋转时,会使得人物的视角始终绕着y轴正方向旋转,无法改变方向。因此,需要根据鼠标移动的方向来动态地改变旋转的轴向。
    解决方案:
    一种解决方案是使用Quaternion.AngleAxis来控制旋转。该函数可以根据指定的角度和轴向来计算旋转的四元数,从而实现旋转。具体实现如下:
    1. 首先,定义一个变量来保存当前的旋转角度:
    float rotateAngle = 0f;
    2. 在获取鼠标移动角度的代码中,将角度累加到rotateAngle中:
    rotateAngle += Input.GetAxis(\"Mouse X\") * speed * Time.deltaTime;
    3. 然后,根据鼠标移动的方向来计算旋转的轴向。可以使用Camera.main.transform.right来表示相机的右侧向量,从而得到一个垂直于y轴的向量:
    Vector3 rotateAxis = Vector3.Cross(Vector3.up, Camera.main.transform.right);
    4. 最后,使用Quaternion.AngleAxis来计算旋转的四元数,并将其应用到人物的Transform组件上:
    transform.rotation = Quaternion.AngleAxis(rotateAngle, rotateAxis);
    这样,就可以根据鼠标移动的方向来动态地改变旋转的轴向,从而实现人物视角的控制。
    总结:
    在Unity中,控制人物视角的旋转时,需要注意旋转的轴向。如果使用固定的轴向,可能会导致视角无法改变方向。因此,需要根据鼠标移动的方向来动态地计算旋转的轴向,从而实现视角的控制。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月26日
  • 已采纳回答 3月26日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 有段代码不知道怎么理解,const isToken = (config.headers || {}).isToken === false
  • ¥100 采用栈和深度优先算法对我的代码进行修改显示路径
  • ¥15 pointnet2包安装
  • ¥20 射频功率问题,解答者有酬谢!
  • ¥80 构建降雨和积水的预测模型
  • ¥15 #Qt Transform setTransform()在鼠标拖动移动视角是一致在原地不动,无法变换视角(细微观察似乎视图有在原地抖动),无法变换视角(细微观察似乎视图有在原地抖动)
  • ¥50 如何利用无人机拍摄的数码照片测量鸟卵的长短径
  • ¥100 github贡献者给与奖励
  • ¥15 使用DS18B20+ESP8266获取温度数据返回-127.00