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

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

Immediately Freeze!

重くなるUnityを使う 25 「Shall we Move? - 引きずる3?いや浮かすだ」

この前の続きからで。

解説(続き)

さてif#文の中は、まずonGroundfalseにします。飛ばすわけですから。そして、RigidbodyAddForce(Vector3)を使います。AddForceVector3(x,y,z)の方向に力を加えます。そのVector3はtransformのupを使います。これは

ワールド空間のTransformの緑軸

とあります。つまり座標空間の緑軸(主にY軸)の値を表していて、それをVector3にしたものです。これにfloatを掛けるとy軸の大きさを変えれるということです。

また、AddForceにはもう一つの形があって、AddForce(Vector3,ForceMode)です。ForceModeForce(力)の伝え方で、Impulse(即時に)、Force(普通(デフォルト))、Acceleration(加速)などが有ります。何も指定しない(引数に入れない)ときはデフォルトのForceになります。今回はForceなので、30Fなどだとほんのちょっとしか動きません。(Impulseならまあまあ)なのでdefspeed(1000F)をかけていい感じにします。(Impulseなら吹っ飛んでいく)

そしてLogでJumpしたことを伝えて終わります。

 

次にMovement(Speed)を説明します。これもおんなじ感じで、キーとonGroundで判断します。ただ、onGroundを選択したいので演算子!を使っています。(bool値を反対にします)またGetKeyWボタンです。

rigidbody.velocityは速度ベクトルを表すものです。ScriptingAPIには「In most cases you should not modify the velocity directly」つまり、そのまま値を入れるなとあります。なので、speedを1000倍にして、更に前フレームからの時間差Time.deltaTime)を掛けます。これは速度などを変えるときに必要になるといいます。

また、この中でもif#があり、AKeyRotate(xAngel,yAngel,zAngel)yAngelを動かし、DKeyで反対側に動かしています。

 

最後のOnCollisionEnterCollisionオーバーライド*1しています。「Ground」というObjectにくっついたらonGroundtrueにするということです。

 

しかしこのままだとカメラが遠い&消えていくので、カメラで追従したいと思います。しかしScriptを作るのは面倒なので、StoreにあるScriptでやりたいと思います。

Asset StoreでMecanim Locomotion Starter Kitと検索すれば、最初に出て来るのが「Mecanim*2の初心者キットです。この中にObjectをカメラが追従してくれる機能があります。これをImportします。

 

次にMain Cameraに追従機能を足します。Add Component→Camera ControlSmooth followを選択します。出てきたComponentのTargetKamiPlaneを選択して、Distance,Height,Look At Angelを設定します。DistanceTargetからの距離、Heightはターゲットからの高さ、Look At Angelはターゲットを何度傾けて見るかの設定です。

 

これで実行すると、、、最初は

f:id:norlself66:20150328030029p:plain

何も追従せず、動きもしません(実行中ではなく編集中も)しかしすぐに、

f:id:norlself66:20150328030137p:plain

このように視点が変わってTargetの背後に映りました。そして、

f:id:norlself66:20150328030209p:plain

Spaceキーで空を飛んでWキーで前に進みます。

ただ、AキーとDキーがどのような動きをしているのかよくわかりません。また、着地時に形が前のめりになるなどの色々なところを直すほうがいいようです。なのでそれを今度は変えていきたいと思います。

*1:オーバーライドは、すでにあるクラス内のメソッドを書き換えることでScript内で適用させることです。引数も等しくないといけません

*2:Mecanim(メカニム)はUnity4.0からの機能で、Objectのモーション(動き)のアニメーションのセットのこと。