Unity制作一个简单的NPC
今天我们将使用Unity制作一个简单的NPC。我们会先制作一个仿版的NPC人物,以下是详细教程。
1. 查看最终效果
在开始教程之前,我们先来看一下最终能达到的效果。下面是我在自己工程中实验得到的结果,画面中间是游戏角色,两边的两个就是我们制作的NPC。
需要注意的是,这种技术实现的效果和贴图关系很大。如果最终效果不理想,可以重新绘制一张贴图。
2. 实现步骤
实现这个简单的NPC一共包含三个部分:改变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来改变粒子的大小。 - 调整
Min Energy和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. 最后的说明
这是一种比较巧妙的做法,我们可以通过调整粒子效果来得到不同类型的NPC,例如火焰型等等。
另外,如果你的模型绑定了骨骼动画,那么模型上应该会自动绑定Skin Mesh Render组件。而且如果模型是标准的T型,如下图所示,我们可以变通一下,让NPC也使用Skin Mesh Render来播放动画,这样就不至于让NPC一直伸展着胳膊。不过,在这种情况下使用Mesh Particle Emitter添加粒子就没有效果了。此时,我们可以自行调整粒子效果,也能得到不错的呈现。