当播放器撞到物体上以产生酷炫的飞行碰撞效果时,如何关闭重力
到目前为止,这是我的代码:
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 .:禁用移动功能意味着我无法控制移动,因为我的播放器无法完全移动。
答案 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或物体已附着重力时必须使用重力。