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 巡逻路线脚本,也可以绘制曲线
Unity AngryBots愤怒的机器人demo研究的更多相关文章
- 使用微软企业库5.0提供的unity配置解藕系统demo(源码)
最近公司集50多号开发人员的人力围绕一个系统做开发,框架是免不了要统一的,公司提供的架构,利于分工合作,便于维护,扩展,升级,其中使用了到微软的企业库来解藕系统,只是因为框架封装,于是在网上学习了一个 ...
- Unity 5.x 导入教学Demo
前言 小巫也来玩Unity3D了.以后会把学习的一些过程博客记录下来,方大家也方便自己学习和查看.本篇博客介绍怎样在Unityclient中导入Assert Store中下载的项目资源,方便我们进一步 ...
- 基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo
起因 本demo基于基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型而来 无意间发现一个基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型,但 ...
- Unity检视面板的继承方法研究 (二)
之前做了普通对象的可继承的检视面板类, 现在想要实现对Unity自带的检视面板的继承的话, 要怎样写呢? 万变不离其宗, 仍然是围绕UnityEditor.Editor.CreateEditor 这 ...
- Unity检视面板的继承方法研究 (一)
对于检视面板 Inspector 的面板继承方式对项目来说是很有必要的, 比如一个基类, 写了一个很好看的检视面板[CustomEditor(typeof(XXX))], 可是所有子类的面板无法直接继 ...
- unity 对Animator动画系统的研究
unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...
- Unity StartCoroutine 和 yield return 深入研究
http://www.cnblogs.com/fly-100/p/3910515.html
- 【Unity练习】 平衡球Demo
链接:http://pan.baidu.com/s/1pKEpnIz 密码:btke
- Unity3D心得分享
本篇文章的内容以各种tips为主,不间断更新 系列文章 =========================== "Unity测试系列"文章索引 Unity-Animator深入系列 ...
随机推荐
- 数组API
1.数组的创建 var arrayObj = new Array();//创建一个默认数组,长度是0 var arrayObj = new Array(size);//创建一个size长度的数组,注意 ...
- 会场安排问题---nyoj14
描述学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动.现在小刘有一些活动计划的时间表,他想尽 ...
- 用户、组或角色 '' 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)
SQLServer2008用户组或角色'*****'在当前数据库中已存在问题的解决办法 在迁移数据库的过程中SQLServer SDE的问题 为一个数据库添加一个用户时,提示以下信息:用户.组或角色 ...
- linux应用与发展(上)
UNIX/Linux发展历史 当年,没有cmm的概念,也没什么PMP认证什么的,导致了MIT,GE,AT&T联合开发multics失败,multics是一个复杂多功能的操作系统.开发者想要开发 ...
- php使用strlen()判断中文汉字字符串长度
php使用strlen()判断中文汉字字符串长度 对于含有中文情况,此时可以采用: iconv_strlen($str,"UTF-8"); iconv_strlen 是无论是何种编 ...
- ios-实现项目在开发、测试、正式环境快速部署
快速部署:简单的来说,就是不用更改开发.测试.正式环境下的 url ,来实现在同一台测试手机快速部署三种项目状态. Bundle ID一样只会出现一个app:不一样会出现三个app: 具体步骤: 一. ...
- Java中Double类型计算问题
public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); ...
- C输入输出函数与缓冲区
#转 对C语言输入输出流和缓冲区的深入理解C语言缓冲区(缓存)详解缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的 ...
- windows2003服务器mysql每天定时备份
1.php利用mysqldump备份数据库,代码如下: <?php /** * 数据库备份 */ $sqlname = $argv[1]; //接受bat或cmd传过来的第一个参数 要备份的数据 ...
- 会员管理系统全部源代码(C#+EF+SQLite+Winforms实现)
会员管理系统全部源代码,VS2010开发,使用Ado.net实体框架EF,简化数据库访问层,并能方便的移植到其他数据库.利用数据绑定减少编码量,提高程序的可维护性和可读性.使用Winfoms方便快速界 ...