先日、

 

 ■ UPBGE

の中で、UPBGEについて触れましたが、今回は、ロジックについて書こうかなと思います。

 

 

U PBGEの仕様                    

 

 UPBGEですが、BlenderにあったBGEと言うゲーム制作機能のフォークとして制作されたソフトウェアになりますが、基本部分はBlenderなので、使用されているバージョンのBlenderの機能はすべて使用できます。

 

 なので、0.3.0Alphaだと3.0.0なので、今年の9月にリリースされる3.0のα版の機能がそのまま使えます。

 

 現在のBlenderは、動画制作機能が使用できますが、2.92でジオメトリノードが使用できるようになりましたから、パーティクルではなく、ノードでレベルデザインが出来るようになりました。

 

 また、モディファイヤーで制御するような処理もノードで行えるので、現行版では、ノードを使ったオブジェクトのコントロールが出来るようになっています。

 

 このように 【 バージョンが違うと面白い機能が増えている 】 わけですが、2.79では実装されていない機能が多く存在しています。

 

 UPBGEも通常リリース版の2.79をベースにしたものと、α版がありますが、0.3Alphaは3.0ベースなので、その都度、違う作り方が出来る世になっている訳ですが、

 

    キャラクターオブジェクトのセットアップ

    レベルデザイン

    動画素材の製作

    エフェクト素材の製作

 

など、ゲームで使用する素材をそのまま作る事ができます。ゲームの場合3DCGAのようなリグの数にすると物凄く重くなるので、主要なリグだけで動かす事になりますが、素材の製作をBlenderの機能で行う事になります。

 

 UPBGEのゲーム部分のコントロールですが、ロジックエディタで行う事になりますが、現在見かけるノード型の物とは少し異なり、挙動を基準として操作方法になります。

 

 その為、素材を作っておいて、それに対してどう言った処理を実装sて動くようにするのかをロジックエディタで実装して動かす事になります。

 

 作業としては、 【 素材制作 】 と 【 挙動の実装 】 になりますが、これは別のゲームエンジンを使った場合でも同じ工程になります。

 

 ームエンジンと素材制作            

 

 先日書いたようにゲームエンジンだけでは、創れない素材もあるので、素材の製作をする場合には、必要なソフトを揃えておく必要があります。この場合、最低でも

 

    画像制作

    音楽制作

    波形編集

 

が可能なツールをゲームエンジン以外に用意しておく必要があります。ゲームエンジンでキャラクターオブジェクトを作るのは大変なので、

 

    3DCGの統合環境

    ゲームエンジン

 

を組み合わせて作業をすることになりますが、ゲームエンジンはシステム製作と配置するオブジェクトのセットアップを行う物なので、素材自体を作る事は難しいので専用ソフトを使う事になります。

 

 

 ジックエディタ                   

 

 UPBGEはライセンスの仕様から商用利用が無理で、作った物はソースコードを公開しましょうと言うライセンスになっていますから、動きを考えて作ったり、趣味でゲームを作ってみたいという条件だと向いているのですが、

 

    無償で使える

    登録不要

 

と言う煩雑さのない作りになっています。このツールにおけるゲーム制作をする場合に、ゲーム内の制御をするのがロジックエディタになりますが、

 

【 入力 】 → 【 判定 】 → 【 処理 】

 

と言う構造物を作って、処理を実装する作りになっています。

 

 

■ ロジックの仕様                  

 

 ロジックエディタのとじっくの仕様ですが、

 

【 対象オブジェクトに対して処理を実装する 】


事で、ゲーム実行時に実装された処理が実行されることになります。

 

 この考え方がScratchも同じですが、Scratchも

 

 ■ Scratch : キャラのモーションを入れて左右に動かす

 

 

で紹介しているように、ウインドウ内でオブジェクトを動かす場合には、スプライトを用意して、そのスプライトに対して挙動を実装する事になりますが、ゲームエンジンの場合も基本的にはこう言った作りになっているので、 【 オブジェクト 】 に対して処理を実装していきます。

 

 UPBGEでロジックを組む場合も 

 

