我目前正在开发策略游戏,我想使用GUI.Button对游戏对象执行动作。我正在使用射线投射和鼠标单击来选择对象,但是当我单击GUI.Button进行另一项操作时,该按钮消失了。我想使用该按钮打开另一个GUI.Box以显示一些描述。
我知道为什么按钮消失了,这是因为我在更新功能中投射了投射到按钮点击的光线,但是如何避免这种情况呢?我也知道我必须使用EventTrigger,但是我对javascript事件触发器不熟悉,我在线搜索过,但是找不到任何有用的javascript。
屏幕截图:
这是我的脚本:
@HideInInspector
var isCalled:int = 0;
@HideInInspector
var scWidth:int = 0;
@HideInInspector
var scHeight:int = 0;
function Start () {
scWidth = Screen.width;
scHeight = Screen.height;
}
function Update () {
if (Input.GetMouseButtonDown(0)) {
var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hit : RaycastHit;
if (Physics.Raycast (ray, hit)) {
if (hit.collider.tag == "House") {
isCalled = 1;
} else{
isCalled = 0;
}
}
}
}
function OnGUI(){
if(isCalled==1)
GUI.Button(Rect(scWidth/2,(scHeight/2)+(scHeight/4),120,120), name);
}
}
如果我没看错,问题是当您单击按钮时,在单击按钮之前会启动射线广播,并且您选择其他对象或根本没有对象,并且按钮消失或重新出现,但是对于另一个对象,您需要做的是检查如果单击GUI,如果是,则不要投影选择对象的光线投射。这就是你要怎么做。
var selectedUI : GameObject = EventSystem.current.currentSelectedGameObject;
if (Input.GetMouseButtonDown(0) && selectedUI) {
var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hit : RaycastHit;
if (Physics.Raycast (ray, hit)) {
if (hit.collider.tag == "House") {
isCalled = 1;
} else{
isCalled = 0;
}
}
}
我使用C#工作,所以我可能已经犯了一些语法错误,但是逻辑是正确的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句