碰撞后如何为玩家关闭重力?

时间:2020-08-16 12:17:43

标签: c# unity3d collision gravity

当播放器撞到物体上以产生酷炫的飞行碰撞效果时,如何关闭重力

到目前为止,这是我的代码:

using UnityEngine;

public class PlayerCollision : MonoBehaviour{

    public PlayerMovement movement;
    void OnCollisionEnter (Collision CollisionInfo) {
        
        Debug.Log(CollisionInfo.collider.name);

        if (CollisionInfo.collider.tag == "Obstacle"){
            movement.enabled = false;
            // Rigidbody.useGravity = false;
        }
    }
}

我尝试了Rigidbody.useGravity = false;,但仍然无法正常工作。

P.S .:禁用移动功能意味着我无法控制移动,因为我的播放器无法完全移动。

3 个答案:

答案 0 :(得分:1)

最适合您的解决方案是使用 GetComponent ,它将获得播放器的刚体组件,您将可以对其进行修改:

public class PlayerCollision : MonoBehaviour{

    public PlayerMovement movement;
    void OnCollisionEnter (Collision CollisionInfo) {
        
        Debug.Log(CollisionInfo.collider.name);

        if (CollisionInfo.collider.tag == "Obstacle"){
            movement.enabled = false;
            GetComponent<Rigidbody>().useGravity = false;            
        }       
    }
}

答案 1 :(得分:0)

尝试链接刚体。在您共享的代码中,它引用了“刚体”类,而不是播放器上的刚体组件。

这可以通过使用Get Component()完成。如果您的脚本位于具有刚体的播放器对象上,则此脚本将起作用:

public class PlayerCollision : MonoBehaviour
{

    public PlayerMovement movement;

    private Rigidbody rigidbody;

    void Start()
    {
        rigidbody = gameObject.GetComponent<Rigidbody>();
    }
    void OnCollisionEnter(Collision CollisionInfo)
    {

        Debug.Log(CollisionInfo.collider.name);

        if (CollisionInfo.collider.tag == "Obstacle")
        {
            movement.enabled = false;
            rigidbody.useGravity = false;

        }


    }
}

或者您也可以像这样公开刚体部件并通过统一编辑器进行分配:

public class PlayerCollision : MonoBehaviour
{

    public PlayerMovement movement;

    public Rigidbody rigidbody;

    void OnCollisionEnter(Collision CollisionInfo)
    {

        Debug.Log(CollisionInfo.collider.name);

        if (CollisionInfo.collider.tag == "Obstacle")
        {
            movement.enabled = false;
            rigidbody.useGravity = false;

        }


    }
}

答案 2 :(得分:0)

if (CollisionInfo.collider.tag == "Obstacle"){
            movement.enabled = false;
            col = GetComponent<Collider>();
            // Rigidbody.useGravity = false;
           if (col.attachedRigidbody)
             col.attachedRigidbody.useGravity = false;
        }

重力精确地使物体必须附着重力,并且在获取col或物体已附着重力时必须使用重力。