対象のオブジェクトに対して処理を実装する

 

という考え方になります。

 

 

■ 情報の入力                    

 

 オブジェクトを動かす場合ですが、条件に基づいて動くことになりますが、リアルタイムで処理をする場合、 【 事前の入力された値 】 で動くことになります。

 

 プログラミング言語を使って処理をした場合だと、入力待ちのように何かが行われた後に動くものがありますが、これも入力に対して動く挙動になります。Pythonだと

 

 ■ 入力待ちと変数 【 Python 3.8 】

 

のような感じで入力待ちを作れますが、これはコンソールアプリなので、ウィジェットを使ったフォームアプリを作る場合だと、少しコードの仕様が変わりますが、この場合、オブジェクトに対して処理を実行するようなコードを書きます。

 

 フォームを使うアプリケーションの場合、その対象物に対して処理を入れる事になりますから、ゲームエンジンの処理は、フォームで動くアプリケーションを作るのに似ていますが、Pythonだと、

 

 ■ PythonでのGUIプログラミング 【 Python 】

 

のように、操作によって挙動が変わるような物を作る場合にも、お武家クトを用意して、 【 操作による入力 】 によって挙動が変わるような処理を実装する事になります。JavaScriptの場合、コンソールに表示するようなコードの書き方もありますが、HTMLファイル内のオブジェクト操作で動かすような作りになっている(というか、今のJavaScriptは結構機能が面白いので、次の機会に触れようかなと思います。)ので、

 

 ■ 入力と処理 【 JavaScript 】

 

 ■ JavaScriptとオブジェクト  【 JavaScript 】

で触れているように、入力による反応で動くものを作る事ができます。

 

 これは、検知によって動いている訳ですが、動くものを作る場合、何かしらの情報を元に動作させることになります。

 

 UPBGEでは、この処理をセンサーで判定して動かす事になります。

 

 

■ センサー                       

 

 センサーについては、

 

 

のような機能が実装されていますが、これが、動作の起点となるための条件になります。

 

 動作の状宇件としては、

 

    自動

    手動

    センサーで検知した結果に反応

 

の3つに分類する事が出来るのですが、現実世界で動くものを制御する時の条件によく似ています。動くものには、

 

    常に動くもの

    操作によって動くもの

    センサーで反応する物

 

がありますが、一番最初に出てくるものは、小学校3年生の理科で出てくる電池と豆電球や、モーターなども同じ条件になります。冷蔵庫のように常に動いている物もこの例に入りますが、生活で必要になるライフラインや信号機のように常に動いている物がありますが、こうした条件が一番最初の物になります。

 

 二番目が操作が加わる物ですが、この場合、小学校3年生の理科の豆電球と電池の構造にスイッチを入れた状態になりますが、この状態にすると、通電と遮断が発生するので、操作をしなければ動作しなくなります。これはモーターも同じですが、最小単位は、この二値の入力の選択肢の有無になります。むしろ、家電などは安全装置や消費電力を下げる目的で、主電源が入っていても動作させるにはスイッチを入れる必要がある作りになっていますが、電気スタンドや家庭用の照明などがこれに該当します。

 

 一番最後のものはセンサーで反応するものになりますが、一番馴染みがある物は、自動ドアだと思います。これは赤外線検知ですが、何かしらの方法で状態変化を検知する事で動くものになります。

 

 この動作における、 【 入力部分 】 がセンサーで、このセンサーの入力の発生を検知して、動作が発動するようにロジックを組むことになります。

 

 

■ 条件の判定を行う                 

 

 センサーの入力があった場合、そのままりょりを直結すると動作しますが、これは、ドライヤーなどのように 【 条件式が存在しない場合 】 に限定されます。つまり、自動販売機のような条件式が揃っていないと動かない物だと、 【 条件式 】 を構築する必要が出てきます。

 

 プログラミングを行う場合だと、判定を行う時に 【 条件分岐 】 を用いますが、論理演算子や比較演算子などを使って処理を行います。

 

 Pythonの場合だと、

 

 ■ 判断と動きに使う処理(if文と比較演算子) 【 Python 3.9 】

 

  

 ■ ビット演算 【 Python 3.9 】

 

 

