繁体   English   中英

在Unity 2D重力中出错?

[英]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组件

[ 图片1]

假设BallLaunch脚本已附加到您要设置重力的Ball上(如上图所示)

只需更改:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM