Unity3D-rigidBody.velocity
来源:互联网 发布:基础编程书 编辑:程序博客网 时间:2024/05/19 14:54
还有半小时就下班了,写一下今天遇到的问题、处理方法以及一些自己的理解。理解的不一定对,还希望大家指正。
今天我做的效果是,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;
- }
但是如果我写一个触发
- 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);
- }
- }
我又修改了一下代码
- 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;
- }
- }
- }
感觉自己学东西好慢啊~~加油!
0 0
- Unity3D-rigidBody.velocity
- Unity3D-rigidBody.velocity
- Unity3D-rigidBody.velocity
- Unity3D中Rigidbody.velocity和Addforce的区别
- Unity3D的Rigidbody类中useGravity、isKinematic和velocity的使用注解
- 关于Unity3d 使用rigidbody.velocity代替Transform.Translate()来使物体向前移动
- Unity3d-Rigidbody 刚体介绍
- Unity3D Rigidbody详解
- unity3D 使用rigidbody.AddForce(movement)
- rigidbody.velocity 控制角色的移动
- Unity3d5.0中rigidbody无法访问velocity
- Unity3D学习历程之Rigidbody函数
- unity3d碰撞之character control与rigidbody
- [Unity3D]Physics System - Rigidbody[未完待续]
- Rigidbody
- Rigidbody
- UNITY3D物理引擎Rigidbody,Collider,PhysicMaterial的整理
- UNITY3D物理引擎Rigidbody,Collider,PhysicMaterial的整理
- 系统调用的封装例程
- execve的用法举例
- COCI2015/2016 CONTEST#4 简易题解
- PhoneGapAndroid开发
- android-Storage Options
- Unity3D-rigidBody.velocity
- IP Phone的原理是什么?
- HDU 3065 病毒侵袭持续中 AC自动机
- windows 下配置tomcat
- 严蔚敏数据结构单链表的所有基本操作
- 总结java反射相关知识
- 基于http在互联网传输敏感数据的消息摘要、签名与加密方案
- VIM配置+ACM现场赛配置
- DDR3调试总结