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 组件用于描述物体在 ...
随机推荐
- React-Router入门
之前自己有在用React来重构之前写过的自己工作室官网,其中有用到React中的核心思想:组件,props,state.还有用Rap的接口来实现前后端交互请求(就是请求团队成员的信息部分).自己觉得还 ...
- [转]spring property标签中的 ref属性和ref 标签有什么不同
spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" /> sp ...
- 在iOS项目中使用截图
最近项目中要求将个人的信息生成一张图片,以名片的方式分享出去.由此就需要使用截图功能.需求如图: 代码如下:
- HTML5 Video P2P技术研究(转)
说明:之前在Flash时代,可以基于其实现P2P的技术,也就是现在主流的视频网站用的视频技术,不过要实现P2P技术,在Flash时代有点难,且要服务器支持等等:但是现在基于HTML5技术的P2P技术使 ...
- 怎样打开查看mysql binlog
1 在my.ini(window)配置文件里面 [mysqld]log-bin=mysql-bin(名字可以随便起) 我们每次进行操作的时候,File_size都会增长 2.show binlog e ...
- 【maven】maven项目移除Maven Dependencies后如何再添加进去
比较着急这几天弄一个项目,所以匆忙间把maven项目的Maven Dependencies给remove掉了 如下图: 这下可好,整个项目报错了 解决方法: 对比了有Maven Dependencie ...
- UML类图几种关系的总结 【转】
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- Python学习之路上的几个经典问题
1.python有三元运算符语法(类似C语言的"?")么? 语法如下: [on_true] if [expression] else [on_false] 如果[expressio ...
- AndroidStudio刚開始学习的人
看到谷歌宣布Android Studio将代替Eclipse. 自从7月25日開始我就開始学习使用AS,由于看到谷歌公司公布的说为了简化Android的开发力度,Google决定将重点建设Androi ...
- 纯 PHP 代码最好在文件末尾删除 PHP 结束标记
如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记.这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图. & ...