我试图为2D角色和碰撞对象做碰撞。我已经定义了OnTriggerEnter函数,以便在输入触发器时在调试器中显示消息。角色是" CharacterRobotBoy"来自Unity标准资产包的资产(包含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);
}
但仍然没有运气......
/ edit - @Eddge为角色和拾取对象设置了一个公共图层,虽然我认为在没有图层设置的情况下仍然会发生碰撞?
This答案提供了丰富的信息,但我确保我已经在我的设置中有所描述的组件 - 两个对象上的碰撞器,其中一个对象上存在刚体,另一个设置为触发器。
/ edit Solved! - 好的,所以我清理了调试(感谢@Eddge的建议)。我将脚本移动到角色并注意到发生了碰撞,但没有发现拾取对象。
我在OnTriggerEnter2D中切换代码以输出碰撞对象的名称,这有助于我更清楚地了解发生了什么:
void OnTriggerEnter2D(Collider2D collider)
{
Debug.Log(collider.gameObject.name);
}
事实证明问题出在我预修的预制件中的BoxCollider2D作为拾取器。我重建了游戏对象,这解决了这个问题。
答案 0 :(得分:2)
如果您正在处理2D游戏,则必须使用 OnTriggerEnter2D(Collider2D other)。目前,您正在使用 OnTriggerEnter ,仅注册3D冲突。另外,请确保您已将 Collider2D 作为函数的参数传递。
所以将代码更改为:
void OnTriggerEnter2D(Collider2D collider)
{
// if (collider.gameObject.name == "RobotBoy")
// pickUpCount++;
Debug.Log("PickUp " + pickUpCount);
}
答案 1 :(得分:0)