Unity AngryBots憤怒的機器人demo研究


做為Unity早期的經典demo,一直從3.5以后沿用到4.7.x版本。但其內部一些做法十分不合理。比如使用過多的根目錄,

創建怪物和玩家不用SpawnPoint。AI、CheckPoint的代碼實現過於隨意,代碼命名風格詭異等等。。

網上有很多相關的學習文章,所以我精簡了一下,將一些有用的部分學習並記錄下來

 

 

1.主角武器部分

 

WeaponSlot為武器主要GameObject節點,里面有各種相關腳本。

其中瞄准線(LaserScope)通過LineRenderer實現:

其Shader額外加了一個Noise效果,然后通過腳本改變uv位置和縮放。腳本為LaserScope,shader路徑AngryBots/FX/LaserScope

而映射在目標上的點使用面片實現,並根據每幀發射的射線取得法線朝向修改位置和方向。實現也在LaserScope里

 

另外,為了防止每一幀多次取得射線導致的開銷,專門有一個腳本PerFrameRaycast緩存射線內容,並且每幀更新。

復制代碼
function Awake () {
    tr = transform;
}

function Update () {
    // Cast a ray to find out the end point of the laser
    hitInfo = RaycastHit ();
    Physics.Raycast (tr.position, tr.forward, hitInfo);
}

function GetHitInfo () : RaycastHit {
    return hitInfo;
}
復制代碼

 

 

 

 

2.反射實現

 

沒想到居然做了實時的反射:

 

其做法比較經典,通過一個反射相機獲得反射內容,並用層Mask過濾地面等內容,取到水平線的點,乘以反射矩陣得到反射位置。

腳本在ReflectionFx中,參數如下:

 

幾項重要參數:

Reflective Object反射的對象,這里只是用這個集合里的元素取一個最近位置,並作為水平面參考得到反射點。

Reflective Materials 反射材質,用於把得到的RenderTexture丟到里面,Reflecction Sampler是賦值的Tex通道名稱。

Replacement Shader 處理反射的Shader,如果要拿來用可以直接拷貝該項目里的

 

目前已經到了Unity5,鏡面反射的處理方法已經非常多了,這里枚舉兩個:

The Blacksmith里的帶模糊效果的高質量鏡面反射:http://www.cnblogs.com/hont/p/5658491.html

 

使用反射探頭實現的的鏡面反射: http://www.cnblogs.com/hont/p/6091055.html

 

另外,關於傳統實時鏡面反射實現,這里還有一個文章推薦:http://gad.qq.com/article/detail/7157554

 

 

3.其他內容補充

 

1.游戲圖像品質管理位於QualityManager中,其中ShaderDatabase腳本儲存shader信息,並在修改品質時對shader maximum LOD進行批量修改。

2.MaterialImpactManager里存放的是物理材質和音效的映射表

3.ReflectiveBackgroundArbitrary的Shader里直接讀到LightMap,對於有要取到Lightmap需求的Shader,可以參考這個。

4.當前環境的色調等內容管理放在MoodBox里,包括MoodBoxManager,這套東西統稱為MoodBox System。我不太確定Mood這種命名是否官方,先記下。

5.Editor下有一個導出obj工具.導出后在ExportedObj文件夾下,可以直接導出.obj格式模型,但是許多細小的零件模型,而並非整合的。

6.Editor下還有一個天空盒生成器和Cubemap生成器,只需要提供一個點,即可輔助生成

7.Patrol Route 巡邏路線腳本,也可以繪制曲線


免責聲明!

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



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