陕西棋牌

  • 热门专题

Unity AngryBots愤怒的机器人demo研究

作者:HONT  发布日期:2016-11-24 21:08:21
  • 做为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 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规

    <dir id='dml79'><del id='dml79'><del id='dml79'></del><pre id='dml79'><pre id='dml79'><option id='dml79'><address id='dml79'></address><bdo id='dml79'><tr id='dml79'><acronym id='dml79'><pre id='dml79'></pre></acronym><div id='dml79'></div></tr></bdo></option></pre><small id='dml79'><address id='dml79'><u id='dml79'><legend id='dml79'><option id='dml79'><abbr id='dml79'></abbr><li id='dml79'><pre id='dml79'></pre></li></option></legend><select id='dml79'></select></u></address></small></pre></del><sup id='dml79'></sup><blockquote id='dml79'><dt id='dml79'></dt></blockquote><blockquote id='dml79'></blockquote></dir><tt id='dml79'></tt><u id='dml79'><tt id='dml79'><form id='dml79'></form></tt><td id='dml79'><dt id='dml79'></dt></td></u>
  1. <code id='dml79'><i id='dml79'><q id='dml79'><legend id='dml79'><pre id='dml79'><style id='dml79'><acronym id='dml79'><i id='dml79'><form id='dml79'><option id='dml79'><center id='dml79'></center></option></form></i></acronym></style><tt id='dml79'></tt></pre></legend></q></i></code><center id='dml79'></center>

      <dd id='dml79'></dd>

        <style id='dml79'></style><sub id='dml79'><dfn id='dml79'><abbr id='dml79'><big id='dml79'><bdo id='dml79'></bdo></big></abbr></dfn></sub>
        <dir id='dml79'></dir>