1. 写在前面

前几天看了cgcookie的一个教程,学习了下怎么根据已有人物模型制作一个仿版的NPC人物,感觉挺好玩的,整理一下放到博客里!

先看一下教程里面的最终效果。

是不是很像个幽灵~

下面是我在自己的工程中实验的结果。

中间是游戏角色,两遍两个就是NPC啦。

这种技术得到的效果和贴图关系很大,所以如果效果不好再画一张贴图吧

2. 实现

实现非常简单,一共包含三个部分:改变Mesh材质,给Mesh添加Particle,最后添加闪烁的脚本

2.1 改变Mesh材质

  • 首先新建一个空白对象,可以命名为holo_character,给它添加Mesh Filter和Mesh Render组件。
  • 将原模型的Mesh赋值给上述Mesh Filter组件。然后新建一个材质,并赋值给Mesh Render组件来替换原来的模型材质。新的材质使用Particles/Additive的Shader,贴图属性中使用这个NPC的贴图,也也可以直接使用原模型的材质贴图。材质颜色可以根据喜好自行调节。面板设置如下:
  • 如果你的模型包含多个Mesh,例如头和身体是分开的,那么对每个部分都做如上操作就行了。
现在你的NPC应该看起来幽灵化了。

2.2 给Mesh添加Particle

给holo_character依次添加Mesh Particle Emitter、Particle Animator和Particle Render组件。将上一步新建的材质赋值给Particle Render中的材质对象。到了这里基本外观就出来了。

然后,可以根据需要调整相应的参数来得到想要的效果。例如,可以调整Mesh Particle Emitter中的Min Size,Max Size来调整粒子的大小,调整MinEnergy和Max Energy来调整每个粒子的持续时间,调整Min Emission和Max Emission来调整同一时间粒子的个数等。

2.3 添加闪烁脚本

最后,为了让这个NPC看起来更像一个幽灵,我们添加一个闪烁的脚本。这个脚本的主要原理就是控制材质的透明度,非常简单。新建一个脚本FlickeringScript.cs。代码如下:

using UnityEngine;
using System.Collections; public class FlickeringScript : MonoBehaviour { private Color color; // Use this for initialization
void Start () {
color = renderer.material.GetColor("_TintColor");
StartCoroutine(WaitForColor());
} IEnumerator WaitForColor() {
while (true) {
yield return new WaitForSeconds(Random.Range(0.0f, 0.1f));
color.a = Random.Range(0.0f, 0.5f);
renderer.material.SetColor("_TintColor", color);
}
}
}

将上述代码添加到holo_character。

3. 最后的话

这是一种很tricky的做法,可以通过调整粒子效果来得到不同类型的NPC,例如火焰性等等。

还有一点要说明,如果你的模型绑定了骨骼动画的,那么模型上应该会自动绑定Skin Mesh Render组件,而且模型又是标准的T型,如下图这样,那么可以变通一下,NPC也使用Skin Mesh Render来播放动画,不至于让NPC一直都是伸展着胳膊的。。。但是这样添加粒子时使用Mesh Particle Emitter就没有用了。如果这样,我们可以自行调整粒子效果,得到其他的效果也是不错的~

最后,如果您觉得本文对您有所帮助,请帮小女子投一票吧!谢谢~

http://vote.blog.csdn.net/Article/Details?articleid=30241041

【Unity技巧】制作一个简单的NPC的更多相关文章

  1. PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例

    前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...

  2. 实例学习SSIS(一)--制作一个简单的ETL包

    原文:实例学习SSIS(一)--制作一个简单的ETL包 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SS ...

  3. TensorFlow练习13: 制作一个简单的聊天机器人

    现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...

  4. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  5. 如何使用AEditor制作一个简单的H5交互页demo

    转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...

  6. 制作一个简单的WPF图片浏览器

    原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1.  对指定文件夹下所有JPG文件进行预览2.  对选定图片进行旋转3.  对选定图片 ...

  7. 自己制作一个简单的操作系统二[CherryOS]

    自己制作一个简单的操作系统二[CherryOS] 我的上一篇博客 自己制作一个简单的操作系统一[环境搭建], 详细介绍了制作所需的前期准备工作 一. 一点说明 这个操作系统只是第一步, 仅仅是开机显示 ...

  8. 【Unity技能】做一个简单的NPC

    1. 写在前面 前几天我看到cgcookie一个教程.学习了下怎么依据已有人物模型制作一个仿版的NPC人物.感觉挺好玩的,整理一下放到博客里! 先看一下教程里面的终于效果. 是不是非常像个幽灵~ 以下 ...

  9. Expression Blend4经验分享:制作一个简单的图片按钮样式

    这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...

随机推荐

  1. C语言第三次程序设计作业

    (一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 1)源程序(有错误的程序) #include <stdio.h> int main(v ...

  2. postman 模拟请求中添加 header,post请求中传json参数

    1. GET 请求 2.Post 请求 (请求参数为Json,header中带有参数) 问题延伸 GET请求不能够 添加 Body 吗?[答案]

  3. node之子线程child_process模块

    node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,用于新建子进程,子进程的 ...

  4. c#默认类的修饰符。

    类的默认修饰符是internal  当其修饰符为internal时,其他模块不能访问该类, 所以class类的修饰符一般为public

  5. numpy的初探

    # data = numpy.genfromtxt("C:\\Users\\Admin\Desktop\\111.txt", delimiter='\t', dtype='str' ...

  6. linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties

      Day12 IO  序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...

  7. fireBug引入JQuery,方便书写jq调试代码

    在控制台执行下段代码,等到网络中加载完成后,即可正常运行jq代码.也可以根据需要进行修改引入其他js代码. javascript:(function(url) { var s = document.c ...

  8. python while条件和if判断的总练习

    输出123456 89的数字 num =1 while num < 11: if num == 7: pass else: print(num) num = num + 1 输出1-100的奇数 ...

  9. Go 语言变量作用域

    作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函数定义中的变量称为形式 ...

  10. 一例完全理解vue 2.0 的slots 和 functional render

    https://jsfiddle.net/pronan/mjqpmw0u/ 通过调节plan="bbb"的值, 比如换成plan="children",你会发现 ...