Unity3D-rigidBody.velocity
还有半小时就下班了。写一下今天遇到的问题、处理方法以及一些自己的理解。理解的不一定对,还希望大家指正。
今天我做的效果是,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的更多相关文章
- Unity3D 5.x 简单实例 - 脚本编写
1,Vector3 类型变量存储向量坐标值 Vector3.forward Vector3(0,0,1) Vector3.up Vector3(0,1,0) Vector3.right Vector3 ...
- Unity3D 物体移动方式
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
- [Unity3D入门]入门级游戏项目"坦克狙击手"更新
[Unity3D入门]入门级游戏项目"坦克狙击手"更新 在上一篇中我分享了一个尚未完全写好的入门级unity3d项目"坦克狙击手". 本文介绍最新版的" ...
- [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手"
[Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手" 我在学Unity3D,TankSniper(坦克狙击手)这个项目是用来练手的.游戏玩法来自这里(http://ww ...
- Unity3D Player角色移动控制脚本
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position.之前写过类似的文章,这次增加了平时常用API的脚本,每个脚本均手打测试可用. 2. ...
- Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系
2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator ...
- Unity3D 角色(物体) 移动方法 合集
1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
- Unity3D脚本中文系列教程(十三)
http://dong2008hong.blog.163.com/blog/static/469688272014032334486/ Unity3D脚本中文系列教程(十二) ◆ function G ...
- Unity3D屠龙战机项目总结
之前跟着老师后面边学边做了一个屠龙战机项目,在这个项目中,主要用到的技术,在这里总结一下(本次项目的脚本语言用的是JS): 1. 如果想在场景中导入一个声音文件,则需要在脚本中添加一个变量,如在脚本 ...
- (转)Unity3D中移动物体位置的几种方法
1. 简介 在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...
随机推荐
- Win32 error code message
http://fit.c2.com/fit/files/LispPlatform/lisp/clisp-2.28/src/errwin32.d # Calls a function, passing ...
- (获取选中的光标起始位置)EditText常用属性【三】:EditText选取操作
转自:http://blog.csdn.net/wirelessqa/article/details/8567702 话不多说,直接上码: activity_main.xml <ScrollVi ...
- 用xib自定义UIView并在代码中使用--iOS
首先新建一个空的xib文件: 将size改为freedom: 然后在xib中自定义视图(添加自己想要的其它视图): 要写好约束, 创建一个继承uiview的类和他关联,然后就可以调用了. - (voi ...
- 各种语言性能(CPU密集型程序)比较
都进行Fib数列计算,计算到n=40的计算时间: 注意:开始,我以为上图中的第二列就是代表C++的性能.但是现在发现,完全不正确. 如果你使用同样的抽象和同样的逻辑去实现同样的代码,C和C++的性能几 ...
- centos7 安装selenium和firefox
之前有一篇文章介绍过在ubuntu下安装selenium和firefox 现在介绍下centos7 注意以下都是下载的linux64位的软件,32位的请自己找下链接, 现在使用的python的版本是3 ...
- c#跟objective-c语言特性的对比
拿c#语言跟objective-c做个对比,记录下自己认为是差不多的东西. 学过objc的人相信对category这个东西肯定不陌生,它可以让我们在没有源码的基础上对原先的类添加额外的一些方法,写到这 ...
- C# WinForm 异步执行耗时操作并将过程显示在界面中
private void button3_Click(object sender, EventArgs e) { RunAsync(() => ...
- centos6.8服务器配置之vsftpd配置
vsftpd: version 2.2.2一.安装:因对版本要求不高,所以采用yum安装 yum install -y vsftpdckconfig vsftpd on 二.配置: 1.建立ftp用户 ...
- vector iterator not incrementable For information on how your program can cause an an assertion Failure, see the Visual c + + documentation on asserts
#include <list> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { list<int> sl ...
- 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...