[英]Bug in Unity 2D gravity?
我正在Unity中使用C#编写脚本,该脚本本质上是用作为2D刚体打开或关闭重力的开关。 游戏开始时,刚体的重力应为0。 然后,当用户点击空格键时,重力应该增加到3(确实如此)。 然后,当玩家与标有“ InvisGoal”的游戏对象碰撞时,玩家应传送到另一个位置,然后重力应再次为0。 但是,播放器在与InvisGoal接触并传送后始终会掉下去,我不知道为什么。 这是我在C#中的第一个项目,对于任何明显的错误,我们深感抱歉。脚本在这里:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallLaunch : MonoBehaviour {
private Rigidbody2D myRigidBody;
public GameObject Ball;
// Use this for initialization
void Start ()
{
myRigidBody = GetComponent<Rigidbody2D> ();
GetComponent<Rigidbody2D>().gravityScale = 0f;
}
// Update is called once per frame
void Update ()
{
if (Input.GetButtonDown ("Jump"))
{
GetComponent<Rigidbody2D> ().gravityScale = 3f;
}
}
void OnTriggerEnter2D(Collider2D other){
if (other.tag == "InvisGoal")
{
Ball.gameObject.GetComponent<Rigidbody2D>().gravityScale = 0f;
transform.position = new Vector3 (0.61f, 1.18f, 0f);
return;
}
}
}
Ball.gameObject.GetComponent<Rigidbody2D>().gravityScale = 0f;
这可能是导致问题的原因。
听起来这行中引用的RigidBody2D与您之前使用GetComponent()检索到的RigidBody2D不同。
GetComponent返回您从中调用GameObject的组件。 因此,在我上面提到的代码中,
Ball.gameObject.GetComponent<RigidBody2D>()
和
GetComponent<RigidBody2D>()
如果字段Ball不引用BallLaunch脚本所附加的同一个GameObject,则会为您提供两个不同的RigidBody2D组件。
[
只需更改:
Ball.gameObject.GetComponent<Rigidbody2D>().gravityScale = 0f;
至
GetComponent<Rigidbody2D>().gravityScale = 0f;
另外,由于您已经在Start方法中将myRigidBody字段引用了RigidBody2D,因此可以将所有后续的GetComponent替换为myRigidBody。
GetComponent<Rigidbody2D>().gravityScale = 0f;
至
myRigidBody.gravityScale = 0f;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.