2016-11-23 4 views
0

それは物です:私は剛体を回転させるセンサーを持っています、問題は回転した速度を計算できません。オブジェクトは速く動くが、オブジェクトが他のオブジェクトと衝突すると、回転した速度/力は適用されない) 最近回転した速度/力を計算する方法はありますか私はその速度/力を衝突時に別のオブジェクトに適用することができますか?どのように回転単体の速度を計算することができますか?c#

注:ためオブジェクトは、それが90度にデフォルトで回転する必要がある設計されていたかの:私は必要なの

float rot = float.Parse (sp.ReadLine()); 
transform.eulerAngles = new Vector3 (0, 90, rot); 

ノートスピードや力がある場合イム全くわかりません。基本的には、ジャイロスコープから情報を受け取ってオブジェクト回転に置くことです。

センサはFloatの形で値を与えます。左に回転すると-90から0の値を与え、右に回転すると0から90の値を与えます。この値オブジェクトをグラフィカルに回転させて、他のゲームオブジェクトと衝突したときに回転させた速度(例えば、-90から-20に高速に移動した場合など、ゆっくりと移動した場合よりも大きな力を加える必要があります-90〜-50〜-20)

+0

正確な物理的なやり取りが必要な場合は、回転を直接設定しないでください。センサがどれだけ動いたかに基づいて、物理システムを使用して物体にトルクを加えることを検討する必要があります。 – Serlite

+0

私があなたを理解しているかどうかは完全にはわかりませんが、あなたが言うことのコード例を教えていただけますか? –

+0

私はあなたの現在のアプローチを示す必要があるので、私と他のメンバーは、あなたがセンサーからどのようなデータを得ているのか、どのように使用しているのかをよりよく知ることができます。関連するコードを含むように質問を編集してください。必要に応じて対応できるかどうかがわかります。 – Serlite

答えて

0

オブジェクト間に信憑性のある物理的なやりとりを生じさせようとすると、transformを直接操作することは決してありません。代わりに、添付のRigidbodyに物理的に影響を及ぼすために利用できるさまざまな方法を使用する必要があります。

この場合、ローテーションを適用するには、Rigidbody.AddTorque()を使用します。ここでは、あなたがそれを使用する方法のアイデアです:

// Probably get this value in Start() and save it for later 
Rigidbody rb = GetComponent<Rigidbody>(); 

float rot = float.Parse (sp.ReadLine()); 

// transform.forward is the unit vector corresponding to the local z-axis of the object 
Vector3 rotationAxis = transform.forward * rot; 
rb.AddTorque(rotationAxis); 

は、この情報がお役に立てば幸い!ご質問がある場合はお知らせください。

+0

あなたのaproachは、私が持っていた別の問題を解決しているので、非常に役に立つかもしれません。しかし、問題は残っています。センサーは常に値を単一性に送信しています。したがって、このコードを使用すると、ゲームオブジェクトは継続的に移動し、必要なものではない力を追加します。 別の問題は、センサーが負の値(-90から90までの値を送信する)も送信するため、トルクが負の値でどのように機能するかはわかりません。 –

+0

さらに、ゲームオブジェクトは前後に回転して両方向の速度を計算できる必要があります。 (ゲームオブジェクトは両側から別のオブジェクトに衝突する可能性がある)ので、両側に力を加えなければならない。完全には動作しない可能性があるとは思わない。 –

+0

@KevinDaichこのセンサーの性質はどういうものか?どのようなデータが期待できるのでしょうか?私はあなたの質問へのいくつかの編集が必要かもしれないと思うので、それから得られるデータを使用可能なフォームに処理する方法を決定する方が簡単です。 – Serlite

関連する問題