2014-01-31 69 views
0

我已經實現了一個點擊2移動腳本,我試圖使用一個已經獲得Vector3的方法,在那裏我點擊並通過CharacterController將播放器移動到它。Unity3D變換與GetAxis的位置移動

有沒有辦法轉換當前位置,在按下鍵的同時從GetAxis獲取值並計算其新位置。當垂直/水平控制釋放時,Vector3將被分配轉換當前位置,所以它將停止移動

用於移動到該位置的是什麼。

void MoveToPosition() 
{ 
    if (Vector3.Distance(transform.position, position) > 1) 
    { 
     Quaternion newRotation = Quaternion.LookRotation(position - transform.position); 
     newRotation.x = 0f; 
     newRotation.z = 0f; 
     transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * 10); 
     controller.SimpleMove(transform.forward * speed); 
     animation.CrossFade(run.name); 
    } 
    else 
    { 
     animation.CrossFade(idle.name); 
    } 
} 

位置是從光線投射分配的,所以我想用球員的當前位置,不斷的計算需要什麼用getaxis並相應地調整

+0

我理解你想要點擊,再次點擊,並從第一次點擊pos移動到第二個? – theodox

+0

您的意思是您希望播放器在鼠標左鍵關閉時繼續向着鼠標移動?目前還不清楚你究竟在問什麼... –

回答

1

當然,回來時,遊戲中沒有一個引擎做到了是計算碰撞檢測的最簡單方法,但您必須考慮很多變量以及它們如何變化。 基本上,如果你想知道玩家將在哪裏,你必須使用數學的最​​簡單的 ,另外。計算玩家將要去的地方,你必須採用矢量 並添加速度。

因此,更新函數中的位置+(Vector3.forward)會使每個幀增加Vector3(0,0,n)。

void Update() { 
    Vector3 newpos = transform.position + Vector3.forward; 
    transform.position = newpos; 
} 

總之這是什麼代碼必須做的,如果我們使用Vector3.forward,但你很可能會使用自己的變量,如

Vector3 moveForward = new Vector3(0,0,Input.GetAxis("Horizontal")); 
moveForward += transform.position; 

如果是後被叫移動已經執行該框架,您將獲得前向axix上的位置(您還必須添加從左右到上下我猜),但它的播放器下一幀的位置,所以你可以檢查是否有一堵牆在那裏,如果是這樣,不要讓玩家前進下一幀,這是舊學校碰撞檢測。

我希望給出一些清晰。

+0

謝謝我能夠使一切正常工作 – Tsukasa