【Unity3】コインを落とす!Mathf.Sin, Time.time, MovePosition【コインプッシャー2】
Unity5.0.0f4 Personal(2015年4月)
前回の続きを書かさせて頂きます〜
今回は配置したプッシャーを動かして、コインを落とすところまで進めいたと思います〜
プッシャー(赤枠)を動かす
【目標】プッシャーを動かし、コインを画面下へ落とす!
まずはPusherに重力の影響を与えるため、RigidBodyコンポーネントを追加します〜
InspectorのAddComponentからPhysics>RigidBodyと進むとあります〜
RigidBodyコンポーネント追加完了
重力を追加しましたが今回は定位置でのゲームですので、重力に従って下へ落ちてもらっては困ります〜そこで、上画像のUseGravityのチェックを外して下さい〜こうすることで、Pusherを定位置に保つことができます〜
また、Is Kinematicのチェックを入れておいて下さい〜
IsKinematicにチェックが入っていないと、例えばプッシャーがコインに触れた時、プッシャーにも反動がきてしまい、位置情報がずれてしまうのです〜
IsKinematicにチェックが入っていれば、プッシャーはコインにぶつかっても、同じ位置で繰り返し動いてくれるようになります〜
重力を無効にするんじゃRigidBodyコンポーネントを追加した意味ないじゃないか!!!と思われるかもしれませんが、これからRigidBodyクラスのMovePositionメソッドを使うために必要なのです〜ひとまずソースを確認してみましょう!
MovePosition(Vector3)を使うと、指定した方向へオブジェクトを移動させることができます〜MovePositionの良いところは、他のオブジェクトの存在を判定しながら移動するためオブジェクトとオブジェクトが重なったりしない点です〜
ちなみに同じような処理にTransform.Translate(Vector3)という処理がありますが、こちらは指定した方向にワープするイメージであるため、オブジェクトとオブジェクトが重なってしまうことがあるので注意です〜
MovePositionを使う前に「GetComponent<RigidBody>().」という記述をしてRigidBodyクラスを使える状態にしております〜この記述はUnity4とUnity5とで違うのですが、詳しくは以前の記事に書かれておりますので、ご参照下さい〜
「GetComponent<Rigidbody>.」の記述はしたけれど、オブジェクトにRigidbodyコンポーネントが取り付けられていない場合エラーとなってしまいます〜そのため、UseGravityのチェックを外したRigidbodyコンポーネントをPusherに取り付けたというわけです〜
Rigidbodyが付いてないとこんなエラーが出てきます
それではソースの解説に戻ります〜FixedUpdateの中でMathf.Sin(Time.time)* 0.5fという記述がありますが、Mathf.Sinは-1から1の間で往復的に値を変化させる関数です〜これに0.5をかけているので、-0.5から0.5の間で往復的に値を変化させております〜
Time.timeはゲーム起動からの経過時間を表しております〜1秒単位の処理を行う時に使います〜
まとめると、AwakeでPusherの初期position(X:0, Y:0.4, Z:0.7)を取得して、ゲーム内で1秒→2秒→3秒→4秒→5秒、、、と時間が進むと、PusherのZ軸が0 → 0.5 → 0 → -0.5 →0 、、、という変化をなめらかに繰り返し、コインドーザーのプッシャーの動きを実現しているというわけです〜
【課題3】コインを量産化し、プッシャーの動きを確認
それでは前回作成しておいたCoinのPrefabでコインを更に量産化したいと思います〜
量産化し位置をまばらに
しまった!CoinにRigidbodyを付け忘れたまま量産化してしまいました〜!ご安心下さい、Prefabからオブジェクトを複製した場合、コピー元のPrefabの設定を変えればコピー先のオブジェクトの設定は全て連動して変わります〜
コピー元にRigidbodyをつけるだけでコピーした全てのコインに反映
また、僕の場合なのですが、コインに付いていたColliderがSphereColliderであったのでこれを削除し
右クリックからRemoveComponentで削除
代わりにMeshColliderを取り付けて下さい〜更に、Unity5からMeshColliderを使う場合はConvixにチェックを入れなければならないようなので、そのようにします〜
Convixにチェック
コインが
落ちて
プッシャーに押されます
これでプッシャーに押されてコインが落ちるようになりました〜
ひとまず今回はここまでです、ありがとうございました〜
【Unity開発3】プッシャーを動かしてコインを落としたい!【コインプッシャー2/6】
【Unity開発3】画面をクリックしてコインを出現させたい!【コインプッシャー:3/6】
【Unity開発3】前方にコインが落ちた時スコアアップしたい!【コインプッシャー4/6】