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.雨水实现

雨水的做法并非主流的在相机前加一个块状的粒子发射器。而是用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 巡逻路线脚本,也可以绘制曲线

时间: 2024-12-05 02:12:37

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

Unity StartCoroutine 和 yield return 深入研究

StartCoroutine和yield return表面意思很好理解,StartCoroutine就是开启一个协程,yield return 是迭代器块返回调用迭代的地方. 是吧?不知道你什么感觉,反正我觉得,还是需要深入研究一下的.OK,here we go! 首先,先看一下StartCoroutine在Unity官方的解释. 意思是:一个协程的执行可以在任何地方用yield语句来暂停,yield return的值决定了什么时候协程恢复执行.协程在协调在几帧中执行的操作时有极大的用处.协程几

Unity 5.x 导入教学Demo

前言 小巫也来玩Unity3D了.以后会把学习的一些过程博客记录下来,方大家也方便自己学习和查看.本篇博客介绍怎样在Unityclient中导入Assert Store中下载的项目资源,方便我们进一步学习Unity引擎. unity中文官网:http://unity3d.com/cn/ 关于Unity的安装我就不说了.跟安装普通软件一样.假设实在不清楚自己百度解决这个问题或者买书.我使用的系统是macosx,Unity有相应mac版本号,代码编辑器是MonoDevelop.Windows则还能够

Android聊天机器人Demo

利用http://www.tuling123.com/openapi/实现的图灵机器人Android版本demo,欢迎大家下载试用. Demo Apk及其源码免积分下载:http://pan.baidu.com/s/1i3vd3sL 欢迎大家关注Android开发者社区微信公众号,官方会不定期给大家带来一些android开发优质试用的demo或框架,提高大家的开发效率,为大家提供保证优质的android demo源码. 扫描一下二维码关注:

unity 对Animator动画系统的研究

unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看文章边查阅文档,最好能动手测试. 文章的开始之前,先讲几个基本的知识的: 1.创建动画的一个基本步骤是设置一个unity3d可理解的简化后的骨骼到骨架中实际骨骼的映射:在Mecanim的术语中,这个映射称为Avatar,即avatar是骨骼到骨架的映射. (图片来自网) Avatar主要用于类人骨骼

unity普通的3D地图+人物行走demo

unity3D 五个面板: scene(场景视图) 整个游戏视图的概览 Game(游戏视图)是主摄像机照射 整体地图 所显示的区域 Hierarchy(层级视图) 存放scene视图 所用到的gameObjects Project(工程视图) 存放游戏图片材质的(可引入untiy自带的材质库) Inspector(监视视图) 主要用于设置对象属性的 位置 旋转 颜色,脚本,材质等组件 Hierarchy 层次视图下面的main Camera 为主摄像机 在Hierarchy 下面创建一个地形,T

Unity 新UI事件系统(EventSystem) Demo

新的UI系统消息传递被全新设计,该系统用MonoBehaviour 来实现自定义的接口,以便可以接受来自消息系统的回调.当一个对象被消息的执行指定,那么这个对象的所有实现了自定义接口的脚本将被通知,指定的方法将被执行. 1.定义一个接口ICustomMessageTarget继承IEventSystemHandler, 这样当发送此类型消息时,实现此接口的脚本所在的对象将会被通知. using UnityEngine; using UnityEngine.EventSystems; using

Unity之简单的机器人AI状态改变

最近在玩天涯明月刀,还蛮好玩,以前都不爱玩游戏,当然啦我现在升到38级了搁着也没玩了,不过曲无忆看外形真没有御姐的范倒像个萌妹子,可是慕情偏是个御姐的外形萌妹子的心啊啊啊 这两天看到知乎有有关于面试的问题,然后看到有关智能AI的,就想到天涯明月刀里做任务时的打怪,怪老是一会走啊走一会干嘛干嘛的,做虚拟的我还真没接触过咧 那就来看看呗,反正不掉肉不长肉的 这个是只是状态的改变,如果检测到周围有敌人或者啥的然后打啊打杀啊杀啊后面再加吧! 1 using UnityEngine; 2 using Sy

会话机器人Chatbot的相关资料

Chatbot简介 竹间智能简仁贤:打破千篇一律的聊天机器人 | Chatbot的潮流 重点关注其中关于情感会话机器人的介绍 当你对我不满的时候我应该怎么应对,当你无聊,跟我说你很烦的时候,我应该怎么应对,当没话讲的时候,我应该怎么应对. 第一,要能够辨识这样的状态:第二要能够应对这样的状态,如何在不合适的状态之后,做自我学习调整,成为一个好的状态.这就需要结合逻辑模型跟机器学习模型的方法.另一方面机器学习自己可以去制造很多交互的数据,这个交互数据产生一个好的交互模型,用交互模型再让机器能够对应

【Unity】7.4 游戏外设输入

分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 Unity可以处理摇杆.游戏手柄.方向盘等标准游戏外设的输入,使用的方法如下图所示: 虚拟按键需要在输入管理器中配置,把外设的输入消息映射给虚拟按键或输入轴以后,就可以在脚本中使用了. Unity默认为用户创建了若干已经映射了摇杆按钮的虚拟按键,包括Fire1.Fire2.Fire3.Jump以及虚拟轴Horizontal和Vertical,可以在脚本里直接使用它们. 二.基本用法示例 示例(Demo4_1_Prod