GameDesign 板


LINE

※ 引述《flyfeather92 (老娘)》之銘言: : 小妹不才 目前是unity新手 : 我想寫一個在特定秒數會跳出button的裝置 : var mySkin : GUISkin; : var myWeapon : GameObject; : var WeaponClosed : boolean = false; : var btnTexture : Texture; : function OnGUI() : { : print (Time.time); : // Waits 6 seconds : yield WaitForSeconds (6); : GUI.skin = mySkin; : if(GUI.Button(Rect(400, 40, 160, 30),"O")) : { : } : else if(GUI.Button(Rect(400, 80, 160, 30), "X")) : { : } : } : 可是在GAME裡面連BUTTON都跳不出來 : 之後也想請問各位大大 如果我在if裡面要移動特定的物件該怎麼做? OnGUI 是 Unity 處理 GUI event 時的 callback function 每個 frame 可能會呼叫它許多次 這意味著 OnGUI 必需在一個 frame 以內結束,否則整個程式會卡住 所以遇到超過一個 frame 的動作必需用另外的方法處理 比較無腦的方式是設一個時間變數 我比較熟 C# 所以下面是用 C# 當例子 (沒實際跑過,小錯誤請見諒) class ButtonGroup : MonoBehaviour { float myElapsed = 0.0f; void Update() { myElapsed += Time.deltaTime; } void OnGUI() { if(myElapsed < 6.0f) return; if(GUI.Button(...)){ ... } } } 至於移動特定物件,用 coroutine 比較方便 IEnumerator MoveObject(GameObject obj, Vector3 dest, float duration) { Vector3 delta = dest - obj.transform.position float elapsed = 0.0f; while(elapsed < duration){ elapsed = Math.Min(duration, elapsed+Time.deltaTime); obj.position = dest - delta * (1.0f - elapsed/duration); yield return null; } } void OnGUI() { if(my_elapsed < 6.0f) return; if(GUI.Button(...)){ // 在 3 秒內把 myWeapon 移動到 myDestination StartCoroutine(MoveObject(myWeapon, myDestination, 3.0f)) } } 但這樣寫有個問題 如果玩家重覆點擊同一個按鈕 就會造成兩個 coroutine 更改同物件的位置,結果通常不是你想要的 所以這邊還要加個 flag 來檢查物件是否已經在移動了 最後 其實 OnGUI 的設計根本就很難用 然後 Unity 的 coroutine 功能也很弱 當你的 UI 元件愈來愈多,整個 code 會變得非常雜亂 因此最好還是建立自己的 GUI 和 coroutine 系統 但這就沒辦法用一篇文章講完了 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.3.139
1F:推 chenglap:每次我看到 onGUI 就在想 unity 團隊有多仇視 2D 09/04 13:32
2F:推 changyin:推~StartCoroutine真的要避免出現在Update 或 onGUI上... 09/04 13:41







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP