2017-01-28 7 views
0

私はあなたのホバリング宇宙船を運転する(starwarsからpodracingのような)私のゲームのための方向性のドラッグを作成しようとしています。彼らは通常正面から合理化され、側面からではないので、船体、車などのホバリングのための何らかの意味をなしません。私は物理学にうまくいかないが、私が知っていることからドラッグが速くなるほど速くなる。私はこのスクリプトを書いたが、うまくいきません。力が加えられるとオブジェクトはそれ自身で加速します。オブジェクトの速度を変更して方向性のあるドラッグを作成する方法は?

public Vector3 dragFactor; 
private Rigidbody _rb; 

void Start() { 
    _rb = GetComponent<Rigidbody>(); 
} 
void FixedUpdate() { 
    Vector3 vel = _rb.velocity; 
    if(vel.x>0) 
     vel.x -= vel.x * dragFactor.x; 
    else 
     vel.x += vel.x * dragFactor.x; 

    if (vel.y > 0) 
     vel.y -= vel.y * dragFactor.y; 
    else 
     vel.y += vel.y * dragFactor.y; 

    if (vel.z > 0) 
     vel.z -= vel.z * dragFactor.z; 
    else 
     vel.z += vel.z * dragFactor.z; 
    _rb.velocity = vel; 
} 

あなたは何が間違っているのか、何が変更できるのか知っていますか?

+0

rb.velocityを直接操作しないでください。代わりに、あなたは達成しようとしていることに応じて、多かれ少なかれrb.AddForceのために行きます。方向性のあるドラッグの意味が分かりませんので、例を挙げることはできません。 – Absinthe

+0

@Absinthe方向性のドラッグでは、オブジェクトが前方に移動しているときよりもオブジェクトが右側に移動しているときにドラッグが強くなるようにする必要があります。 –

+0

OK、必要な方向に力を加えたいので、ベクトルを正と負に設定します。もしあなたのターゲットrb.AddForce(myNegativeXVector)、そうでなければrb.AddForce(myPositiveXVector) – Absinthe

答えて

1

ドラッグは表面積と関係があります。私はあなたにコード化された答えを与えることはできませんが、私は自分自身を探しています。だから、それはあなたが正しいことをしているようです。ドラッグを手動で適用すると、オブジェクトのデフォルトドラッグの影響を受けることになります。だから、もしあなたが.1あなたの見ているゲームが vel.x * rb.drag * dragFactor.x であるなら、これはあなたが望むものではありません。だからあなたはrb運動学を作り、それを手で動かす必要があるので、自然の力はそれには適用されません。

またあなたには、いくつかの正規化変数すなわちtime.fixedDeltaTime

_vel.xを掛けたいしようとしている - = vel.x * dragFactor.x * Time.fixedDeltaTime

私は動的にドラッグを変更し、このコードを見つけました

https://github.com/CoolOppo/Unity-Networking-FPS/blob/master/Assets/Sample%20Assets/Characters%20and%20Vehicles/Aircraft/Scripts/AeroplaneController.cs

具体

void CalculateDrag() 
{ 
    // increase the drag based on speed, since a constant drag doesn't seem "Real" (tm) enough 
    float extraDrag = rigidbody.velocity.magnitude * dragIncreaseFactor; 
    // Air brakes work by directly modifying drag. This part is actually pretty realistic! 
    rigidbody.drag = (AirBrakes ? (originalDrag + extraDrag) * airBrakesEffect : originalDrag + extraDrag); 
    // Forward speed affects angular drag - at high forward speed, it's much harder for the plane to spin 
    rigidbody.angularDrag = originalAngularDrag * ForwardSpeed; 
} 

上記のコードは、ドラッグ速度を向上させるのに役立ちます。

** isKinematicへの参照を編集、削除しました。あなたが速度で位置を修正し、重力を適用しない限り、キネマティックは役に立たない。私は、デフォルトのドラッグが適用されないようにisKinematicを使うことができるようにしたいと思っていました。剛体のドラッグが0で、スクリプトがカスタムドラッグを固定アップデートに設定していることを確認するのがベストかもしれません。

関連する問題