当游戏对象命中触发器时,在 Unity 控制台中打印消息?统一5/2D
本文关键字:消息 打印 统一 控制台 2D 对象 游戏 触发器 Unity | 更新日期: 2023-09-27 18:36:08
我正在为学校做一个"游戏",我需要统计选票。我使用 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,并在控制台中显示消息"已添加一票",但事实并非如此。我做错了什么?
更新了代码
现在使用 OnCollisionEnter2D,但仍然无法按预期工作。我还缺少什么?
由于print
是在MonoBehaviour
中定义的用于打印到 Unity 控制台的方法,因此我假设您实际上正在 Unity 控制台中查找输出,并且没有显示任何内容。这意味着没有调用OnTriggerStay
,或者碰撞器的根没有PlayerObject
标记。
当 3D 物理实体位于触发器内部时,将调用OnTriggerStay
。确保投票游戏对象具有 Vote1 组件,并且其碰撞体已选中"是触发器"。
还要确保物体有一个物理体和碰撞体,这不是触发器。对象的根转换(即层次结构中没有任何父转换的转换)应具有 PlayerObject
标记。如果玩家位于父容器内,则transform.root
将获取该父容器,而不是玩家本身。
此外,请确保两个项目之间的碰撞未通过编辑>项目设置->物理>图层碰撞矩阵过滤掉。
最后,确保所有内容都已启用!
注意:您正在使用OnTriggerStay
当播放器处于触发器中时,每帧将命中一次。如果您在投票后没有某种机制来删除玩家,那么他们将每秒增加 30-60 票,具体取决于 FPS。
可能不支持标准的 .NET BCL,您可能需要查看 Unity 的控制台"日志"功能:
在此处输入链接说明
例如,要么研究适当的日志记录解决方案,例如 NLog。
控制台的同一行中打印不同的字符串,请使用Console.Write("One vote Added")
。如果每次写入控制台时都需要一个新行,请使用 Console.WriteLine("One Vote Added")
.
您可能想使用 Console.WriteLine("您的消息");此外,但我不确定,您似乎正在获取转换标签,这可能不是您想要做的