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

Print message in Unity console when a GameObject hits a trigger? Unity5/2D

我正在为学校做一个 "Game",我需要统计选票。我正在使用 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" 站在按钮上时, 应该 添加 +1,并在控制台中显示消息 "One Vote Added",但事实并非如此.我做错了什么?

更新了代码

现在使用 OnCollisionEnter2D,但仍然无法正常工作。我还缺少什么?

您可能想要使用 Console.WriteLine("Your message"); 此外,但我不确定,你似乎得到了你的转换标签,这可能不是你想要做的

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

enter link description here

或者寻找合适的日志记录解决方案,例如 NLog。

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

由于 print 是在 MonoBehaviour 中定义的用于打印到 Unity 控制台的方法,我将假设您实际上是在 Unity 控制台中寻找输出,但什么也没有正在出现。这意味着 OnTriggerStay 没有被调用,或者碰撞器的根没有 PlayerObject 标签。

OnTriggerStay 当 3D 物理体位于触发器内部时调用。确保 vote GameObject 上有 Vote1 组件,并且其碰撞器已 "Is Trigger" 检查。

还要确保对象具有物理体和对撞机,后者不是触发器。对象的根变换(即层次结构中没有任何父项的变换)应该有 PlayerObject 标签。如果播放器在父容器内,则 transform.root 将获得该父容器而不是播放器本身。

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

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

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