我正在使用这两个向量的点积,但它没有按预期工作

问题描述 投票:0回答:1

我正在使用玩家位置和光标位置的点积,然后使用该值的余符号来适当地旋转玩家,但是出现故障并且表现得非常奇怪,似乎随机地从负数切换到正数,而且我似乎无法修复它。

camRotation = Mathf.Cos(player.transform.rotation.x + player.transform.rotation.y * Input.mousePosition.x + Input.mousePosition.y); player.transform.rotation = Quaternion.Lerp(Quaternion.Euler(0, 0, player.transform.rotation.z), Quaternion.Euler(0, 0, camRotation * 100), 1 * Time.deltaTime);

c# unity3d angle
1个回答
0
投票

从你的问题中我可以看出,你正试图根据当前鼠标位置旋转播放器。但是,您的方法有几个问题:

  1. 您应该使用
    Quaternion.Slerp
    而不是
    Quaternion.Lerp
    ,因为 lerp 只是对每个字段进行插值,几乎从来不是您要查找的内容。 Quaternion.Slerp 像旋转球体一样移动
  2. 不必要的余弦计算 -
    Quaternion.Euler
    需要一个角度,所以只需使用鼠标位置作为角度就可以达到预期的效果
  3. 在错误的轴上旋转——你可能打算使用 y 轴而不是 z 轴

这可能是您要找的:

camRotation = Input.mousePosition.x;
player.transform.rotation = Quaternion.Slerp(Quaternion.Euler(0, player.transform.rotation.y, 0), Quaternion.Euler(0, camRotation * 5, 0), 1 * Time.deltaTime);

如果我误解了请评论:)

© www.soinside.com 2019 - 2024. All rights reserved.