我正在做一个功能,当玩家通过一扇门时,屏幕上会弹出一个消息。
我有几个问题:Debug.Log
给我从2到6个日志,当我通过对撞机平面传递,当我回到同一个对撞机平面时,脚本不会被第二次调用。
我想要实现的是,Debug.Log
只给了我一个日志,每次我通过对撞机,脚本就会再次运行。这是我的密码:
function OnTriggerEnter (other : Collider) { //OnTriggerStay gives the same result
if (other.tag == "Player") {
isColliding = true;
} else {
isColliding = false;
}
}
function OnGUI() {
if (isColliding) {
Debug.Log(isColliding);
//Application.ExternalCall('hive.OpenHiveAlert', 'test');
}
}
function OnTriggerExit() {
Destroy(this);
}
任何帮助都将不胜感激,谢谢。
发布于 2015-11-10 20:53:21
OnTriggerExit
没有以任何可定位的形式工作,为了只触发我的函数一次并再次“重用它”,我所做的是在折叠代码中:
#pragma strict
var isTrigger = false;
function OnTriggerEnter (other : Collider) {
if (other.tag == "Player") {
if (!isTrigger) {
Application.ExternalCall('hive.OpenHiveAlert', 'test');
isTrigger = true;
yield WaitForSeconds (10);
isTrigger = false;
}
}
}
这可能不是理想的代码,但我不能在这上面花更多的时间.谢谢你的时间,阿托斯和杰克。:)
发布于 2015-11-07 12:16:34
之所以会发生这种情况,是因为您不是在调用Debug.Log之后调用OnTriggerEnter,而是在OnGUI中调用它。OnTriggerEnter只在您进入时才被调用,这意味着它只被调用一次,而OnGUI每帧调用一次(多次),与任何这样的物理事件无关。
只要你的玩家在对撞机内(因为一旦你进入对撞机,isColliding就会变成真),你就永远不会重置它。只有当您退出时,该对象才会被销毁,并且您将不再看到任何调用。一旦开始绘制实际文本,您可能会得到您想要的结果(因为只要播放机在对撞机内,它就会绘制GUI)。
如果只需要一个Debug.Log,则应该将其放在OnTriggerEnter方法中If -语句的正文中。
发布于 2015-11-07 14:56:46
关于OnGUI,阿托斯是正确的。如果您真的想将它限制为一条Debug.Log消息,您可以在OnGUI中禁用bool --将它当作一个标志,直到OnGUI第一次响应为止。(尽管正如Athos所指出的,一旦您真正开始正确地显示GUI,您就会没事的)
还请注意,由于OnTriggerEnter中的of语句,如果有其他东西进入门触发器,它将禁用isColliding标志,这对我来说没有多大意义,因为玩家的碰撞状态并不真正取决于是否有其他东西进入门口
https://gamedev.stackexchange.com/questions/110907
复制相似问题