の中でも触れていますが、

 

■ 比較演算子                     

 

■ 論理演算子                     

 

のような判定があります。こうした判断ですが、条件抽出と同じなので、集合と同じ考え方ができます。集合については、

 

 ■ つぶやき

 

 

の中でも触れていますが、条件分岐の中での判定で、集合の中の条件抽出と、発生条件の一致や、数値での判定を実装する場合には、上記の判定を実装します。ロジックエディタでは、この判定を行うのがコントローラーになります。

 

 

■ コントローラー                   

 

 コントローラーでは、

 

 

のように論理回路で使用する判定が網羅されていますが、式を組むことで判定を行う事ができます。

 

 また、センサーとアクチュエーターの値を変数として使用してPythonで制御できるので、複雑なロジックの場合だと、UPBGEの仕様に準じた記述のPythonスクリプトで制御をまとめて記述を行ってロジックを簡素化することもできます。

 

 

■ 処理を実装する                  

 

 プログラミング言語を使って挙動を実装する場合、入力などの処理がない物を最初に学習しますが、 【 処理の実装 】 を一番最初に行います。これは、Scratchでもそうですが、HellomWorld! を出力する為のコードも処理によってプログラムが動くことを知る時に一番最初に学習する物になります。

 

 Python 3.xだと、この 【 HellomWorld! 】 を印字する段階で関数を使う事になりますから、Pythonを使う上では、いきなり関数が出てきます。と言っても、C言語みたいに 【 関数を実行するための道具を揃えて、関数内に処理を実装して実行する 】 と言う物ではなく、組み込み関数で処理をするので、一番最初から関数と引数を扱う事になります。

 

 これについては、

 

 ■ 関数とモジュール 【Python】

で触れていますが、挙動を実装する場合には処理を実装する必要があります。この処理を行う為の条件として入力と判定が存在する訳ですが、ロジックエディタでは、それが、センサーとコントローラーになります。

 

 ロジックエディタでは、オブジェクトに対して処理を実装する仕組みになっていますが、処理を実装する時に使用するのがアクチュエーターになります。

 

 

■ アクチュエーター                  

 

 現実世界のアクチュエーターとは、入力されたエネルギーもしくはコンピュータが出力した電気信号を、物理的運動に変換する、機械・電気回路を構成する機械要素のことですが、ロジックエディタでは、アクチュエーターになります。デバイスの制御をする場合、ロジックエディタと考え方と名称も同じなので、ごく自然な制御とも言えますが、

 

 

