重くなるUnityを使う 25 「Shall we Move? - 引きずる3?いや浮かすだ」
この前の続きからで。
解説(続き)
さてif#文の中は、まずonGroundをfalseにします。飛ばすわけですから。そして、RigidbodyのAddForce(Vector3)を使います。AddForceはVector3(x,y,z)の方向に力を加えます。そのVector3はtransformのupを使います。これは
「ワールド空間のTransformの緑軸」
とあります。つまり座標空間の緑軸(主にY軸)の値を表していて、それをVector3にしたものです。これにfloatを掛けるとy軸の大きさを変えれるということです。
また、AddForceにはもう一つの形があって、AddForce(Vector3,ForceMode)です。ForceModeはForce(力)の伝え方で、Impulse(即時に)、Force(普通(デフォルト))、Acceleration(加速)などが有ります。何も指定しない(引数に入れない)ときはデフォルトのForceになります。今回はForceなので、30Fなどだとほんのちょっとしか動きません。(Impulseならまあまあ)なのでdefspeed(1000F)をかけていい感じにします。(Impulseなら吹っ飛んでいく)
そしてLogでJumpしたことを伝えて終わります。
次にMovement(Speed)を説明します。これもおんなじ感じで、キーとonGroundで判断します。ただ、onGroundは偽を選択したいので演算子の!を使っています。(!はbool値を反対にします)またGetKeyはWボタンです。
rigidbody.velocityは速度ベクトルを表すものです。ScriptingAPIには「In most cases you should not modify the velocity directly」つまり、そのまま値を入れるなとあります。なので、speedを1000倍にして、更に前フレームからの時間差(Time.deltaTime)を掛けます。これは速度などを変えるときに必要になるといいます。
また、この中でもif#があり、AKeyでRotate(xAngel,yAngel,zAngel)のyAngelを動かし、DKeyで反対側に動かしています。
最後のOnCollisionEnterはCollisionをオーバーライド*1しています。「Ground」というObjectにくっついたらonGroundをtrueにするということです。
しかしこのままだとカメラが遠い&消えていくので、カメラで追従したいと思います。しかしScriptを作るのは面倒なので、StoreにあるScriptでやりたいと思います。
Asset Storeで「Mecanim Locomotion Starter Kit」と検索すれば、最初に出て来るのが「Mecanim」*2の初心者キットです。この中にObjectをカメラが追従してくれる機能があります。これをImportします。
次にMain Cameraに追従機能を足します。Add Component→Camera Control→Smooth followを選択します。出てきたComponentのTargetにKamiPlaneを選択して、Distance,Height,Look At Angelを設定します。DistanceはTargetからの距離、Heightはターゲットからの高さ、Look At Angelはターゲットを何度傾けて見るかの設定です。
これで実行すると、、、最初は
何も追従せず、動きもしません(実行中ではなく編集中も)しかしすぐに、
このように視点が変わってTargetの背後に映りました。そして、
Spaceキーで空を飛んでWキーで前に進みます。
ただ、AキーとDキーがどのような動きをしているのかよくわかりません。また、着地時に形が前のめりになるなどの色々なところを直すほうがいいようです。なのでそれを今度は変えていきたいと思います。