新建一个plane作为地面Land,一个小球。给小球增加Rigidbody组件,设置一个阻力值Drag,此处我们设为1。
然后给小球增加一个script,此处为moveController.cs
using UnityEngine;
using System.Collections;
public class moveController : MonoBehaviour {
public float speed; // 小球运动速度
Vector3 targetPos; // 目标位置
void Awake () {
targetPos = transform.position;
}
void Update () {
GetTargetPos ();
// 判断小球有没有到达目标点
if (Vector3.Distance (targetPos, transform.position) >= 0.05f) {
// 使小球朝向目标点
transform.LookAt (targetPos);
// 使小球运动
transform.Translate (Vector3.forward * speed * Time.deltaTime);
}
}
// 获取目标点
void GetTargetPos () {
// 1. 监听鼠标点击事件
if (Input.GetMouseButtonDown (0)) {
// 2. 获取从摄像机向鼠标当前位置发出的射线
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
// 3. 创建一个用于保存碰撞信息的变量
RaycastHit hitInfo = new RaycastHit ();
// 4. 调用函数发射射线检测有没有碰撞到游戏对象
if (Physics.Raycast (ray, out hitInfo)) {
// 5. 判断发生碰撞的游戏对象是不是地板
if (hitInfo.collider.gameObject.name == "Land") {
// 6. 如果是地板,获取碰撞点的坐标
targetPos = hitInfo.point;
// 修改目标点的 Y 值
targetPos.y = transform.position.y;
Debug.Log ("targetPos" + targetPos);
}
}
}
}
}
给小球设置一个滚动到速度Speed。
效果为点击绿地上点一点,小球会移动到鼠标点击点。
在游戏中可以实现游戏人物随着鼠标移动