すぐに固まるパソコンを使う。

すぐに固まるパソコンを使って色々します(実はそんなすぐでもない)。基本的にプログラミング系が多いです。たまに違うことします。

Immediately Freeze!

重くなるUnity 39 物体への力のかけ方 「紙ヒコーキが上がるよ」

紙飛行機を上げて飛ばすのですが、その時に使うメソッドを決めます。また、条件も必要です。

 紙飛行機を上げるときは、

  • 地面に付いている時だけ上がれる
  • Spaceキーを押すと浮き始める。
  • ある程度の高さになったら上がるのが止まる。

が必要です。

 

また、Rigidbodyまたは、Transformに力を加えるのは、、、

  1. Rigidbody.AddForce(or AddRelativeForce)
  2. Rigidbody.MovePosition
  3. Transform.position(をsetする)
  4. Transform.Translate

などなどが有ります。

ただ、これを追加しようとすると問題が有ります。

どれも、そのフレーム(または、物理的な1つの時間)だけに対応しているので、「Spaceキーを押すと浮き始める」と言うのは、Spaceキーを押すと浮くが、次の処理をするときに「地面に付いていない」状態になるので、上がらず、前から上がるようにしないといけなくなります。それでは操作が出来ないので、この4つも無理です。

 

そこで、UnityのReferenceを参考して、あるクラスを使うことにしました。

ConstantForce

Namespace: UnityEngine

/

Inherits from: Behaviour

 
SWITCH TO MANUAL
 

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も作りました。)
 

gist.github.com

 

結果

f:id:norlself66:20150515211117p:plain

完全にぶれてますが、少しづつ上がっていっています

 

これで、一応紙飛行機は上がります。ただ、実際の動き*1とは違ってしまいます。そこは、どうにかしたいです。

*1:機首を上げて、少しづつ速度を落としながら上昇する