問題.png
using UnityEngine;
using System.Collections;
public class cube1 : MonoBehaviour {
Vector3 target;//cube 移動目標點
void Start () {
//將target的初始值設為cube的中心點
target = transform.position;
}
// Update is called once per frame
void Update () {
CubeMotion ();//控制cube的移動
CastRay ();
//CubeMoveToMousePosition ();//cube移動到鼠標點擊的位置
}
//控制cube的移動
void CubeMotion(){
//WASD
float hor = Input.GetAxis ("Horizontal");
float ver = Input.GetAxis ("Vertical");
//
transform.position += transform.forward * ver * 3 * Time.deltaTime;
transform.Rotate (Vector3.up * hor * 45 * Time.deltaTime);
}
void CastRay(){
RaycastHit hit;
//從cube的中心點發(fā)射一條射線絮识,方向為cube的正前方躲撰,檢測的距離為3.
if (Physics.Raycast (transform.position,transform.forward, out hit,3)) {
Debug.Log ("射線所碰撞的物體是:"+ hit.collider.name);
//Debug.Log ("射線所碰撞的點是:"+ hit.point);
}
}
//cube移動到鼠標點擊的位置
void CubeMoveToMousePosition(){
if (Input.GetMouseButtonDown (0)) {
//從相機的位置創(chuàng)建一條穿過屏幕上鼠標所在位置的射線
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
//發(fā)射射線
RaycastHit hit;
if (Physics.Raycast (ray, out hit)) {
//忽略非地面游戲物體
if (hit.collider.name == "Plane") {
//獲取cube所要移動的目標點
Vector3 temp = hit.point;
temp.y += transform.position.y;
target = temp;
}
}
//移動cube到target
transform.position=Vector3.Lerp(transform.position,target,0.5f);
}
}
}
工程界面.png
操作步驟:
先創(chuàng)建Plane和兩個Cube,然后在需要移動的Cube上填寫以上代碼,最后在需要移動的Cube上添加Rigidbody即可實現(xiàn)上述問題。