のような選択肢があります。ここでは、 【 動作 】 を実装できるので、 【 何を実行するのか? 】 を指定する事になります。

 

 

 理と構造                      

 

 処理を行う場合ですが、基本的に、動作は、 【 状態変化 】 ですから、【 始点 】 と 【 終点 】 が存在しますから、時間軸では任意の変域を用意した範囲で存在するこのに展開の変化を撮る事になります。

 

 その時の推移が 【 状態変化 】 になりますが、挙動は連動していますから、最小単位での時間軸での、推移の平均値がその時の瞬間的な挙動とみなす事ができます。この 【 挙動/時間 】 と言う係数を用いて、時間を指しよう単位にした時に挙動の集合体が推移と言う事になります。この時の最小単位を極限と言いますが、この考え方が微分になります。制御工学や電気工学を学ぶと、電気の推移などには時間単位の挙動が存在するので、論理回路はあくまでも設計図でしかなく、実際の挙動は動作させた時の推移も含めた物になります。その時に、 【 電圧/時間 】 のような挙動を考えた場合、この推移の最小単位は極限になりますから、推移が存在する物を扱う場合には、係数として微分を含めた式の構造になっています。

 

 グラフについては、小学校6年生で反比例を学習し、中学校3年生になると二次関数を学習しますが、この時に登場するのは一次関数のような直線ではなく曲線です。ただし、曲線も 【 極限レベルの頂点の集合体 】 として考えると、多角形の一種とみなす事が出来るので、極限として扱う事ができます。つまり、細分化した正多角形の斜辺の推移を求めると、その曲線の推移に一致する(多角形の精度によって、精度は異なる物の現実世界では近似値を出せる)わけです。

 

 つまり、三角形の斜辺の集合体として曲線を考えた場合、斜辺の長さを出す術があれば、曲線の辺の推移を表現できるわけです。その為、一次関数のような動きで二次関数や分数の関数や三角関数のグラフのような曲線を扱えるようになります。

 

 高校の数学では、三角関数や複素数平面のように斜線の長さを出す術がありますし、斜線の推移については、幾何ベクトルも二点の差や線の長さを三角関数と合わせる事で求める事が出来る物になっていますが、曲面を斜線の集合体として考えた場合、計算する事ができます。この考え方に次元を拡張すると三次元でも対応できるようになりますが、ユークリッド空間上では、曲面を考える場合だと、この方法で処理する事になります。ただし、 【 極限レベルで検知氏や斜面の推移の計算 】 と言うのは難しいので、曲面を考える場合に数学ではもう少し便利な物が存在します。それが、 【 非ユークリッド空間 】 になります。計算を行う場合、中学校では負の数が登場し、高校では、複素数平面を使うときに使用する虚数iが登場しますが、この二つは、前者が 【 推移でしか見る事の出来ないもの 】 であり、後者に浸っては、 【 数直線上に存在しない物 】 ですから、計算を行う上において便利な物だから使用されている物になります。この非ユークリッド空間についても 【 人の日常では存在しない空間 】 なので、数学上で使用する 【 演算処理を簡素にして解を求めやすくするための空間 】 になります。こうした空間と同じく、計算を簡素にするために使用するものとして、制御工学で使用する 【 ラプラス空間 】 がありますが、演算を行う上に式の簡素化をし計算の総数を減らす為に、存在しない物を使う事がありますが、目で見える物の推移については、人が実装している感覚器官で取得できる情報を基準としている訳ですが、動きについては、視覚情報を基準としたデータの推移になります。

(とは言っても、この推移で使用している係数として存在している時間と言う物については、人は知識と尺度で検知しているだけで、感覚器官で得るような体感的な推移を直接感じている訳ではありません。動きについては、視覚情報でビジュアライズされていますし、音も聴覚で検知できているので、波長の推移と言う形で検知していますが、時間の推移と言うのは、惑星の周期などの尺度を基準にして判断していますから、視聴覚などで検知できる物とは異なる特殊な物になります。)

 

 基本的に推移には時間と動きがありますが、これは、古典力学の運動法則の第二法則によって定義されていますが、この記述の仕様が微分の考え方と同じになります。

 

 挙動が微細な一次関数のグラフの集積として考えた時に、必ず始まりの場所である 【 特異点 】 が存在しているはずですから、そこを基準に推移によって発生する結果が存在している訳ですが、

 

始点の状態に対して推移を与えた場合結果となって帰ってくる

 

ので、挙動の発生と終焉の部分を切り取った変域の0地点の状態を決めておく必要があります。動くものを作る場合だと座標などで考える事になりますが、人が扱う物の場合、次元を司る数直線全体ではなく、数直線の中に存在する部分的な物なので、変域を設けて使用しているので、始点と終点は存在する訳です。そして、人が認知できる瞬間的な現在と言う時間軸と空間上の状態が 【 現状 】 と言う状態ですから、推移の場合、この認知可能な座標からの変化を考える事になります。

 

 プログラミングを行う場合、理想空間上に変域を設けて多次元を構築して推移を実装する訳ですが、動作が存在するので、変域の最小値を設ける必要が出てきます。この時に称するのが 【 初期値 】 になります。

 

 小学校1年生のさんすうでは、【 かずのせん 】 を使って足し算を学習しますが、この時に幾何ベクトルのように 【 原点からの距離 】 に対して、 【 数値の場所からの推移 】 を取り扱う事になります。この二つの数値は、方向を持たないベクトルの長さと同じですから推移には必ず始点が存在しています。この時に、

 

   元の数値の始点    : 原点(グローバル座標)

   加算する数値の始点 : 最初の数値(ローカル座標)

 

