你現在的問題是要把螢幕2D的滑鼠座標( x , y , 0 )
轉換成滑鼠在那一點時的空間座標
先把你的人物的Transform放入 character
var character : Transform;
創建一個相機
var mainCamera : Camera;
然後做一個平面
var playerMovementPlane : Plane;
function Awake () {
然後把mainCamera設為主相機
mainCamera = Camera.main;
然後把NEW出這個平面並且把這個平面放到角色上
playerMovementPlane = new Plane (character.up, character.position);
}
function Update () {
宣告螢幕2D的滑鼠質點
var cursorScreenPosition : Vector3 = Input.mousePosition;
宣告空間中的滑鼠質點 這裡要進行一些轉換就可以得到了 mainCamera是你的主相機
var cursorWorldPosition : Vector3 = ScreenPointToWorldPointOnPlane (cursorScreenPosition, playerMovementPlane, mainCamera);
}
public static function ScreenPointToWorldPointOnPlane (screenPoint : Vector3, plane : Plane, camera : Camera) : Vector3 {
//將滑鼠的螢幕位置轉換成空間中的射線 ray=射線
var ray : Ray = camera.ScreenPointToRay (screenPoint);
//找出射線與平面相交
return PlaneRayIntersection (plane, ray);
}
public static function PlaneRayIntersection (plane : Plane, ray : Ray) : Vector3 {
var dist : float;
//光线投射 一条射线和平面相交。
plane.Raycast (ray, dist);
//获取点 返回沿着射线在distance距离单位的点。
return ray.GetPoint (dist);
}
//转换对象到当前屏幕位置
Vector3 screenPosition = camera.WorldToScreenPoint (transform.position);
//鼠标屏幕坐标
Vector3 mScreenPosition=new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
//获得鼠标和对象之间的偏移量,拖拽时相机应该保持不动
Vector3 offset = transform.position - camera.ScreenToWorldPoint( mScreenPosition);