MenuBar

アクションテーブルを作る

ActionTable.png

アクションテーブルというのは、キャラクターの一つ一つの動作に関する定義をまとめたものです。
通常、1つのアクションに1つのモーションが設定されます。
さらに、パンチのアクションだったら、攻撃のヒットフレームの設定や、ブレンドフレームの設定、次のアクションの設定などをします。
(次のアクションというのは、例えばパンチが終わったら、構えに戻るとか)

今回は例として、構え、ダンスA、ダンスB、ダンスCというアクションを作り、アクションテーブルとして保存します。
マウスクリックしたら、ダンスA→ダンスB→ダンスCというように切り替わるようにしたいと思います。
(Kamaeのアクション設定として、IsLoop?にチェックを入れておいたほうが良いです)

アクションテーブルの作り方

「ゲーム」メニューから、アクションテーブルを選びます。
ActionTableEditor?が現れるので、一番上のActionTable?項目の、Addボタンを押します。
名前は、任意ですが、とりあえずStandardとします。
次に、ActionList?から、AddAction?ボタンを押して、Kamaeというアクションを作ります。
下の表に、アクションが追加されるので、そこのMotion項目にモーションをD&Dするか、もしくは項目をクリックしてモーションファイルを指定します。
そうすることで、アクションを作り出すことができます。
続けて、AddAction?して、DanceA,DanceB,DanceCと同様の操作で作っていきます。
それぞれモーションも適切に設定しましょう。
ここまでできたら、「ゲーム」メニューからアクション設定保存して、アクションテーブルを保存しておきます。
次回からは、アクション設定読み込みでここまでの作業を復元できます。

プログラムを書く

プラグインを作ろうを参考にして、プログラムを書きます。
とりあえず、下記のように書くと、クリックするたびに、DanceA,DanceB,DanceCというようにモーションが切り替わっていきます。
これでできた、dllをSystemフォルダに入れると、「ゲーム」メニューからゲームシステムを選べるようになります。
ジョニーなどを出して、ゲームシステム(下記の場合クリックアクションゲーム)を選んで、先ほどのアクションテーブルを読み込みます。
それから、ゲームスタートをすると、開始されます。
(このプログラムを書かなくても、同じプログラムがβ4.25では入っているので、クリックアクションゲームを選択できます)


   // アクションコントロール
   class ActionControlClick : ActionControl
   {
       string[] actionNames = new string[]
       {
           "DanceA",
           "DanceB",
           "DanceC",
       };
       int m_actionID = 0;
       public ActionControlClick(Actor actor)
           : base(actor)
       { }
       public override void InitAfter()
       {
           Actor.IsHaraMove = false;
           Actor.ShiftNoBlend(Actor.GetAction("Kamae"));
       }
       public override void UpdateAction(float prevFrame, float curFrame, float elapsed)
       {
           if (MouseControl.Instance.IsPress(MouseControl.EButton.LButton))
           {
               Actor.ShiftAction(Actor.GetAction(actionNames[m_actionID]));
               ++m_actionID;
               m_actionID %= actionNames.Length;
           }
       }
       public override void PlayMotionAndMove(float elapsed)
       {
           // アクションモード
           MotionResult mResult = Actor.PlayMotion(elapsed);
           // チェンジボディの適用
           Vector3 haraCtr = Skeleton.Center;
           mResult.Move *= Skeleton.ApplyChangeBodyMotionMove(false);
           if ((Actor.IsPrevHara0 == true))
           {
               mResult.Move.Y += haraCtr.Y - Skeleton.Center.Y;
           }
           // 地面コリジョン
           Matrix matChar = Skeleton.Matrix;
           Vector3.TransformNormal(ref mResult.Move, ref matChar, out mResult.Move);
           Actor.NextMove += mResult.Move;
           UpdatePosition(elapsed);
       }
   }
   [LaName("ClickActionGame")]
   [LaLanguage("ja-JP","クリックアクションゲーム")]
   public class ClickActionGame : LaGameSystem
   {
       public override string Name
       {
           get
           {
               return "ClickActionGame";
           }
       }
       public override bool Start(Scene scene)
       {
           foreach (Actor a in scene.Actors)
           {
               if (a.Group == Actor.EGroup.Player)
               {
                   a.ActionTables.Clear();
                   foreach (KeyValuePair<string, ActionTable> table in scene.ActionTables)
                   {
                       a.ActionTables.Add(table.Key, table.Value);
                   }
                   a.ActionControl = new ActionControlClick(a);
               }
           }
           return true;
       }
       public override void Update(float elapsed)
       {
       }
   }

ゲームスタート

ゲームスタートして、遊んでからゲーム終了します。
すると、それまで遊んだ結果のモーションが再生でき、モーションの保存もできます。
最高です!


添付ファイル: fileActionTable.png 254件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-05-25 (月) 22:01:51 (764d)