Unity 鼠标拾取

你現在的問題是要把螢幕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);


你可能感兴趣的:(Unity)