になりますが、巣値が存在するという状態でも 【 かずのせん 】 や 【 数直線 】 で示す場合には、原点から終点までの距離になるので、始点が必要になり、複数のベクトルのように推移が連続して存在する場合だと、ベクトルの構成要素として始点と終点が必ず1セットで存在する事が前提条件となります。

 

 この幾何ベクトルのような状態が座標上での出来事になりますが、プログラミング言語を使って処理を実装する時には、変数を使って初期値の指定をします。

 

 

■ 変数                         

 

 変数については、

 

 ■ Scratch : 変数の宣言と利用

 

で触れていますが、変数の概念は中学校1年生の数学で登場しますが、中学校から 【 関数 】 を学習しますが、この恒等式で使用する任意の数値を代入できる物が 【 変数 】 になります。

 

 プログラミング言語を使ってアプリケーションを作る場合、スタート時の状態は常に同じにしておく必要があるので、初期値を決めておく必要がありますが、この時に 【 定数 】 を用意して初期値を指定する事になります。その後、レイアウトのように推移しない物は定数項の宣言のような方法で扱い、推移が発生する物については、変数項で処理をすることになります。

 

 ロジックエディタもオブジェクトに対して変数を実装する事が出来るのですが、この時の変数の宣言は、プロパティで行います。

 

 

■ プロパティ                     

  

 ロジックエディタのプロパティは、変数の格納ができますが、

 

 

の場所で行いますが、これが、プログラムの内部処理で使用されていて見えない状態で動いている数値の推移で使うと変数になります。

 

 そう言った数値の変化で使用する変数はここで使用する事になりますが、オブジェクトの移動などは変数の宣言の必要がないので、ロジック内で使用するもので、ロジックの中には存在しない物を実装する時に使用する事になります。

 

 プロパティにはテキストオブジェクトのみに対応したゲームテキストプロパティが存在しますが、これを用いると、数値の推移をゲーム内に実装する事が出来るようになります。

 

 

 ―ム画面の構造                 

 

 3DCGを使ったゲームの場合、パースが付いた画面構成にすると、ゲーム自体はその視点で問題がないのですが、スコア表示などについては、パースが付くと困るので、文字情報やウインドウなどはカメラのパースが付かないようにする必要があります。Blender 2.79bの時代のBGEだと異なるカメラの設定のを行って合成する必要があります。

 

 UPBGEも0.2.5はそれが出来るのですが、ゲーム、シーン内のオブジェクトの挙動で成立しているので、個別のオブジェクトをどう配置して動かすのか?を決めていく事になります。

 

 PythonでTkを使う場合もフォーム内にオブジェクトを指定して挙動を実装する流れになりますが、

 

 ■ ウィジェットを使う(画像の表示) 【 Python 】

のように一つの構造物の中に別の物を配置して使用する事になります。こうした作り方はゲームも同じですが、3DCGを用いたゲームの場合だと、 【 視野角の変化 】 によって 【 パース 】 が付きますから、【 並行投影 】 と 【 パースの付いた投影法 】 を組み合わせて使う事になります。

 

 

 力と選択                     

 

 ゲームの場合、入力が発生しますが、プレイヤーが操作をする場合、コンピューターを使うときと同じように、周辺機器からの信号で動かす事になります。UPBGEでは、

 

    ジョイスティック

    キーボード

    マウス

 

の操作に対応しています。これは入力なので、条件の判定はセンサーで行う事になります。

 

■ ジョイスティック                    

 

 ジョイスティックを選択すると、

 

 

