2016-07-09 1 views
1

私は自分でゲームを作ろうとしており、難しかったです。オブジェクトを特定の方向に加速する

私はこのオブジェクトを持っており、私はベクトル3点に向かって加速する必要があります。

私はVector3.MoveTowardsコマンドを使用しようとしましたが、オブジェクトは一定の速度で移動し、目的地で停止します。

私がする必要があるのは、0速度から3点のベクトルに向かって加速し、その点で停止しないで、その点を通過した後に同じ方向に継続することです。

誰でもこれを行う方法を知っていますか?

ありがとうございました!

答えて

2

これらの手順は、UpdateまたはFixedUpdateメソッドで呼び出されるメソッドで実行します。剛体を使用する場合はFixedUpdateをお勧めします。

まず、自分の位置からポイントまでの方向を見つけ、リジッドボディを使用しない場合はスクリプト内にvelocityインスタンス変数を定義する必要があります。 にを使用してを使用している場合は、代わりにrigidbody.velocityを使用してください。 targetは、あなたが加速しようとしているVector3ポジションです。

// Use rigidbody.velocity instead of velocity if using a Rigidbody 
private Vector3 velocity; // Only if you are NOT using a RigidBody 

Vector3 direction = (target - transform.position).normalized; 

次に、既にターゲットを通過したかどうかを確認する必要があります。このチェックは、我々はたちのTransformRigidbodyを加速する必要があり、これを行っているいったん速度が同じ

// If our velocity and the direction point in different directions 
// we have already passed the target, return 
if(Vector3.Dot(velocity, direction) < 0) 
    return; 

残っていることを確認します。

// If you do NOT use rigidbodies 
// Perform Euler integration 
velocity += (accelMagnitude * direction) * Time.deltaTime; 
transform.position += velocity * Time.deltaTime; 

// If you DO use rigidbodies 
// Simply add a force to the rigidbody 
// We scale the acceleration by the mass to cancel it out 
rigidbody.AddForce(rigidbody.mass * (accelMagnitude * direction)); 

私はこのような何かをやったときに、それははるかに理にかなっているので、あなたがRigidbodyを使用することをお勧めします。

+0

申し訳ありませんが、その位置で停止しています。スクリプトの第3部分はどこに行くべきですか?あなたの答えの2番目の部分のif文の中に? @AlbertoO。 –

+0

if文の後に*する必要があります。 – EvilTak

関連する問題