做为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. BizTalk动手实验(六)Orchestration开发

    1 课程简介 通过本课程熟悉Orchestration的相关开发与测试技术 2 准备工作 熟悉XML.XML Schema.XSLT等相关XML开发技术 熟悉.NET相关开发技术 新建BizTalk空 ...

  2. node exports与 module.exports的区别

    你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件) exports.name = function() { console.log( ...

  3. 【7集iCore3基础视频】7-3 iCore3硬件介绍

    iCore3原理图介绍: 高清源视频:http://pan.baidu.com/s/1gfbhuE3%20密码:xnbc iCore3 购买链接:https://item.taobao.com/ite ...

  4. 【java基础学习】字符串

    字符串 1. java内存区域(堆区.栈区.常量池) 2. String方法 获取长度 length(); 获取位置 indexOf(index); lastIndexOf(index) 获取子串 c ...

  5. 【转】Unity中的协同程序-使用Promise进行封装(三)

    原文:http://gad.qq.com/program/translateview/7170967 译者:崔国军(飞扬971)    审校:王磊(未来的未来) 在这个系列的最后一部分文章,我们要通过 ...

  6. JS中构造函数与函数

    //构造函数中,如果返回的是一个对 象,那么就保留原意. 如果返回的是非对象,比如数字.布尔和字符串,那么就返回 this,如果没有 return 语句,那么也返回this. var myFun1 = ...

  7. 计算机视觉(Computer Version,CV)、模式识别、人工智能

    一.计算机视觉 Divid Marr将计算机视觉系统的开发问题归纳为3个要素: (1)数学理论 考虑数学计算层面的目标及可以引入的合理约束条件. (2)描述和算法 重点解决计算机视觉中的输入输出的数据 ...

  8. Java学习-042-获取目录文件列表(当前,级联)

    以下三个场景,在我们日常的测试开发中经常遇到: 软件自动化测试,在进行参数测试时,我们通常将所有相似功能的参数文件统一放在一个目录中,在自动化程序启动的时候,获取资源参数文件夹中所有参数文件,然后解析 ...

  9. Java 多线程submit和execute

    submit方法: public abstract class AbstractExecutorService implements ExecutorService { protected <T ...

  10. iOS,第三方库使用

    1.ASIHttpRequest网络请求库 2.MBProgressHUD指示层库 3.Toast+UIView提示库 4.SDWebImage图片缓存库 5.MGSwipeTableCell单元格侧 ...