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

Unity AngryBots愤怒的机器人demo研究的更多相关文章

  1. 使用微软企业库5.0提供的unity配置解藕系统demo(源码)

    最近公司集50多号开发人员的人力围绕一个系统做开发,框架是免不了要统一的,公司提供的架构,利于分工合作,便于维护,扩展,升级,其中使用了到微软的企业库来解藕系统,只是因为框架封装,于是在网上学习了一个 ...

  2. Unity 5.x 导入教学Demo

    前言 小巫也来玩Unity3D了.以后会把学习的一些过程博客记录下来,方大家也方便自己学习和查看.本篇博客介绍怎样在Unityclient中导入Assert Store中下载的项目资源,方便我们进一步 ...

  3. 基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo

    起因 本demo基于基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型而来 无意间发现一个基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型,但 ...

  4. Unity检视面板的继承方法研究 (二)

    之前做了普通对象的可继承的检视面板类, 现在想要实现对Unity自带的检视面板的继承的话, 要怎样写呢? 万变不离其宗,  仍然是围绕UnityEditor.Editor.CreateEditor 这 ...

  5. Unity检视面板的继承方法研究 (一)

    对于检视面板 Inspector 的面板继承方式对项目来说是很有必要的, 比如一个基类, 写了一个很好看的检视面板[CustomEditor(typeof(XXX))], 可是所有子类的面板无法直接继 ...

  6. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  7. Unity StartCoroutine 和 yield return 深入研究

    http://www.cnblogs.com/fly-100/p/3910515.html

  8. 【Unity练习】 平衡球Demo

    链接:http://pan.baidu.com/s/1pKEpnIz 密码:btke

  9. Unity3D心得分享

    本篇文章的内容以各种tips为主,不间断更新 系列文章 =========================== "Unity测试系列"文章索引 Unity-Animator深入系列 ...

随机推荐

  1. AspCms标签手册

    网站通用标签 基本标签 {aspcms:sitepath} 网站终极目录(可放在二级目录,其它语言则在三级目录) {aspcms:languagepath} 语言目录 {aspcms:siteurl} ...

  2. DataTable的一些用法

    手动给DataTable添加数据 DataTable tab = new DataTable(); tab.Columns.Add("id", typeof(int));//添加列 ...

  3. rename 快速移动文件或者文件夹

    有几种情况: 1.对于文件,rename可以在不同盘符之间移动. 2.对于空文件夹,rename也可以在不同盘符之间移动.但是目标文件夹的父目录必须存在. 3.对于非空文件夹,只能在同一盘符下移动. ...

  4. Web前端开发基础 第四课(CSS一些性质)

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签 ...

  5. poj2305-Basic remains(进制转换 + 大整数取模)

    进制转换 + 大整数取模一,题意: 在b进制下,求p%m,再装换成b进制输出. 其中p为b进制大数1000位以内,m为b进制数9位以内二,思路: 1,以字符串的形式输入p,m; 2,转换:字符串-&g ...

  6. struct大小

    对齐. #include <iostream> using namespace std; struct S1 { int a; char b; char c; }; struct S2 { ...

  7. UrlRewriteFilter

    UrlRewriteFilter是一个改写URL的Java Web过滤器,可见将动态URL静态化.适用于任何Java Web服务器(Resin,Jetty,JBoss,Tomcat,Orion等).与 ...

  8. Jfianl

    http://www.oschina.net/question/257183_149268----------- 添加Handler: me.add(new ContextPathHandler(&q ...

  9. ajax同步、异步执行简单理解与证明

    此理解范例代码来自前几篇随笔! 首先我们来先了解下AJAX: Ajax:全称“Asynchronous Javascript and XML”(异步Javascript和XML),他是由Javascr ...

  10. [BS-29] 给UIView添加背景图片

    给UIView添加背景图片 //默认情况下只能设置UIView的背景颜色,不能给UIView设置背景图片,但通过绘图知识可以做到 - (void)drawRect:(CGRect)rect { [su ...