のようになりますが、ゲームパッドなどの入力機材で操作する時にはこのロジックを用います。ジョイスティックで用意されている操作は一通り用意されているので、

 

 

のようにボタンやトリガーとスティックの状態を検知できるようになっています。スティックの場合ですが、

 

 

のように左右の選択が可能で、方向の指定もできます。

 

 

そして、しきい値の数値を変更することで入力の調整をすることができます。これは方向キーになりますが、

 

 

 

 

 

のようになり、各ボタンの選択が可能で、トリガーも

 

 

のように選択でき、

 

 

のようにアナログで動くトリガーのどちらにするのかの選択ができます。

 

 スティックの軸検知も可能で、

 

 

のように指定すると、

 

 

のように軸の状態がどちらに傾いているのかを検知できます。

 

 

■ キーボード                     

 

 キーボードは、どのキーを押したのかを判定する物になります。

 

 

プログラミング言語での判定を行う場合、2つのキーを使う場合、

 

 

のように二つの判定を用意してAND(論理積)で繋いで処理をしますが、通常は、二つの条件の同時発生の検知だと二つの条件を論理演算子を用いて処理をする事になりますが、修飾キーが使用できるので、

 

 

のように入力場所を押してPress a key の状態になっている場所でキーを押すとそのキーが指定される訳ですが、

 

    First Modifire

    Secpnd Modifire

 

の場所にキーの指定をすると、同時押しの判定を行えるので、3つのキーの同時押しまでだと一つのロジックの流れで作る事ができます。

 

 

 

 

■ マウス                        

 

 センサーでは、マウスアクションの検知もできるのですが、マウスの挙動は、

 

 

のような処理が実装できます。ボタンについては、

 

 

が用意されていますが、これは、オンクリックイベントの検知になります。このほかにも、

 

 

のようにマウスの移動を検知する物もあります。そして、ホイールの動きも検知できるので、

 

 

のようにホイールスクロールを検知することもできます。

 

 

■ マウスカーソルの判定             

 

 マウスイベントにはカーソルがありますが、カーソルが何かに重なった時の条件も検知できるようになっています。 【 Mouse Over 】 を使うと、ロジックを実装した対象オブジェクトにカーソルが重なった時に反応します。

 

 

これとは別に、

 

 

のようにOver Anyと言う機能がありますが、これは、

 

【 任意の対象にカーソルが重なった時の検知 】

 

になります。この時の指定が、

 

 

のようになっており、

 

    特定のマテリアル

    特定のプロパティ

 

を対象にすることができます。これは名称で判定をするので、実装されている物で共通した条件がある場合、カーソルを重ねると動かす事が出来るので、プロパティの実装により異なるオブジェクトでもカーソルを重ねた時に動作するような条件を実装する事が出来るようになります。

 

 

■ 自走処理                      

 

 自動処理については、常時で指定しますが、

 

 

のようにすると、ゲームスタート直後から常に動くような処理が発生します。

 

 

 ブジェクトの挙動                 

 

 オブジェクトの挙動はアクチュエーターで指定しますが、オブジェクトの場合、

 

    ジオメトリの座標   ( ポリゴンメッシュの座標 )

    バーテックスの座標 ( 頂点の座標 )

 

の二つがあります。この二者をセンサーの条件で動かす事が出来るので、入力デバイスの操作によってオブジェクトを動かす事が出来るようになっています。

 

 ジオメトリと書かれている場合には、ポリゴンメッシュや対象オブジェクトの塊の事を指しているのですが、この場合、一つの塊なので、この塊の6DoFによる操作の指定しか出来ません。これが、ゲーム内での動作になるのですが、この指定をした場合、ジオメトリと言う一つの塊に対して

 

    軸移動

    軸回転

 

