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 巡逻路线脚本,也可以绘制曲线

posted @ 2016-11-22 21:30  HONT  阅读(4491)  评论(0编辑  收藏  举报