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

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日

悬赏问题

  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?