の指定をすることになります。ゲームキャラクターの動作については、頂点座用の変化によるものですから、これを行う為には、ジオメトリと言う塊が固定されていると変化がないので、ジオメトリの形状自体を変形させる必要が出てきます。

 

 この時に、頂点座標の変化を入れる事になりますが、3DCGでこれを一つ一つ行うと大変なので、骨格を入れて、その骨格に対してどの程度の影響を受けて動くのかを指定します。これを数値指定で制御する方法もありますが、もう少し直感的に行う為に、色分けした状態で度合いをコントロールします。この色を塗って影響の度合いを指定する作業が 【 ウェイトペイント 】 になりますが、ウェイトで調整して、もう少し細かく調整をする時に頂点を指定して数値をコントロールする事になりますが、キャラクターオブジェくtのセットアップ段階でこの設定を行う事になります。

 

 リグに配置されているボーンの動作に連動して適正に頂点が動くような状態にしてから、オブジェクトの動きをしてするわけですが、この時に、モーションが成立するようにフレームごとにでポーズを指定して動きを実装していく事になりますが、UPBGEでは、Blenderで実装した動画用に使用できるアクションをそのままロジックで呼び出して使用できるので、バーテックスの変化を時間軸で制御した物を使用できます。

 

 その為、動きの場合、

 

    キャラの座標移動

    オブジェクトの状態変化(頂点座標の変化)

 

が同時に発生しているので、これを同時に発生させて動かす必要があります。

 

 この場合、後者は最初に作っておかないと、動作させるのが大変ですから、3DCGAを作る時のようにアクションを先に用意しておいて、それを実行する事になります。一つのオブジェクトに、複数のアクションを登録する事ができますが、

 

 アクションは独立しているので、個別の処理を実装する事ができます。アクションは全体の挙動に対して手の表情を変える事も可能ですから、この場合、アクションのブレンドによって状態変化を入れる事ができます。

 

 動きについては、キーフレームでポーズを作って、

 

 

のようにカーブを使って状態変化を曲線で制御する事になりますが、動画の場合だと、登録したアクションはNLAエディタを使う事で、

 

 

のようにストリップ化ができるので、VSEで動画を扱うようにアクションの発生位置を 【 一つのアクションの塊 】 として扱う事が出来るようになっています。また、連続で実行する設定や、ブレンドもできるのでかなり自由度の高い処理が出来るようになっています。

 

 アクションについては、アクションエディタを使う事になりますが、これについては、

 

 ■ Action Editor(Blender)

で触れていますが、動画の場合、こう言った取り扱いができます。

 

 登録したアクションの実行をすると、キーの判定でそれを呼び出して指定したフレームで実行できるようになりますが、これに対してジオメトリの移動を実行することで座標の移動を実装する事が出来るようになります。

 

 この動きを、

 

    自動で実行

    操作で実行

    センサーで検知して実行

 

することが出来るようになっています。ゲーム内でのキャラクターオブジェクトの移動については、

 

    ジオメトリ

    バーテックス

 

の移動が同時に発生しているので、この二つを同時に実行する必要があります。

 

 ジオメトリにつては、モーションでコントロールするので、

 

 

のように6DoFで制御できますが、Motionには、

 

 

のようなものがあり、ダイナミクスでキャラクターの設定をしてキャラクターモーションを指定すると、

 

 

のようにジャンプの指定が可能になります。この設定をコリジョンで行いますが、高さや回数などの指定が出来るようになっています。

 

 これとは別にサーボもあるので、位置や回転を制御する事が出来ます。

 

 

これが、ジオメトリの座標の6DoFの制御になりますが、バーテックスの制御だと、会うションでコントロールする事になります。

 

 

 アクションでは、

 

    登録済みのアクション

    開始フレーム

    終了フレーム

 

を指定する事にありますが、どう言った形で実行するのか?を指定しますこの時に、

 

 

の中から選択して実行する事になります。

 

                               

 

 ゲーム内の構造物には、動きの有無が存在しますが、動かない物を実装する時には、そのままでいいのですが、動くものを実装する場合には

 

    常に動いている物(常時)

    操作する物(入力デバイスの検知)

    検知して動く物(センサーでの検知)

 

がありますが、これを用いて、キャラクターオブジェクトを動かす場合、モーションとアクションで制御する事になります。