【问题标题】:I have a cube that spins all over the place when I hit an object.(the camera and character spins) UNITY我有一个立方体,当我撞到一个物体时,它会在整个地方旋转。(相机和角色旋转)团结
【发布时间】:2018-03-11 05:16:10
【问题描述】:

我有一个简单的动作,它围绕着向前移动,这取决于我看的地方。相机跟随玩家。我遇到的问题是,每当我撞到一个物体时,我的角色(连同相机)就会开始疯狂地旋转。 (我是编码新手)

这是我的角色所面对的运动的代码:

public class Player : MonoBehaviour {
    public float movementSpeed = 10;
    public float turningSpeed = 60;
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody> ();
    }

    void Update() {
        float horizontal = Input.GetAxis("Mouse X") * turningSpeed * 
Time.deltaTime;
        transform.Rotate(0, horizontal,0);

    float vertical = Input.GetAxis("Mouse Y")* turningSpeed * Time.deltaTime;
    transform.Rotate(vertical, 0, 0);

    float movement = Input.GetAxis("Foward") * movementSpeed * 
    Time.deltaTime;
    transform.Translate(0, 0,movement);

   }
}

(抱歉格式错误) 鼠标 X 只是让它在鼠标的 x 轴上旋转(与 y 轴相同)。前向只是统一的垂直输入预设。 这是lookAt播放器的代码:

public class LookAtCamera : MonoBehaviour {
    public GameObject target;

    void LateUpdate() {
        transform.LookAt(target.transform);
  }
}

【问题讨论】:

  • Input.GetAxis("Foward") 返回什么?我猜它应该是 Forward 而不是 Forward?
  • 是的,我在输入和编码下命名错误。它按预期工作。

标签: c# unity3d


【解决方案1】:

回答

我相信你的刚体受到撞击物体时产生的反弹力的影响比你想要的更大。


可能的解决方案

根据充当您的腿的碰撞器类型、所涉及对象的重量、您想要的行为以及更多解决方案可能会有所不同。

可能的解决方案 1:

一个选项是在它的刚体组件上冻结对象的旋转,您可以决定在哪些轴上冻结旋转。如果被冻结,它们就不能被外力推动。

可能的解决方案 2:

如果您希望玩家只受脚本影响,您可以设置刚体运动学,这意味着它只受脚本和动画影响。这与设置为动态(其他对象可以影响它)形成鲜明对比。

可能的解决方案 3:

利用刚体的角阻力和质量来减慢旋转速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多