我今天偶然碰到一个问题,当时我只是在做一个乒乓球比赛,我制作了一个脚本,将球预制了起来,当进球时,球将重置并再次移动。但是,当球的实例化版本变为现实时,它并没有与任何东西发生碰撞!它有一个刚体对撞机和一个盒子对撞机!
PS:运行过程中一切正常,因为没有通过代码实例化任何东西
这是我的代码:
public class Ball : MonoBehaviour
{
[SerializeField]
private Rigidbody2D rb;
[SerializeField]
private float speed = 10;
void Awake()
{
rb = GetComponent<Rigidbody2D>();
Launch();
this.gameObject.name = "Ball";
BoxCollider boxCollider = gameObject.AddComponent<BoxCollider>();
Rigidbody2D gameObjectsRigidBody = this.gameObject.AddComponent<Rigidbody2D>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void Launch()
{
//code used to determine in which direction the ball should go when it spawns
float x = Random.Range(0, 2) == 0 ? -1 : 1;
float y = Random.Range(0, 2) == 0 ? -1 : 1;
rb.velocity = new Vector2(speed * x, speed * y);
}
}
谢谢!
答案 0 :(得分:0)
我想出了解决这个问题的办法,但并未完全解决。我以为我会在这里回答,以防有人出现同样的问题。
因此,即使禁用了该程序,也始终会调用Awake
函数。因此,当实例化我的对象时,脚本处于非活动状态,但仍处于唤醒状态,导致我将所有起始代码都放在awake
函数中。
要激活脚本,请执行以下操作:
private Scriptname script;
private void Awake()
{
script = GetComponent<ScriptName>();
script.enabled = true;
}
有关此主题的更多信息here