Unity 角色控制相关操作
来源:互联网 发布:创维32e380s安装软件 编辑:程序博客网 时间:2024/05/13 06:12
首先打开unity游戏引擎编辑器,然后在Project视图中右键选择Import Package -> Charactr Controller(角色控制器)把它导入我们的工程中。如下图所示,第一人称与第三人称的组建已经加入Project视图中。3rd Person Controller 表示第三人称控制器,First Person Controller表示第一人称控制器。
下面我们在看看第三人称视角,如下图所示,在Project视图中将3rd Person Controller拖拽入Hierarchy视图中。第三人称视角需要使用我们原有的摄像机,如果刚刚将摄像机的删掉的话。在Hierarchy视图中点击Creat->Camera 即可。然后选择摄像机,在右侧Inspector视图中设置它的tag为MainCamera,如下图所示。最后在Hierarchy视图中选择3rd Person Controller,在右侧Inspector视图中将Third Person Camera 脚本的 Camera Transform 变量绑定上刚刚创建的主摄像机,此时运行游戏后以第三人称视角移动主角行走与跳跃,摄像机永远都会在跟随在后面除非修改角色控制器组件中默认提供的源码,源码都在右侧监测面板视图中直接点开就可以查看。
下面我们学习角色控制器组件在其它模型之间的应用。首先在Hierarchy视图中创建两个Cube(立方体对象) 命名为:Cube0(发出碰撞的对象)Cube1(接收碰撞的对象),然后在Hierarchy视图中选择Cube0对象,接着Unity导航菜单栏中选择Component(组件)-Character->FPS Input Controller。 补充一句,角色控制器组件一定要在Project视图中导入,否则这里将无法绑定组件。角色控制器组件因为与碰撞组件相互冲突,所以添加角色控制器组建后Collider组件就会消失。下面我们实现一段简单得代码,使用添加过角色控制器组件的Cube0 去碰撞未添加角色控制器组件的Cube1。
using UnityEngine;
using System.Collections;
public class Main : MonoBehaviour
{
string castName = null;
string receiveName = null;
void OnGUI()
{
GUI.color = Color.black;
GUI.Label(new Rect(100,100,200,30),"CastObjectName : " + castName);
GUI.Label(new Rect(100,200,200,30),"ReceiveObjectName : " + receiveName);
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
GameObject hitObject = hit.gameObject;
if(!hitObject.name.Equals("Terrain"))
{
castName = gameObject.name;
receiveName = hitObject.name;
}
}
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update () {
}
}
下面我们给Cube1对象绑定刚体组件,选择Cube1对象然后在导航菜单栏中选择Component->physics ->Rigidbody(刚体)。我们看看下面这段代码,使用添加了角色控制器组件的Cube0 去碰撞添加刚体组件的Cube1,当他生碰撞时计算一下Cube0碰撞Cube1时的碰撞角度向量,然后通过刚体向他施加一个力把它推开。
using UnityEngine;
using System.Collections;
public class Main : MonoBehaviour
{
string castName = null;
string receiveName = null;
void OnGUI()
{
GUI.color = Color.black;
GUI.Label(new Rect(100,100,200,30),"CastObjectName : " + castName);
GUI.Label(new Rect(100,200,200,30),"ReceiveObjectName : " + receiveName);
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
GameObject hitObject = hit.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.y) * 10);
castName = gameObject.name;
receiveName = hitObject.name;
}
}
}
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update () {
}
}
- Unity 角色控制相关操作
- Unity 角色控制相关操作
- Unity 鼠标控制角色移动
- Unity实现第三人称角色控制
- unity中简单的角色移动控制
- unity 如何控制摄像机跟随角色移动
- Unity 角色单步移动控制
- 【Unity&角色移动】代码控制重力
- unity学习手记之控制角色移动
- Unity使用EasyTouch虚拟摇杆控制角色
- Unity Player角色移动控制脚本实现
- Unity角色控制角色不穿过场景模型
- Unity入门操作_ 角色控制器_015
- Unity控制角色移动错误问题集合、第一人称视角
- Unity3D学习之 ------------------------ "Hello Unity"控制角色移动
- 在unity的player角色控制中实现MVC模式
- unity——角色控制以及网络组件
- unity中的jsp函数 控制角色移动transform.Translate
- 我的一些简单的shell脚本实例
- 非常好用的 Highslide JS ,完全可以代替 lightbox
- shell test用法
- NSRunLoop概述
- LEX和YACC的使用二
- Unity 角色控制相关操作
- OSX: Mac 10.8.2关机慢的真正原因分析和临时解决
- DLL中怎么创建D3D10的交换链
- centos5.6下mysql数据库定时备份
- flexigrid需要每次向后台传值以更…
- jquery flexigrid取值示例
- Java Map试用方法
- excel数据导入mysql数据库
- jquery validate