使用它的方法如下,首先打开Unity游戏引擎编辑器,然后在Project视图中右键选择Import Package -> Charactr Controller(角色控制器)把它导入我们的工程中。如下图所示,第一人称与第三人称的组建已经加入Project视图中。3rd Person Controller 表示第三人称控制器,First Person Controller表示第一人称控制器。
第一人称视角的实现原理是在游戏场景中创建了一个胶囊体的游戏对象,并且给胶囊体对象身上绑定了一个摄像机,摄像机对象如下图所示,它绑定在”Person Controller”中。这时场景中默认的摄像机就会失效,可以直接删掉默认的摄像机。通过按键控制这个胶囊体移动,通过鼠标修改胶囊体的朝向,此时你就会发现第一人称视角已经完全实现,目前为止我们不需要编写一行代码。目前场景中的天空盒子我是使用skyBox组件绑定在摄像机中,因为第一人称视角的摄像机对象在”Person Controller”中,所以需要将SkyBox组件绑定在这个摄像机中,如果绑定在默认摄像机中那么你将不会看到天空的效果。
[代码]java代码:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
//主动碰撞的对象名称
string castName = null;
//接收碰撞的对象名称
string receiveName = null;
void OnGUI ()
{
if(castName!= null && receiveName !=null)
{
//设置显示的颜色为黑色
GUI.color = Color.black;
//显示主动碰撞的对象 与接收碰撞的对象名称
bel(new Rect(100,100,200,30),"主动碰撞的对象名称"+castName);
bel(new Rect(100,200,200,30),"接收碰撞的对象名称"+receiveName);
}
}
//角色控制器组件在与具有Collider组件对象之间的碰撞
void OnControllerColliderHit(ControllerColliderHit hit)
{
//得到接收碰撞名称
GameObject hitObject = hit.collider.gameObject;
//当它不是地面时间
if(!hitObject.name.Equals("Terrain"))
{
//得到主动碰撞的对象 与接收碰撞的对象名称
castName = gameObject.name;
receiveName = hitObject.name;
}
}
}
将上面这段代码绑定在Cube0中,运行游戏后W、A、S、D按键来控制Cube1立方体移动。当Cube0与Cube1发生碰撞时,程序将进入方法 OnControllerColliderHit(),通过参数就可以得到接收碰撞的游戏对象也就是Cube1对象,而gameObject就是当前主动发生碰撞的Cube1。如下图所示,当两个立方体碰撞时使用GUI已经将碰撞的信息打印出来。
下面我们给Cube1对象绑定刚体组件,选择Cube1对象然后在导航菜单栏中选择Component->physics ->Rigidbody(刚体)。我们看看下面这段代码,使用添加了角色控制器组件的Cube0 去碰撞添加刚体组件的Cube1,当他生碰撞时计算一下Cube0碰撞Cube1时的碰撞角度向量,然后通过刚体向他施加一个力把它推开。
[代码]java代码:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
//角色控制器组件在与具有Collider组件对象之间的碰撞
void OnControllerColliderHit(ControllerColliderHit hit)
{
//判断碰撞的对象是否具备刚体组件
GameObject hitObject = hit.collider.gameObject;
Rigidbody rigidbody = hitObject.rigidbody;
if(rigidbody != null && !rigidbody.isKinematic)
{
//地面也具备刚体组件,这里判断一下
if(!hitObject.name.Equals("Terrain") )
{
rigidbody.AddForce(new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z) * 10);
}
}
}
}
也可以将同样的脚本直接绑定在第三人称的角色控制器组件中。如下图所示,主角移动将周围的箱子都推开了。