CharacterMotor_刚体角色驱动
using UnityEngine; //this class holds movement functions for a rigidbody character such as player, enemy, npc..
//you can then call these functions from another script, in order to move the character
[RequireComponent(typeof(Rigidbody))]
public class CharacterMotor : MonoBehaviour
{
[HideInInspector]
public Vector3 currentSpeed;
[HideInInspector]
public float DistanceToTarget; void Awake()
{
rigidbody.interpolation = RigidbodyInterpolation.Interpolate;//设置插值,对于主角等可以让运动平滑
rigidbody.constraints = RigidbodyConstraints.FreezeRotation;//冻结旋转 //如没有物理材质新建添加
if(collider.material.name == "Default (Instance)")
{
PhysicMaterial pMat = new PhysicMaterial();
pMat.name = "Frictionless";
pMat.frictionCombine = PhysicMaterialCombine.Multiply;
pMat.bounceCombine = PhysicMaterialCombine.Multiply;
pMat.dynamicFriction = 0f;
pMat.staticFriction = 0f;
collider.material = pMat;
Debug.LogWarning("No physics material found for CharacterMotor, a frictionless one has been created and assigned", transform);
}
}
//move rigidbody to a target and return the bool "have we arrived?"
public bool MoveTo(Vector3 destination, float acceleration, float stopDistance, bool ignoreY)
{
Vector3 relativePos = (destination - transform.position);
if(ignoreY)
relativePos.y = ; //向量长度 到目标点距离
DistanceToTarget = relativePos.magnitude;
//运动参数
if (DistanceToTarget <= stopDistance)
return true;
else
rigidbody.AddForce(relativePos.normalized * acceleration * Time.deltaTime, ForceMode.VelocityChange);
return false;
} //rotates rigidbody to face its current velocity
public void RotateToVelocity(float turnSpeed, bool ignoreY)
{
Vector3 dir;
if(ignoreY)
dir = new Vector3(rigidbody.velocity.x, 0f, rigidbody.velocity.z);
else
dir = rigidbody.velocity; //刚体的速度向量 if (dir.magnitude > 0.1)
{
Quaternion dirQ = Quaternion.LookRotation (dir);
Quaternion slerp = Quaternion.Slerp (transform.rotation, dirQ, dir.magnitude * turnSpeed * Time.deltaTime);
rigidbody.MoveRotation(slerp);
}
} //rotates rigidbody to a specific direction
public void RotateToDirection(Vector3 lookDir, float turnSpeed, bool ignoreY)
{
Vector3 characterPos = transform.position;
if(ignoreY)
{
characterPos.y = ;
lookDir.y = ;
} Vector3 newDir = lookDir - characterPos;
Quaternion dirQ = Quaternion.LookRotation (newDir);
Quaternion slerp = Quaternion.Slerp (transform.rotation, dirQ, turnSpeed * Time.deltaTime);
rigidbody.MoveRotation (slerp);
} // apply friction to rigidbody, and make sure it doesn't exceed its max speed
public void ManageSpeed(float deceleration, float maxSpeed, bool ignoreY)
{
currentSpeed = rigidbody.velocity;
if (ignoreY)
currentSpeed.y = ; if (currentSpeed.magnitude > )
{
rigidbody.AddForce ((currentSpeed * -) * deceleration * Time.deltaTime, ForceMode.VelocityChange);
if (rigidbody.velocity.magnitude > maxSpeed)
rigidbody.AddForce ((currentSpeed * -) * deceleration * Time.deltaTime, ForceMode.VelocityChange);
}
}
} /* NOTE: ManageSpeed does a similar job to simply increasing the friction property of a rigidbodies "physics material"
* but this is unpredictable and can result in sluggish controls and things like gripping against walls as you walk/falls past them
* it's not ideal for gameplay, and so we use 0 friction physics materials and control friction ourselves with the ManageSpeed function instead */ /* NOTE: when you use MoveTo, make sure the stopping distance is something like 0.3 and not 0
* if it is 0, the object is likely to never truly reach the destination, and it will jitter on the spot as it
* attempts to move toward the destination vector but overshoots it each frame
*/
CharacterMotor_刚体角色驱动的更多相关文章
- K3Cloud开放数据模型
金蝶K/3 Cloud是基于WEB2.0与云技术的一个开放式.社会化的新时代企业管理服务平台.整个产品采用SOA架构,完全基于BOS平台组建而成,业务架构上贯穿流程驱动与角色驱动思想,结合 ...
- unity3d 动画卡帧 动画合成 动画层次
2013-02-26 16:22 2059人阅读 评论(0) 收藏 举报 unity3d 中动画的添加 http://unity3d.com/support/documentation/Manua ...
- 探讨Microsoft Solution Framework(MSF)框架下管理的秘密
hello,同学们,同胞们,同志们,同龄们,这样们,那样们,们们们,我又回来写“论文”了,半年时间没见我发布任何博文,是不是认为我被潜规则了啊,哈哈.我想死你们了.好了,废话不多说,进入今天主题: ...
- Actor:人生如戏全靠演技--“三维度”逻辑编程语言的设计(3)
在上一篇介绍了逻辑编程的作用,介绍了逻辑编程中的一些概念,包括逻辑程序的结构:事实.规则和问题:知识的表达方式:谓词演算.产生式规则,以及这些概念与三维度(角色+场景+时间)理论的契合关系,正式提出了 ...
- 敏捷开发(Scrum)与敏捷测试
1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...
- 浅谈我对DDD领域驱动设计的理解
从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net
在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...
- 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践
写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯 ...
随机推荐
- 参考论坛:Mali kernel driver TX011-SW-99002-r5p1-00rel0 for firefly
最近手头有一块firefly_rk3288_reload的开发板,想实现在linux 下用openGL ES来做视频显示. 找到opengGL相关移植,参考论坛(http://bbs.t-firefl ...
- Android中的缩略图加载-不浪费一点多余的内存
1. Why,为什么要加载缩略图? 有的时候不需要展示原图,只需展示图片的缩略图,可以节省内存.比如:网易新闻中的图片浏览,左边展示的小狮子图片就是一个缩略图,点击这个图片,才会展示原图. 2. ...
- CentOS7环境RabbitMQ集群配置管理
CentOS7系统内核版本:3.10.0-514.26.2.el7.x86_64 一.对应主机host地址(三台主机host文件要保持一致) 10.100.2.10 v01-app-rabbitmq0 ...
- linux vi命令详解2
刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...
- Linux入门基础教程之Linux下软件安装
Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...
- MySQL删除数据库时的错误
From: http://blog.csdn.net/mydeman/article/details/6843398 由于在9月30号粗暴地打断了一个导入进程,今天发现MySQL竟然不能启动了,只好卸 ...
- Java 7中的TransferQueue 以及 SynchronousQueue
Java7中加入了JSR 166y规范对集合类和并发类库的改进.其中的一项是增加了接口TransferQueue和其实现类LinkedTransferQueue. TransferQueue继承了Bl ...
- tp5数据输出
法一:系统配置 'default_return_type'=>'json' 法二:输出设置 namespace app\index\controller; class Index { publi ...
- kafka基本概念
介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计. 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语:Kafka将消息以to ...
- 机器学习——大数据与MapReduce
MapReduce是一个分布式计算框架 优点:可在短时间内完成大量工作 缺点:算法必须经过重写,需要对系统工程有一定的理解 使用数据类型:数值型和标称型数据 MapReduce在大量节点组成的集群上运 ...