重くなるUnity 39 物体への力のかけ方 「紙ヒコーキが上がるよ」
紙飛行機を上げて飛ばすのですが、その時に使うメソッドを決めます。また、条件も必要です。
紙飛行機を上げるときは、
- 地面に付いている時だけ上がれる
- Spaceキーを押すと浮き始める。
- ある程度の高さになったら上がるのが止まる。
が必要です。
また、Rigidbodyまたは、Transformに力を加えるのは、、、
- Rigidbody.AddForce(or AddRelativeForce)
- Rigidbody.MovePosition
- Transform.position(をsetする)
- Transform.Translate
などなどが有ります。
ただ、これを追加しようとすると問題が有ります。
どれも、そのフレーム(または、物理的な1つの時間)だけに対応しているので、「Spaceキーを押すと浮き始める」と言うのは、Spaceキーを押すと浮くが、次の処理をするときに「地面に付いていない」状態になるので、上がらず、前から上がるようにしないといけなくなります。それでは操作が出来ないので、この4つも無理です。
そこで、UnityのReferenceを参考して、あるクラスを使うことにしました。
Description
常に力が適用されます
これはオブジェクトに連続的な力を加えるために使用される小さな物理ユーティリティクラスです。 Rigidbody.AddForceは1フレームのみRigidbodyに力を加え、これを維持するために関数を呼び出し続けなければいけません。 一方でConstantForceは力の値を変更するまで毎フレーム力を加える事が出来ます。 See Also: Rigidbody.
Variables
force | 毎フレームRigidbodyに力を加えます |
relativeForce | Rigidbodyオブジェクトの座標を基準にして、毎フレーム相対的な力を加えます |
relativeTorque | Rigidbodyオブジェクトの座標を基準にして、毎フレームトルクに相対的な力を加えます |
torque |
毎フレームRigidbodyのトルクに力を加えます |
Inherited members
Variables
enabled | 有効であれば更新され、無効であれば更新されません。 |
(この先続く)
このクラスは、Componentにもなっているクラスで、Rigidbodyに「ずっと」力を加えてくれます。フレームに関係なくできるので、条件にも合っています。
また、constantForce.enabledを使って、ある高さ以上になると更新しなくなるようにします。これで、上昇の動きができるでしょう。そこで次のようにしました。
(一応GameOverも作りました。)
結果
完全にぶれてますが、少しづつ上がっていっています。
これで、一応紙飛行機は上がります。ただ、実際の動き*1とは違ってしまいます。そこは、どうにかしたいです。
*1:機首を上げて、少しづつ速度を落としながら上昇する