• 熱門專題

Unity AngryBots憤怒的機器人demo研究

作者:HONT  發布日期:2016-11-24 21:08:21
Tag標簽:機器人  
  • 做為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.雨水實現

    雨水的做法并非主流的在相機前加一個塊狀的粒子發射器。而是用Mesh的移動來實現

    具體腳本在RainBox中,并通過RainManager獲取儲存的雨點Mesh。每一個Mesh都包含若干雨點面片

    落在地上的漣漪也是包含若干面片的Mesh,并且有多個。其腳本在RainsplashBox中,通過Shader(AngryBots/FX/RainSplash)來播放漣漪的陣列圖

    shader中根據不同坐標,取得不同播放時間:

    half timeVal = frac(_Time.z * 0.5 + v.texcoord1.x) * 2.0;

    另外其中一處循環取數組元素的腳本比較有趣(做了下修改):

    復制代碼
    int mIndex;
    
    
    void Update()
    {
        var collectionLength = 5;
        var a = (mIndex++) % collectionLength;
    
        Debug.Log('a: ' + a);//0,1,2,3,4 ... 0,1,2,3,4
    }
    復制代碼

    3.反射實現

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

    其做法比較經典,通過一個反射相機獲得反射內容,并用層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

    4.其他內容補充

    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 巡邏路線腳本,也可以繪制曲線

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
彩票联盟网站阳信县| 扎鲁特旗|