gpt4 book ai didi

c# - Unity - OnTriggerEnter 未注册碰撞

转载 作者:行者123 更新时间:2023-11-30 23:04:41 26 4
gpt4 key购买 nike

我正在尝试对 2D 角色和对撞机对象进行碰撞。我已经定义了 OnTriggerEnter 函数以在输入触发器时在调试器中显示一条消息。该角色是 Unity 标准 Assets 包中的“CharacterRobotBoy” Assets (包含一个 BoxCollider2D),我希望它与另一个带有附加 BoxCollider2D 的对象发生碰撞,设置为触发器。我在第二个对象上勾选了触发器。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PickUpCheck : MonoBehaviour {


private int pickUpCount;

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


void OnTriggerEnter(Collider collider)
{
// if (collider.gameObject.name == "RobotBoy")
// pickUpCount++;
Debug.Log("PickUp " + pickUpCount);
}

// Update is called once per frame

void Update () {

}
}

我已经尝试将脚本附加到角色和其他对象上,但似乎无法注册与触发器的碰撞。

/edit - 我读过有或曾经有 OnTriggerEnter2D。我试过调用它,但它在 Visual Studio 中无法识别。不确定它是否仍然存在或者我做错了什么?

/edit - 将代码切换为 -

void OnTriggerEnter2D(Collider2D collider)
{
// if (collider.gameObject.name == "RobotBoy")
// pickUpCount++;
Debug.Log("PickUp " + pickUpCount);
}

但还是没有运气......

Pick up object

/edit - @Eddge 已经为角色和拾取对象设置了一个公共(public)层,尽管我认为在没有设置层的情况下仍然会发生碰撞?

Collision Matrix

This答案是有用的,但我确保我的设置中已经有描述的组件 - 两个对象上的碰撞器,一个对象上存在的刚体和一组作为触发器。

/edit 已解决! - 好的,所以我清理了调试(感谢@Eddge 的建议)。我将脚本移动到角色并注意到发生了碰撞,但不是与拾取对象发生了碰撞。

我将 OnTriggerEnter2D 中的代码切换为输出碰撞对象的名称,这有助于我更清楚地了解发生了什么:

void OnTriggerEnter2D(Collider2D collider)
{
Debug.Log(collider.gameObject.name);
}

原来问题出在我修改为拾取器的预制件中的 BoxCollider2D。我重建了游戏对象,这解决了问题。

最佳答案

如果您正在开发 2D 游戏,则必须使用 OnTriggerEnter2D(Collider2D other)。目前,您正在使用OnTriggerEnter,它只会记录 3D 碰撞。此外,请确保您传递的是 Collider2D 作为函数的参数。

所以把你的代码改成这样:

 void OnTriggerEnter2D(Collider2D collider)
{
// if (collider.gameObject.name == "RobotBoy")
// pickUpCount++;
Debug.Log("PickUp " + pickUpCount);
}

Check out the Unity API docs

关于c# - Unity - OnTriggerEnter 未注册碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245309/

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