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

3

当我的玩家撞到物体时,如何关闭重力以创造酷炫的飞行碰撞效果。

这是目前我的代码:

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;,但它仍然无法正常工作。
附注:禁用运动意味着我不能控制运动,而不是我的玩家完全停止移动。

如果我没记错的话,你不是必须通过 GetComponent<Rigidbody> 或类似的方式获取 Rigidbody 吗?自从我上次使用 Unity 以来,他们可能已经对此进行了更改。 - natiiix
3个回答

3

对于您来说,最好的解决方案是使用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;            
        }       
    }
}

0
尝试将刚体链接起来。在你分享的代码中,它引用了类名为"Rigidbody"而不是你的玩家对象上的刚体组件。
这可以通过使用GetComponent()来实现。如果你的脚本附加在拥有刚体的玩家对象上,那么这个脚本将能正常工作。
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;

        }


    }
}

或者你可以将刚体组件设为公共的,然后通过Unity编辑器进行分配:

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;

        }


    }
}

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

重力获取确切对象必须附加重力,当获取具有附加重力的col或对象时,您必须使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接