unity3d控制物体移动用transform.translatetransform好还是rigidbody.velocity好

个人接触Unity3d已经一年多的时间了,这是第一次有勇气在网上发表自己的心得,如有不敬或不合理的地方多多包含。
以下是自己的一个发现,如有不合理的地方请·大家多多指出:
在Unity里物体的移动有Transform.Translate()和rigidbody.velocity这两个方法(当然可能还有其他),Transform.Translate()是坐标的改变,rigidbody.velocity是在一定的方向(这里的方向是指世界坐标的方向)上以一定速度移动,对于方向的变化相对于rigidbody.velocity来说比较灵活,但因为是坐标的变化,有时候会是物体自身的物理效果不起作用,而rigidbody.velocity移动的方向真是针对世界坐标的方向而言,那么如何用rigidbody.velocity代替Transform.Translate()来使物体向前移动呢?
我是怎么想的,坐标也可以用向量来表示,rigidbody.velocity的方向也可以用向量表示,那么首先必须要能够获取物体自身指向前方的向量。
假设有三个点,分别为原点,物体自身坐标点LocalPos,始终在物体前方一定距离的点LocalForward。那么物体向前移动的方向就可以用LocalForward - LocalPos来表示。
废话不多说,代码如下:
using UnityE
using System.C
public class RigidSpeedVec : MonoBehaviour {
public float speed = 2;/*速度*/
// Use this for initialization
void Start () {
this.gameObject.AddComponent&Rigidbody&();/*添加Rigidbody组件*/
rigidbody.useGravity =
// Update is called once per frame
void Update () {
void FixedUpdate() {
Vector3 LocalPos = transform./*物体所处的世界坐标向量*/
Vector3 LocalForward = transform.TransformPoint(Vector3.forward * speed);/*物体前方距离为speed的位置的世界坐标向量*/
Vector3 VecSpeed = LocalForward - LocalP/*物体自身Vector3.forward * speed的世界坐标向量*/
rigidbody.velocity = new Vector3 (VecSpeed.x,VecSpeed.y,VecSpeed.z);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1061次
排名:千里之外
(3)(1)(2)(1)unity C#脚本给Rigidbody.velocity赋值问题
[问题点数:50分,结帖人u]
unity C#脚本给Rigidbody.velocity赋值问题
[问题点数:50分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。Unity3D-rigidBody.velocity - 推酷
Unity3D-rigidBody.velocity
还有半小时就下班了,写一下今天遇到的问题、处理方法以及一些自己的理解。理解的不一定对,还希望大家指正。
今天我做的效果是,hero的移动。
以前做过用的是
但是这样做有些bug就是移动不持续,当然你也可以加上时间延时函数,一点点的模拟动画效果,太麻烦了(我就想这样干)。
后来,老师指导我加力,rigidbody.AddForce(new Vector3(1,0,0));我这样想太单纯了,这样做的效果就是,hero倒了。
没办法,后来拿到了一段代码
rigidbody.velocity = transform.forward * heroXSpeed*1.1f;
walkDistance -= heroXSpeed * Time.fixedDeltaTime*1.1f;
核心是第一句rigidbody.velocity群中有说是计算刚体速度向量(好官方),有说给物体一个初速度。反正就是这个意思。
不过这段话放在Update()函数里:
void Update ()
animation.Play (&walk&);
rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;
hero移动也有动画
但是如果我写一个触发
void Update ()
animation.Play (&walk&);
//rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;
if (Input.GetKey (KeyCode.D)) {
rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;
//rigidbody.velocity =new Vector3(1,0,0);
这样,当我按下D键,hero执行移动就没有效果。
我又修改了一下代码
void Update ()
animation.Play (&walk&);
//rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;
if (Input.GetKey (KeyCode.D)) {
rigidbody.velocity += transform.forward * heroXSpeed * 1.1f;
//rigidbody.velocity =new Vector3(1,0,0);
加了一个+号,它就可以了。这样,我就推论出来,Update()是一帧一帧的渲染,可以实时显示效果,但是加入判断之后就需要等待响应,无法做到实时的效果。
还有一种写法是
// Update is called once per frame
void Update ()
animation.Play (&walk&);
//rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;
if (Input.GetKey (KeyCode.D)) {
//rigidbody.velocity += transform.forward * heroXSpeed * 1.1f;
rigidbody.velocity =new Vector3(1,0,0);
这样也可以移动,但是移动较快,和transform.Translate()效果差不多了。
注:heroXSpeed我取的是0.1f大家可以随意
收拾收拾要下班了,啦啦啦。希望大家多多指教,毕竟我是新手,哈哈。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致unity3d游戏开发之控制模型移动旋转与碰撞_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
unity3d游戏开发之控制模型移动旋转与碰撞
上传于||文档简介
&&u​n​i​t​yd​游​戏​开​发​之​控​制​模​型​移​动​旋​转​与​碰​撞
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Unity3d&镜头跟随角色移动时的效果_天才骆_新浪博客
Unity3d&镜头跟随角色移动时的效果
很多游戏在玩家角色移动的时候镜头也会跟着移动,这样就很自然的想到直接在角色的坐标变化的时候就将角色坐标赋给摄像机(当然要有一些偏移),但是开发过程中发现如果直接这样的话位置过度不太自然,会让玩家觉得一卡一卡的,看了一些游戏的源码demo发现有些是用动作的过度效果去掩盖这种不好的体验,可是还是会让玩家觉得不太流畅(单机),后来发现有的实现位置变化是用Vector3.Lerp,这能让位置过度更加平滑。这就是Unity的弹簧一样的过度效果。
代码如下:
(将代码脚本挂在摄像机下就可以)
using UnityE
using System.C
public class FollowTarget : MonoBehaviour {
&&& public
&&& private
Transform playerB
&&& public float
smoothing = 1;
&&& // Use this
for initialization
playerBip =
GameObject.FindGameObjectWithTag("Player").transform.Find("Role");
&&& // Update is
called once per frame
FixedUpdate()
//transform.position = playerBip.position +
Vector3 targetPos = playerBip.position +
transform.position = Vector3.Lerp(transform.position, targetPos,
smoothing * Time.deltaTime);
博客等级:
博客积分:0
博客访问:581
关注人气:0
荣誉徽章:

我要回帖

更多关于 transform translatex 的文章

 

随机推荐