2017-05-29 21 views
0

我想將我的目標對象對我的使用播放器的自定義代碼(不喜歡MoveTowards統一的內置功能)播放器不向目標沒有內置函數團結移動

Vector3 displacment = target.transform.position - player.transform.position; 
//you can also get magnitude directly through displacement.magnitude 
float xMagnitude = displacment.x * displacment.x; 
float yMagnitude = displacment.y * displacment.y; 
float zMagnitude = displacment.z * displacment.z; 

float customMagnitude =Mathf.Sqrt(xMagnitude + yMagnitude + zMagnitude); 
directionToMove = new Vector3(displacment.x/customMagnitude, displacment.y/customMagnitude, displacment.z/customMagnitude); 
//directionToMove = displacment.normalized; 
Vector3 velocity = directionToMove * speed; 
Vector3 moveAmount = velocity * Time.deltaTime; 
target.transform.position += moveAmount; 

我第一次拿到了兩個向量之間的位移比我得到它的方向,並以速度傳遞給我的位置。但其方向不是朝着玩家。我做錯了什麼?

+0

任何理由,你爲什麼不使用統一的內置功能呢? – Hellium

+0

,因爲我想學習矢量數學 –

回答

0

因此,讓我得到這個直:你想移動的目標朝着球員,不是玩家朝目標。它是否正確?

如果你想將目標對象移向玩家,那麼位移應該是player.transform.position - target.transform.position,而不是相反。

如果你真的不想使用統一的功能,那麼這裏就是我會做你的代碼:

Vector3 displacment = player.transform.position - target.transform.position; 
float xMagnitude = displacment.x * displacment.x; 
float yMagnitude = displacment.y * displacment.y; 
float zMagnitude = displacment.z * displacment.z; 

float customMagnitude =Mathf.Sqrt(xMagnitude + yMagnitude + zMagnitude); 

//multiplying vector by scalar works the same, 
//and is more readable (possibly faster too) 
directionToMove = displacement * 1f/customMagnitude; 

Vector3 velocity = directionToMove * speed; 
Vector3 moveAmount = velocity * Time.deltaTime; 
target.transform.position += moveAmount; 
+0

感謝您的答案 –

1

如果你想將你的目標玩家,在displacment必須是:

displacment = player.transform.position - target.transform.position; 

要生成給出的初始點的矢量:(Z1 X1,Y1,)一個和最後B點(X2,Y2,Z2)計算如下:

v = B - A = (x2 - x1, y2 - y1, z2 - z1); 
+0

感謝您的一般公式。傻我 –