如何解决碰撞后如何为玩家关闭重力?
到目前为止,这是我的代码:
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 .:禁用移动功能意味着我无法控制移动,因为我的播放器无法完全移动。
解决方法
最适合您的解决方案是使用 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;
}
}
}
,
尝试链接刚体。在您共享的代码中,它引用了“刚体”类,而不是播放器上的刚体组件。
这可以通过使用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;
}
}
}
,
if (CollisionInfo.collider.tag == "Obstacle"){
movement.enabled = false;
col = GetComponent<Collider>();
// Rigidbody.useGravity = false;
if (col.attachedRigidbody)
col.attachedRigidbody.useGravity = false;
}
重力精确地使物体必须附着重力,并且在获取col或物体已附着重力时必须使用重力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。