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的中心点发射一条射线,方向为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)) {
//从相机的位置创建一条穿过屏幕上鼠标所在位置的射线
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
//发射射线
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);
}
}
}
操作步骤:
先创建Plane和两个Cube,然后在需要移动的Cube上填写以上代码,最后在需要移动的Cube上添加Rigidbody即可实现上述问题。