gpt4 book ai didi

c# - 在 Unity 中检查来自外部脚本的碰撞

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:11 24 4
gpt4 key购买 nike

我有以下脚本应该检测两个对象之间的碰撞(BoxCollider2D 是触发器,CircleCollider2D 是普通碰撞器)

public class ArcadeScore : MonoBehaviour {

public BoxCollider2D bc;
public CircleCollider2D cc;

private int score;

// Use this for initialization
void Start () {
score = 0;
}

// Update is called once per frame
void Update ()
{
if (bc.IsTouching(cc))
{
Debug.Log("collision detected");
score++;
}
}
}

但脚本不会在控制台中打印任何内容,所以我想知道是否可以从外部脚本检测触发器和普通碰撞器之间的碰撞?

最佳答案

您必须使用 OnCollisionEnter2D 而不是 IsTouching。 IsTouching 用于检测它们何时触摸帧,这可能不是真的。 具有 OnCollisionEnter2D 函数的脚本必须附加到带有碰撞器的 GameObject,而不是空的 GameObject。

the problem is that I constantly destroy that object and all the values revert back to 0

您必须分离您的游戏逻辑,使用在运行时销毁的对象对系统代码进行评分。基本上,您的游戏逻辑、分数系统代码不应附加到销毁自身的对象上。它们应该附加到一个空的游戏对象。

诀窍是找到分数系统对象,获取其脚本,然后在销毁发生碰撞的对象之前更新分数。

ScoreSystem 脚本(附加到一个空的游戏对象):

public class ArcadeScore : MonoBehaviour 
{
public int score;

// Use this for initialization
void Start () {
score = 0;
}
}

Collsion 脚本(使用 Collider 附加到 GameObject):

public class CollsionScript: MonoBehaviour 
{
ArcadeScore scoreSys;

void Start()
{
//Find the ScoreSystem GameObject
GameObject obj = GameObject.Find("ScoreSystem");
//Get the ArcadeScore script
scoreSys = obj.GetComponent<ArcadeScore >();
}

void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "YourOtherObject")
{
scoreSys.score++;
//You can now destroy object
Destroy(gameObject);
}
}
}

关于c# - 在 Unity 中检查来自外部脚本的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45096931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com