当GameObject遇到触发器时,在Unity控制台中打印消息? Unity5 / 2D

我正在为学校做一个“游戏”,我需要统计选票。 我正在使用Unity来让按钮上的字符跳转以计算投票数并继续下一个问题。 这是我到目前为止:

using UnityEngine; using System.Collections; public class Vote1 : MonoBehaviour { private int vote1; public GameObject hero_1; void Start () { vote1 = 0; } void Update () { } void OnCollisionEnter2D(Collision2D coll) { if (coll.gameObject.tag == "PlayerObject"){ vote1 = vote1 + 1; print("One Vote Added"); } } } 

当“hero_1”站在按钮上并且在控制台中显示消息“One Vote Added”时, 应该添加+1,但这不是正在发生的事情。 我究竟做错了什么?

更新了守则

现在使用OnCollisionEnter2D,仍然无法按预期工作。 我还缺少什么?

由于print是在MonoBehaviourMonoBehaviour的方法,可以打印到Unity控制台,因此我假设您实际上在Unity控制台中查看输出,并且没有任何内容显示。 这意味着OnTriggerStay没有被调用,或者对撞机的根没有PlayerObject标记。

当3D物理主体位于触发器内时,将调用OnTriggerStay 。 确保投票GameObject上有Vote1组件,并且其对撞机已选中“Is Trigger”。

还要确保对象具有物理主体和不是触发器的对撞机。 对象的根变换(即层次结构中没有父变换的变换)应该具有PlayerObject标记。 如果玩家在父容器内,那么transform.root将获得该父级而不是玩家本身。

此外,请确保通过编辑 – >项目设置 – >物理 – >图层碰撞矩阵过滤掉两个项目之间的碰撞。

最后,确保一切都已启用!

注意 :您正在使用OnTriggerStay ,当玩家处于触发状态时,每帧会被击中一次。 如果你投票时没有某种机制来移除玩家,那么他们将每秒增加30-60票,具体取决于FPS。

假设Unity可能不支持标准.NET BCL,您可能需要查看Unity的控制台“日志”function:

在此输入链接描述

例如,或者查看正确的日志记录解决方案,例如NLog。

如果要在控制台的同一行中打印不同的字符串,请使用Console.Write("One vote Added") 。 如果您每次写入控制台时都想要换行,请使用Console.WriteLine("One Vote Added")

您可能想要使用Console.WriteLine(“您的消息”); 此外,但我不确定,你似乎得到了你的变换标签,这可能不是你想要做的