先日、
にて、ロジックエディタでオブジェクトを動かす方法について書きました。
ゲームの場合、
■ 操作する物
■ 自動で動くもの
が存在していますが、先日は、この中の操作できる物の実装について書きました。操作をする場合、
【 入力デバイスの信号の検知 】 → 【 動作 】
になるので、単一の条件だと、コントローラーをANDにすれば、じょうきの 【 センサー 】 と 【 アクチュエーター 】 の設定だけで一つの操作を実装する事ができます。
これを入力分だけ実装する事になりますが、基本的な考え方は、他のゲームエンジンでも同じです。
その為、UnrealEngineのブループリントを使う場合も入力に対してどう言った挙動にするのかを6DoFの設定やアクションの実行などで指定する事になりますから、手動操作の場合には、そう言った実装を行う事になります。
ロジックエディタだけで作るの場合だと、ゲーム内で実装する捜査の全てをキーごとのロジックで適応する必要があるのですが、実装すると、その通りに動作するようになります。例えば、
■ キャラクターとカメラの始点を変更する
のような処理を実装する場合、
■ カメラ
■ オブジェクト
に異なる動作を実装する事になりますが、キーボードかジョイスティックに対して操作を割り当てる事ができます。とは言っても、先日書いたように入力デバイスの状態変化をっ検知して動作させることが出来るので、レバーを使い分ける事で、カメラとキャラクターオブジェクトを操作する事ができます。UPBGE 0.3.0 Alphaではマイクロソフトのゲームパッドがそのまま使えるので、レバー操作などをそのまま使用できますから、こう言ったっ操作系を実装した場合、二つのレバーで動きを制御する事ができますが、キーボードの場合、きーぼ組み合わせが出来るので、複雑な操作を少ないキーの組み合わせで実装することもできますが、この動画内での動作が6DoFの実を実装した物になります。
ちなみに、キャラクターモーションを実装するとジャンプを使って跳ねる事が出来るようになるので、
■ キャラクターモーションでジャンプさせる
のような動作を実装することもできます。ここで、地面の概念が存在していますが、これがダイナミクスとコリジョンによる効果になります。
ダ イナミクス
3DCGは三軸の座標を用意しただけの構造物ですから、物理法則は存在しません。その為、オブジェクトの持つローカル座標やグロバル座標が干渉する状態であっても何も発生しません。
つまり、 【 物理法則のような現象 】 については、実装されていない状態だと何も起きず、オブジェクトは三次元空間上で重なります。
ゲームの場合、この状態だと問題があるので、これを回避する為に、物理法則を実装する必要があります。3DCGツールには、ダイナミクスが実装されているので、それを用いる事で、物体の干渉や物体の特性を実装できるわけですが、BGEの時代でも
■ ダイナミクスのテスト
のようなことが出来ていたのですが、これと同じ処理もUPBGEで実装できます。基本的に、Blenderのダイナミクスの指定と同じですが、UPBGEでは、
■ リッジドボディー
■ ソフトボディー
に限定されているので、それを実装する事になります。ダイナミクスについては、
の場所にありますが、
の中から選択できるようになっています。動かない物を選ぶ場合には、Static(静的)を選ぶことになりますが、これを指定すると地面のような物を配置する事ができます。動かさない物で判定を用意したい場合にはこれを指定します。その為、レベルデザインを行った時に配置する動かないオブジェクトの取り扱いは 【 Static 】 になります。
通常の物体の判定だとソフトボディーとリッジドボディーになりますが、前者が柔らかい物の表現で後者が固い物の表現になります。キャラを動かす場合の処理ですが、 【 Charactor 】 を選択します。
すると、
のように高さやジャンプの回数の指定が出来るので、これを用いる事得動作をコントロールする事が可能になります。
ダイナミクスを実装すると干渉の判定を入れる必要が出てきますが、この時に、ボックスで判定を行っています。このボックスの形状をオブジェクトに近づけるほど適正な動作になりますが、複雑な形状にするほどに演算が増えるので処理が重たくなります。
これとは別に、追尾などを行うときに使用するナビゲーションメッシュもここで設定します。
ロジックにはMotionがありますが、Charactorを選択する場合だと、ジャンプが出来るようになりますが、この時にダイナミクスでCharactorを指定しておくとジャンプが使用可能になり、ダイナミクスのプロパティで、
■ 多段ジャンプ
■ 高さの変化
■ 角度の変化
なども指定できるので、単体のジャプボタンで多段ジャンプの指定もできるのですが、異なる操作で種類の異なるジャンプをするような処理のの実装も可能です。
シ ョットを射つ
キャラの移動は前述の方法で可能になりますが、
■ キャラの移動とショットを撃つ機能を付ける
のようにボタンを押すとショットが出るような処理だと、別の処理を実装する必要があります。Scratchを使う場合も全く別のコードを用意する必要が出てきます。
先ほどの座標の移動については、
■ Scratch : キャラのモーションを入れて左右に動かす
と同じなので、
■ アニメーションしながらキャラを動かす
のような感じの事が出来るのですが、ショットを射出する場合には、別のオブジェクトを作って、それを動かす必要があります。
この方法については、
の中で触れていますが、Scratchの場合だと、スプライトを作った後にクローンしてそれにざひょのう移動を追加するような作り方になります。
UPBGEの場合も考え方は同じで、挙動を実装したオブジェクトを呼び出して動作させることで、ショットを作る事ができます。
■ Edit Object
アクチュエーターの中から 【 Edit Object 】 を選択し、その中の
【 Add Obhject 】 を選択すると、オブジェクトをシーン内に追加できます。
Addなので追加できますが、ここでオブジェクトを選択しておいて、寿命と6DoFによる指定をしておくとその状態で動作するようになります。
この用途は、
【 条件式を用意して簡素な動きをするものを表示する 】
時に使用できる物になりますが、 【 常時直線的に動く 】 と言う指定をすると、発生時間の間はその挙動が実行されることになります。
この時に、オブジェクトの正面にオブジェクトが生成され、その方向にショットが出るような流れになりますから、ショットの向きの制御を行うと自由度の高いショットのコントロールができます。
ゲームの場合、シューティングゲームのショットのように
【 シーン内に存在せず、条件で発生して自動で動くもの 】
も存在するので、そう言った物を使う場合には、オブジェクトの生成と挙動の実装とその実行を行う必要があります。
■ ショットの実装
ショットの仕組みを書いたので、実際に実装してみます。CUBEをキャラクターオブジェクトとした場合に、スペースバーを押すとショットが出るようにします。
まず、違うレイヤーを選択して、球を用意します。
そして、この球に対して、移動するロジックを実装します。
実装したロジックは、
になりますが、
■ センサー
ショットは常に動くようにするので情事を選択します。
■ コントローラー
今回は直接つなげているので、ANDで繋いでいます。つまり、複数の入力を一つにまとめてANDで繋ぐと直結と同じ事になります。
■ アクチュエーター
アクチュエーターですが、モーションを追加し、Y方向に球が進むようにしておきます。これでロジックが出来たので、
のようにカメラオブジェクトの始点を決めて、CUBEのロジックを実装します。今回はスペースキーでショットを出すので、CUBEを選択してロジックエディタを開き
のようなロジックを組みます。
■ センサー
今回は、キーボードで操作するので、センサーにキーボードを指定して、 【 key 】 に 【 スペースキー 】 を指定します。
■ センサー
センサーとアクチュエーターを直結しても大丈夫な構成なので、今回もコントローラーはANDで繋いでいます。
■ アクチュエーター
アクチュエーターは 【Edit Object】 を選択し、Add Objectで球を呼び出します。
つまり、スペースキーを押すと、そのまま動作が指定されたオブジェクトが追加されるので、表示後にはそのまま動くようになります。
この状態で動かすと、
のようにスペースバーを押したら球が射出がでるようになりました。
ここで気になるには、この設定にした場合、キャラの向きを変えるとどうなるのかを見てみましょう。
CUBEのロジックを拡張して、左右に向きを変えれるようにします。
■ CUBEに動きを実装する
CUBEを動かすために
のようにロジックを実装しておきました、コントローラーはANDなので割愛しますが、
■ センサー
センサーは、キーボードを選択し、カーソルキーをしていしておきました。
■ アクチュエーター
アクチュエーターは、軸回転をそれぞれ入れて、カーソルキーの向きで回転方向を変えて実装しました、左だと、左に回転し、右だと右に回転するようにしています。Blenderでは、Z-UPの軸の構造なので、Z軸へ軸回転を追加しています。
この状態で実行して、カーソルキーとスペースキーを使って、方向を変えながらショットを出すと、
のようにキャラの正面に向かってショットを打てるようになります。
ショットの動きがこうなっているので、
■ キャラクターとカメラの始点を変更する
と組み合わせると、キャラを移動させながら、正面方向に向かってショットを打てるようなゲームの作りにすることもできます。
■ オブジェクトを動かす