2017年3月16日木曜日

MachineCraftスクリプト機能(C#)の基本(その5):スクリプトからモデルを動かす

前回トピックでは、モデルに関する情報をスクリプト上から取得した。
今回は、得られた値からモデルを動かしてみたい。

モデルを動かすにあたって、覚えておかなければいけない関数は以下の二つである。
これらもLua解説テキストから確認できる内容である。
StartAction関数は、ASSIGNで指定した(name)アクションをduration[f]だけ実行する。
durationが-1であれば、そのアクションはソフトウェアのクラッシュや後述の
EnsAction関数などの例外を除いて実行され続ける。

EndAction関数は、StartAction関数で動いているアクションを無条件で停止させる。
この関数の説明は上述のコードの通りなため割愛するが、筆者の確認だと
キー入力されているアクションはどうやら停止できていないらしい。もし違う場合
はコメント欄やTwitterで教えてもらえるとありがたい。

確認として、StartAction関数でモデルを永遠に前進させてみようと思う。
ただし、今回は単純化のために_sampleのCarをモデルとして扱いたい。
元ファイルに手を付けたくないため、Copyをお願いしたい。


Buildをクリックして、Build画面へと遷移し、TABキー→ASSIGNでアクションの名前
を確認したい。TABキー→SETUPWheelにつながっているRotatorSで確認してもらって
もかまわない。

前者の方法であれば、こんな画面が出てくる。


"MoveF"というアクションを覚えてもらいたい。
これをStartAction関数の引数に指定する。

以上のスクリプトをCarモデルのコピーに適用して動かすと、
下の動画のような面白い状況になるかもしれない。
"MoveF"がずっと実行されている。結果としてEnemyに衝突した。

次はコメントアウトを消してEndAction関数を有効にしてみる。
結果の写真や動画は上げないが、全く動かないハズだ。

OnStart関数が実行された後にOnUpdate関数が走っているので、
StartAction関数が実行された直後にEndAction関数が実行される。
それ故に、アクション発生した直後にキャンセルされ、結果として
モデルが動かない。

一方で、Wキーを押してユーザから直接"MoveF"アクションを実行
してみると、普通に前進するハズだ。このことから、スクリプト外
のアクションに対してEndAction関数は動かないことが確認できる。

以上が、スクリプトからモデルを動かす方法である。
前回のトピックの内容を踏まえれば、いろいろな動きを作れると思う。

次回は、今までの"MachineCraftスクリプト機能(C#)の基本"
トピックの総まとめとして、速度をキープするCarを作ってみたい。

パラメータに応じてモデルを動かすということができれば、マシンクラフトの
スクリプトの書き方は一応理解できるハズ。

0 件のコメント:

コメントを投稿