Unity3d面試6


1,如何避免點擊UI按鈕時穿透,同時觸發了相同位置場景模型的點擊事件的情況?(NGUI)
1,如何避免點擊UI按鈕時穿透,同時觸發了相同位置場景模型的點擊事件的情況?(NGUI 判斷 是否點擊到UI)

答:1,通過射線分層處理,顯示層分為不同的Layer,用UICamera發射一條射線並腳本里設置他的響應事件的層。
    2,在高版本的NGUI中,UICamera中有一個變量isOverUI,這個值為真時表示點擊到了UI,反之就是沒有。

2,切換場景時,如何讓背景音樂持續播放,而不是重新播放?
答:1,使用DontDestroyOnLoad()方法掛載一個音樂組件,當然這個方法也可以保存一些全局游戲腳本。
        但是使用時避免重復調用,可以用判斷的方式來調用或者銷毀但是不是很好,最好的方式是寫個
        靜態全局的單例類,在游戲初首次進入時綁定這個腳本,這樣這個方法永遠只會走一遍。

 

public static Global instance; static Global() { GameObject go = new GameObject("Globa"); DontDestroyOnLoad(go); instance = go.AddComponent<Global>(); } public void DoSomeThings() { Debug.Log("DoSomeThings"); } void Star() { Debug.Log("Start"); } 

 

 

3,如何實現游戲存檔和讀檔的功能?
答:1,Unity提供了一個用於本地持久化保存與讀取的類——PlayerPrefs。工作原理非常簡單,以鍵值對
        的形式將數據保存在文件中,然后程序可以根據這個名稱取出上次保存的數值。
        PlayerPrefs類支持3中數據類型的保存和讀取,浮點型,整形,和字符串型。
        分別對應的函數為:這些函數的用法基本一致使用Set進行保存,使用Get進行讀取
        SetInt();保存整型數據;
        GetInt();讀取整形數據;


        SetFloat();保存浮點型數據;
        GetFlost();讀取浮點型數據;


        SetString();保存字符串型數據;
        GetString();讀取字符串型數據;


     2,XML,sql,txt等配置文件都可以實現存讀等功能,PlayerPrefs自帶的類只能實現簡單的存取功能。
        XML存檔參考http://blog.sina.com.cn/s/blog_471132920101d3kh.html。

4,什么是協同程序?請舉一個游戲中應用協程的例子。


答:Unity的協程系統是基於C#的一個簡單而強大的接口 ,IEnumerator,它允許你為自己的集合類型編寫枚舉器。

    1,所謂協同,就是在主程序運行的時間同時開啟另外一段邏輯處理,來協同當前程序的執行,


       當你在StartCoroutine的函數體里處理一段代碼時,利用yield語句等待執行結果,這期間不影響主程
       序的繼續執行,可以協同工作。


    2,在游戲中游戲開始前的倒計時就可以用到協同程序,網絡游戲的加載進度,游戲中的順序控制等。
       下面舉個計時的例子,方法的狀態被存儲了,這使得方法中定義的這些變量都會保存它們的值,即使是在不同的幀中

 

IEnumerator CountSeconds() { int seconds = 0; while(true) { for(float timer = 0; timer < 1; timer += Time.deltaTime) Yield return 0; seconds++; Debug.Log(seconds +" seconds have passed since the Coroutine started."); } }


5,什么是游戲框架?使用框架的好處是什么? 
答:1,游戲框架是比較上層的封裝,是一套快速搭建游戲的代碼結構。 
    2,使用游戲框架開發能節約工程時間,易維護,易擴展,易閱讀開發,可復用。 
       選擇框架和使用框架是控制框架的基礎。 

 

6,如何在Unity中播放視頻?
答:1,首先下載安裝Quicktime ,U3D承認的視格式為.mov, .mpg, .mpeg, .mp4, .avi, .asf格式。
    2,創建一個對象,使用對象拖拽的形式為Mov Texture對象賦值,之后就可以在腳本中使用它了。

 

<span style="color:#0000ff;">public class Test: MonoBehaviour { //電影紋理 public MovieTexture movTexture; void Start() { //設置當前對象的主紋理為電影紋理 renderer.material.mainTexture = movTexture; //設置電影紋理播放模式為循環 movTexture.loop = true; } void OnGUI() { if(GUILayout.Button("播放/繼續")) { //播放/繼續播放視頻 if(!movTexture.isPlaying) { </span><span style="color:#ff0000;"> movTexture.Play();</span><span style="color:#0000ff;"> } } if(GUILayout.Button("暫停播放")) { //暫停播放 </span><span style="color:#ff0000;"> movTexture.Pause();</span><span style="color:#0000ff;"> } if(GUILayout.Button("停止播放")) { //停止播放 </span><span style="color:#ff0000;">movTexture.Stop();</span><span style="color:#0000ff;"> } } }</span>

3,另一種是看MOMO帖子學來的,用GUI的方式,直接調用DrawTexture()。程序參考MOMO帖子 
       http://www.xuanyusong.com/archives/1019 
7,跑酷游戲的無盡關卡是如何生成的? 
答:設計多種場景塊,加載到對象池,對象緩存復用,根據游戲內容制定隨即組合的規則,然后根據規則 
    調用不同的場景塊。例如有的場景是特定場景。用量化的方法定義難度。 

 

8,如何增強ARPG Action Role Playing Game 游戲的打擊感?
答:1,從美術資源上看,不管是2D還是3D角色的動作流暢度跟動畫的合理性都能提高游戲的打擊感。
    2,游戲中角色的技能或者特定動作加上拖尾效果,多一些技能特效,畫面扭曲效果。被打擊方的狀態控制。
    3,相機,也就是主視角可以增加震動效果,鏡頭的一些特效,例如主角的健康狀態顯示等。
    4,音效的增加,音效是非常非常重要的一個選項。
    5,設備上的體現,理由手機或者游戲手柄的震動。

9,游戲慢鏡頭回放功能的實現思路?如足球游戲中的精彩鏡頭回放。
答:1,直接錄屏將整個動畫保存出mp4格式進行壓縮,如果是PC端的話找一些錄屏插件,移動端也有插件不過好像
       都不支持視頻保存,記錄回放插件EzReplayManager,EveryPlay等移動端插件都比較好用
    2,狀態記錄同步,記錄每一幀所有角色狀態,包括位置,旋轉等,這種方式代碼比較容易實現,
       文件量會比較大,3分鍾視頻,一秒鍾30幀,需要36030 = 5400幀如果每個角色每一幀都進行
       記錄至少要3M以上,如果角色少做一些簡單的優化比如,只有發生修改的時候才記錄會明顯的
       降低文件量,但是對於移動端流量還是很有壓力。

10,LOD技術是什么?優缺點是?
答:1,LOD是Levels of Detail的簡稱,譯為多細節層次。LOD技術指根據物體模型的節點在顯示環境中所處的位置
       和重要度,決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。
       一個有關於LOD的插件Mesh Baker LOD 1.4
    2,LOD的優點可以根據距離動態地選折渲染不同細節的模型
    3,LOD缺點增加游戲容量不同細節的模型要准備多個,同時增加美術的工作量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM