unity——使用角色控制器组件+射线移动
首先要导入unity标准资源包Character Controllers 这个标准资源包,为了方便,还添加了两外一个资源包Scripts,后者包含了一些基本的脚本个摄像机脚本。
没错,这次我们要使用其中一个摄像机脚本, 创建一个terrain (地形ller组件(如),创建一个capsule ,并为这个胶囊提添加 CharactContro果没有导入角色标准资源包的话竟不能被添加该组件),注意只是一个CharactController 组件而已。
当我们点击 add Component——Character的时候会有以下三个选项,第一个是第一人称视角,后面两个是第三人称视角。有什么区别,还没有去研究:

比如我们添加了第一个“CharacterMotor” ,添加以后系统自动为我们添加了包含 CharactorController 组件在内的两个组件。这里我们只需要CharacterController 这个组件,要把另外一个删除掉。如果添加了后面两个“FPS Input Controller” 或者 “Platform Input Controller”同样也是要删除多余的只剩下 CharacterController 这个组件。因为我们只是用到了
CharacterController.Move这个函数
function Move (motion : Vector3) : CollisionFlags
对这个函数的描述我也没看太懂,大概是按照参数的方向移动了参数的长度、、、、、、吧0.0
这个组件只是为控制他移动提供了基础。要想实现移动还要我们添加一个移动的脚本,于是这个叫做 MyController 的脚本诞生了。
上代码:
using UnityEngine;
using System.Collections; public class MyController : MonoBehaviour {
private Vector3 mousePoint;
public float speed=0.1f;
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown()) {
Ray myRay=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit; if (Physics.Raycast(myRay,out hit)) {
mousePoint=hit.point;
transform.LookAt(new Vector3(mousePoint.x,transform.position.y,mousePoint.z) );
} print(Vector3.Distance(mousePoint,transform.position));
}
Move(speed);
} void Move(float speed)
{
if (Mathf.Abs(Vector3.Distance(transform.position,mousePoint))>=1f) { CharacterController controller = GetComponent<CharacterController>();
Vector3 v=Vector3.ClampMagnitude(mousePoint-transform.position,speed);
controller.Move(v);
}
else
{
Debug.Log("已到达终点");
} }
}
第 30行 Vector3.Distance 这个函数的解释:
static function Distance (a : Vector3, b : Vector3) : float
这个函数返回 a、b 两点之间的距离,这个距离永远是正值!!
官方的解释,这个函数等同于(a-b).magnitude而(a-b).magnitude是怎么计算的呢?看下面:
Vector3.magnitude
返回向量的长度(只读)。向量的长度是(x*x+y*y+z*z)的平方根。
由此可知。返回永远都不可能是负值。
所以,代码中第30行的 Mathf.Abs 取绝对值的函数是没有必要的。
另外第33行也有一个函数:
Vector3.ClampMagnitude
这个函数的描述:
static function ClampMagnitude (vector : Vector3, maxLength : float) : Vector3
返回向量的长度,最大不超过maxLength所指示的长度。
也就是说,钳制向量长度到一个特定的长度。
呦描述可知,该方法返回了一个vector3类型的值,这个向量可以看做是第一个参数的副本,但是有一点:它的长度被第二个参数限制了。
下面来看看run 的结果:

无法上传运行图片。。。晕
unity——使用角色控制器组件+射线移动的更多相关文章
- [unity3d]角色控制器组件相互间不碰撞
RPG游戏会有这种需求. 队友之间,玩家之间.玩家与怪物之间,都有可能须要不能碰撞.怎样实现?这个问题困恼了一段时间,昨天在网上看到解答的方法: 这里举例玩家和怪物之间: 1,填加2个不同的层级mon ...
- Unity手游之路<七>角色控制器
Unity手游之路<七>角色控制器 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作, ...
- Unity手游之路<七>角色控制器
我们要控制角色的移动,能够所有细节都由自己来实现.控制角色模型的移动,同一时候移动摄影机,改变视角.当然Unity也提供了一些组件,能够让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学 ...
- 【Unity】11.1 角色控制器 (Character Controller)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制.如果要创建类人角色,可 ...
- 【Unity】4.4 添加角色控制器
分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 设计完毕基本的场景后,一般都需要先运行看看效果如何,即先让场景"动起来",以方便观察不同的位置,而不 ...
- unity3d角色控制器01
参考出处貌似是雨松大神.如有侵权,立即删除. 需要导入包 ①将FirstPerson Controller拖拽入Hierarchy(层次视图)中.由于角色控制器是具有一定物理引擎的,所以一定要将它放在 ...
- Unity3D笔记 英保通六 角色控制器
一.角色控制器 U3D有两种角色控制方式:Rigidbody刚体.角色控制器组件(胶囊体组件) 面试的题目中经常会遇到这个问题: CharacterController和Rigidbody的区别? 这 ...
- 【Unity 3D】学习笔记三十八:角色控制器
角色控制器 在unity中,已经帮我们实现的上下左右跳等动作,并将他们封装成了角色控制器.角色控制器保存在unity标准资源包中,能够说是很的强大.能够模拟第一或者第三人称视角.不受刚体的限制,很适用 ...
- U3D组件------CharacterController(角色控制器)
角色控制器中有碰撞体和刚体的属性 Slope Limit:角色能爬的斜坡的坡度限制 Step Offset:角色走台阶的高度 Skin Width:当场景里面出现多个角色控制器的时候,两个对象在接触的 ...
随机推荐
- java开发中的23中设计模式
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- POJ 1159
区间dp 比如从i到j如果str[i] == str[j]那么i到j的值就与i+1到j-1相同,否则从i到j-1与i+1到j中选一个最优解,这道题直接定义int的二维数组会mle,用short,也可以 ...
- POJ3662 Telephone Lines( dijkstral + 二分 )
POJ3662 Telephone Lines 题目大意:要在顶点1到顶点n之间建一条路径,假设这条路径有m条边,其中有k条边是免费的,剩余m-k条边是要收费的, 求这m-k条边中花费最大的一条边的最 ...
- CentOS 7 之找回失落的ifconfig
自5号凌晨安装完centos7 minimal之后,一直没有机会时间(懒惰)来玩玩这个,实在惭愧,今天是周六,天下着小雨,所以收拾一下心情来学学一下这个系统: 开机登陆进去,想看看ip多少,于是很自然 ...
- Activiti工作流学习-----基于5.19.0版本(1)
该版本的Activiti运行须知: 1.JDK 6+,Eclipse最好是Kepler以上版本. 2.试验功能都有EXPERIMENTAL标注,被标注的部分不应该视为稳定的. 有兴趣的同学可以去了解下 ...
- Android系统服务-简介
http://blog.csdn.net/chenyafei617/article/details/6577907 Introduction 我们知道Android系统服务挺多的,做程序时经常会用到, ...
- 关于javascript 回调函数
http://segmentfault.com/q/1010000000212522 如何避免Javascript中回调函数的嵌套? http://javascript.ruanyifeng.com/ ...
- C++11 in Qt5
本文转载自:http://woboq.com/blog/cpp11-in-qt5.html C++11 in Qt5 Posted by Olivier Goffart on 11 June 20 ...
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...