一、朝向目标(MoveTowards)

public class MoveTest1 : MonoBehaviour{ //public GameObject tagObj; public GameObject lineObjs; public List<Transform> gos; //获取每个目标点,,注意数组顺序不能乱 public float speed = 3; //用于控制移动速度 int i = 0; //用于记录是第几个目标点 float des; //用于存储与目标点的距离 // Start is called before the first frame update void Start() { print(123); ArrayList m_Childs = new ArrayList(); foreach (Transform child in lineObjs.transform) { print(child.gameObject.name); m_Childs.Add(child.gameObject); gos.Add(child); } } // Update is called once per frame void Update() { //print(i + " " + gos.Count); //看向目标点 this.transform.LookAt(gos[i].transform); //计算与目标点间的距离 des = Vector3.Distance(this.transform.position, gos[i].transform.position); //Debug.Log(Input.text); //移向目标 transform.position = Vector3.MoveTowards(this.transform.position, gos[i].transform.position, Time.deltaTime * speed); //如果移动到当前目标点,就移动向下个目标 if (des < 0.1f && i < gos.Count) { i++; } //归零 从头开始 if (des < 0.1f && i==gos.Count) { i=0; transform.position=gos[i].transform.position; } } }

二、朝向目标(Slerp)

///

/// 摄像机位置调整

///

private void cameraToTarget(float speed)

{

float pDis = Vector3.Distance(mMainCamera.transform.position, targetTransform.position);

float eDis = Vector3.Distance(mMainCamera.transform.eulerAngles,

targetTransform.eulerAngles);

print("dis:"+pDis+" "+eDis);

if (pDis > errorAllow || eDis > errorAllow)

{

print("转");

//转位置

mMainCamera.transform.position = Vector3.Slerp(mMainCamera.transform.position,

targetTransform.position, speed * Time.deltaTime);

//转角度

mMainCamera.transform.eulerAngles = Vector3.Slerp(mMainCamera.transform.eulerAngles,

targetTransform.eulerAngles, speed * Time.deltaTime);

}

else {

flag = 0; //控制归位

}

}

三、按键控制

void Update()

{

//四个方向

if (Input.GetKey(KeyCode.W))

{

transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

}

if (Input.GetKey(KeyCode.S))

{

transform.Translate(Vector3.back * moveSpeed * Time.deltaTime);

}

if (Input.GetKey(KeyCode.A))

{

transform.Rotate(Vector3.down * rotationSpeed * Time.deltaTime, Space.Self);

//transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);

}

if (Input.GetKey(KeyCode.D))

{

transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime, Space.Self);

//transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);

}

}