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 组件用于描述物体在 ...
随机推荐
- light oj 1151 - Snakes and Ladders 高斯消元+概率DP
思路: 在没有梯子与蛇的时候很容易想到如下公式: dp[i]=1+(∑dp[i+j])/6 但是现在有梯子和蛇也是一样的,初始化p[i]=i; 当有梯子或蛇时转移为p[a]=b; 这样方程变为: dp ...
- Android Json的使用(2) 使用Jackson解析和生成json
使用Jackson的三种方式 数据绑定模式:使用最方便 流模式:性能最佳 树模式:最灵活 以最常用的数据绑定模式为例 Json数据如下 { "name" : { "fir ...
- Nao 类人机器人,Aldebaran Robotics公司
Nao 类人机器人,Aldebaran Robotics 公司,被SOFTBANK 收购,阿里巴巴.富士康参股. https://www.aldebaran.com/en 一家法国的公司. htt ...
- Java读写文件,中文乱码解决
读文件:使用new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); Strin ...
- 关于TagHelper的那些事情——如何自定义TagHelper(TagHelper基类)
写在开头 前面介绍了TagHelper的基本概念和内嵌的TagHelpers,想必大家对TagHelper都有一定的了解.TagHelper看上去有点像WebControl,但它不同于WebContr ...
- [转]初试visual studio2012的新型数据库LocalDB 及 在visual studio2012中如何使用localDB具体讲解
本文转自:http://www.cnblogs.com/zhangran/archive/2012/08/26/2657864.html 初试visual studio2012的新型数据库LocalD ...
- OSG 中文解决方案 【转】
概述 本文只限于 windows 环境下. OSG 在 windows 下对中文支持已经非常的好了,但是可能很多人并不知道如何去正确的使用.为了解决这些常见的问题,还有一些基础知识的普及.特此把 OS ...
- 摄像头模组 AWB(Auto White Balance)
本文转载yapingmcu的<图像算法---白平衡AWB(讲的很好)>.原文http://blog.csdn.net/yapingmcu/article/details/50637797 ...
- Mac 清除/修改SSH的私钥密码
我之前在Mac下用命令ssh-keygen生成密钥,并且安全起见为密钥设置了密码,这样导致后来每次我git push时,都要输入一次密码: Enter pass phrase for /Users/z ...
- 算法笔记_099:蓝桥杯练习 算法提高 排列数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入一个数n 求0~9十个数的全排 ...