一、transform.Translate()
例子:
void Update() {
//导弹相对于战斗机Fighter以ShootSpeed 的速度向前运动,Vector3.forward在此时表示导弹的正前方
transform.Translate(Vector3.forward * ShootSpeed * Time.deltaTime, Fighter.transform);
}
二、指定速度velocity
这种方法只能适用于刚体,因为velocity是刚体特有的属性。代码如下:
void Start () {
gameObject.GetComponent<**Rigibody**>().velocity = Vector3.forward * MoveSpeed;
}
三、使用rigbody.MovePosition()
public void MovePosition(Vector3 position);
让物体移动到新的位置position。
示例:
void FixedUpdate() {
//让物体向前运动Time.deltaTime距离
rb.MovePosition(transform.position + transform.forward * Time.deltaTime);
}
四、Vector3.MoveTowards()
static function MoveTowards(current: Vector3, target: Vector3, maxDistanceDelta: float): Vector3;
在这里插入代码片
using UnityEngine;
using System.Collections;
public class YellowMove : MonoBehaviour {
public int MoveSpeed = 10;
Vector3 target;
void Start () {
target = new Vector3(20, transform.position.y, 20);
}
void Update () {
transform.position = Vector3.MoveTowards(transform.position, target, MoveSpeed * Time.deltaTime);
}
}
五、使用lerp()方法
1、使用Mathf.Lerp()函数
using UnityEngine;
using System.Collections;
public class YellowMove : MonoBehaviour {
public float MoveSpeed = 0.1f;
Vector3 Target = new Vector3(20, 20, 20);
//控制物体向Target移动
void Update () {
gameObject.transform.localPosition = new Vector3(
Mathf.Lerp(transform.position.x, Target.x, MoveSpeed * Time.deltaTime),
Mathf.Lerp(transform.position.y, Target.y, MoveSpeed * Time.deltaTime),
Mathf.Lerp(transform.position.z, Target.z, MoveSpeed * Time.deltaTime));
}
}
2、使用Vector3.Lerp()
其使用方法与Mathf.Lerp()用法相似,不同点是Vector3.Lerp()是对三维向量进行插值,而Mathf.Lerp()是对数字进行插值。
using UnityEngine;
using System.Collections;
public class YellowMove : MonoBehaviour {
public float MoveSpeed = 0.1f;
Vector3 Target = new Vector3(20, 20, 20);
//控制物体向Target移动
void Update () {
gameObject.transform.localPosition = Vector3.Lerp(transform.position, Target, MoveSpeed * Time.deltaTime),
}
}
额…其实还有很多方法,就不一一例举了