还有半小时就下班了。写一下今天遇到的问题、处理方法以及一些自己的理解。理解的不一定对,还希望大家指正。

今天我做的效果是,hero的移动。

曾经做过用的是transform.Translate(Vector3.forward*Time.deltaTime*Speed);

可是这样做有些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大家能够任意

收拾收拾要下班了,啦啦啦。希望大家多多不吝赐教,毕竟我是新手,哈哈。

补充:

第二天我补全了代码,调整了思路。就是走一段路之后,hero会停下

using UnityEngine;
using System.Collections; public class Hero_Script : MonoBehaviour
{
//herox轴移动速度
public float heroXSpeed=0.1f;
//hero是否在移动
private bool m_bMoving=false;
//hero移动的目的地点
private Vector3 m_targetPos;
// Use this for initialization
void Start ()
{
} // Update is called once per frame
void Update ()
{
Move ();
if (m_bMoving) {
animation.Play ("walk");
rigidbody.velocity = transform.forward * heroXSpeed*1.1f;
//Debug.Log(transform.position+" "+m_targetPos);
if (Vector3.Distance (transform.position, m_targetPos) < 0.1f) {
//hero的位置与目的地点距离仅仅有0.1时 停止动画 停止移动 进入等待
rigidbody.velocity = Vector3.zero;
m_bMoving = false;
animation.Play ("wait");
}
} }
void Move(){
if (Input.GetKey (KeyCode.D)) {
//记录下目标点
m_targetPos =new Vector3(transform.localPosition.x+1,transform.localPosition.y,transform.localPosition.z);
transform.LookAt (m_targetPos);
//改变移动State
m_bMoving = true;
}
}
}

感觉自己学东西好慢啊~~加油!

Unity3D-rigidBody.velocity的更多相关文章

  1. Unity3D 5.x 简单实例 - 脚本编写

    1,Vector3 类型变量存储向量坐标值 Vector3.forward Vector3(0,0,1) Vector3.up Vector3(0,1,0) Vector3.right Vector3 ...

  2. Unity3D 物体移动方式

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

  3. [Unity3D入门]入门级游戏项目"坦克狙击手"更新

    [Unity3D入门]入门级游戏项目"坦克狙击手"更新 在上一篇中我分享了一个尚未完全写好的入门级unity3d项目"坦克狙击手". 本文介绍最新版的" ...

  4. [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手"

    [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手" 我在学Unity3D,TankSniper(坦克狙击手)这个项目是用来练手的.游戏玩法来自这里(http://ww ...

  5. Unity3D Player角色移动控制脚本

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position.之前写过类似的文章,这次增加了平时常用API的脚本,每个脚本均手打测试可用. 2. ...

  6. Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系

    2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator ...

  7. Unity3D 角色(物体) 移动方法 合集

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

  8. Unity3D脚本中文系列教程(十三)

    http://dong2008hong.blog.163.com/blog/static/469688272014032334486/ Unity3D脚本中文系列教程(十二) ◆ function G ...

  9. Unity3D屠龙战机项目总结

    之前跟着老师后面边学边做了一个屠龙战机项目,在这个项目中,主要用到的技术,在这里总结一下(本次项目的脚本语言用的是JS): 1.  如果想在场景中导入一个声音文件,则需要在脚本中添加一个变量,如在脚本 ...

  10. (转)Unity3D中移动物体位置的几种方法

    1. 简介 在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

随机推荐

  1. SpringBoot 整合 Jpa

    项目目录结构 pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  2. 在XC2440上实现使用U盘自动更新系统的uboot

    转:http://blog.chinaunix.net/uid-22030783-id-3347599.html 此版本uboot在XC2440_uboot_V1.3版本上修改得来,是为我们的一个大客 ...

  3. 手机APP上中下三层

    代码如下: <template> <div class="container" id="app"> <header> < ...

  4. Flask参数解析、请求钩子

    转载请注明出处 https://www.cnblogs.com/chenxianpao/p/9949279.html  参数解析 Flask的参数解析主要用Request完成(from flask i ...

  5. nginx bind() to 0.0.0.0:**** failed (13: Permission denied)

    nginx 启动失败,日志里面报错信息如下: Starting nginx: nginx: [emerg] bind() to 0.0.0.0:**** failed (13: Permission ...

  6. Unity3D新手教学,让你十二小时,从入门到掌握!(二) [转]

    版权声明:本文为Aries原创文章,转载请标明出处.如有不足之处欢迎提出意见或建议,联系QQ531193915 继续上一讲的内容,首先呢, 为了接下来要做的小游戏,在这里我要小小的修改一下移动的代码. ...

  7. threadlocal 变量 跟synchronized 关键字的关系

    为什么叫threadloca变量呢,经过大量的查资料发现threadlocal并不是之前理解的控制线程用的东西,它其实也属于一类变量,只不过是线程的局部变量,它的作用就是实现线程间对该变量的唯一线程调 ...

  8. 如何使用 awk 的 ‘next’ 命令

    导读 在 awk 系列文章中,我们来看一下next 命令 ,它告诉 awk 跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行.next 命令帮助你阻止运行命令执行过程中多余的步骤. 要明白它 ...

  9. 【实践】js封装 jq siblings 方法

    思路: 1.获取调用元素的父元素下的所有子元素(即它的所有同辈元素和调用元素本身) 2.遍历调用元素父元素下的所有子元素 除调用元素外的所有元素保存在一个数组里面 代码如下: <!DOCTYPE ...

  10. LeetCode 137 Single Number II(仅仅出现一次的数字 II)(*)

    翻译 给定一个整型数组,除了某个元素外其余的均出现了三次. 找出这个元素. 备注: 你的算法应该是线性时间复杂度. 你能够不用额外的空间来实现它吗? 原文 Given an array of inte ...