2017年3月12日日曜日

MachineCraftスクリプト機能(C#)の基本(その2):スクリプトを動かす

前回のトピックでは、スクリプトのリファレンスを記したテキストファイルが
どこにあるかを示した。今回は、スクリプトの用意の仕方について述べていく。
(本件で用いるスクリプト言語はC#とする。)

C#スクリプトをモデルに適用するまでの手順を大きく分けると、以下の3
ステップである。ステップごとに順を追って説明する。
  1. モデルを作成
  2. _scriptフォルダにスクリプトを用意
  3. 1. で用意したモデルにスクリプトを適用

1. モデルを作成

今回はSampleモデルであるBasic1を用いて説明する。
Load→_samples→Basic1を選択し、Copyをクリックして頂ければOK。

名前は、Basic1_testとした。名前欄をクリックすれば編集できるようになるハズ。

2. _scriptフォルダにスクリプトを用意

モデルを用意したところで、少しゲーム画面から離れていただきたい。
フルスクリーンでゲームしている方がいたら、OPTION→VIDEO→FullScreen
の順でクリックしてもらいたい。作業が楽になると思う。

準備ができたら、前回トピックでも述べた_scriptフォルダを開いてもらいたい。
おそらく、
"Steam\steamapps\common\MachineCraft\UserData\_scripts"
にあると思う。MachineCraftのインストール場所を変えている人は、MachineCraft
フォルダの傘下を参照してもらいたい。

次に、そのフォルダにある"Empty.cs"ファイルを探してほしい。見つけたら、
そのファイルを同フォルダにコピー&ペーストして、ファイル名は"test.cs"
にしてもらいたい。

以上の作業が終わったら、お待ちかねのスクリプト作成に入る。好きなテキスト
エディタで"ShowString.cs"ファイルを開いてほしい。なお、私はSublimeText
をプログラム作成に使っているが、初心者であればTerapadなどのシンプルな
エディタを使うとよい。

こんなプログラムがすでに用意されているはずだ。

このプログラムは、"開始処理(OnStart関数)"と"更新処理(OnUpdate関数)"において
ゲームのフレーム数を表示するといったもの。今回は"ap.Log~"と"ap.Print~"を
それぞれ削除してもらいたい。

MachineCraftにおいて、プログラムの流れの筋は"OnStart関数"と"OnUpdate関数"
に記述していく。開いたプログラムに書いてある通り、OnStart関数はモデルが
ワールドに入った瞬間のみで実行される関数で、OnUpdate関数はフレーム毎に
何度も実行される関数である。
Arduinoで何かプログラムを書いた人であれば、"setup関数"と
"Update関数"とほぼ同じ立ち位置であると説明したほうが早いかもしれない。

なお今回のプログラム作成は、理解することよりも「とりあえず動かす」ことを
優先したいため、プログラムの意味しているところは適宜省略していく。

今回は、以下に示すプログラムを書いてもらいたい。現段階ではすべておまじないで
良い。ただし注意してもらいたいのは、GetUserName関数の"UserName"を自分
のものに変えておかないといけない。これはゲーム上で他ユーザなどに不正な行為
をさせないための予防措置と、作者は述べている。

つまり、タイトル画面の上部にある自分にユーザ名に差し替えればよい。
私の名前がhenjin0であるため、決してhenjin0と書かないでくださいな。





プログラムを用意できたら、ファイルを保存してもらいたい。
ここで重要なのが、保存時の文字コードだ。必ずUTF-8にすること

3. 1.で用意したモデルにスクリプトを適用

本節では、2節で用意したプログラムを1節のモデルに適用する作業を述べる。

MachineCraftのタイトル画面でBuildをクリックしてBuild画面に遷移してほしい。
画面遷移が終わったら、TABキーを押して、ADVANCEDをクリックしてほしい。
そこでテキストボックスがでてくるから、そこにファイル名(拡張子除く)を
入力してほしい。今回であれば、"test"とだけ入力すればいい。


以上の作業が完了したら、TESTをクリックする。
こんな画面が出てきたら、プログラムの動作は正常だ。




緑文字がap.Log関数、白文字がap.Print関数で記述した内容である。
緑文字の方は、開始直後に表示されて、すぐに消えてしまったハズだ。

ap.Log関数もap.Print関数も、どちらも文字列を表示する関数だが、
表示位置のほかにも表示される寿命が違う。試しにOnStart関数の中に
"ap.Print(3,"OnStart");"と記述すれば、文字列は残り続ける。

こう見ると、ap.Printのみを使っていけば良いようなイメージを持つ
かもしれないが、ap.Print関数は、0~9行しか書けない。それも、勝手に
改行してくれるわけではなく"ap.Print(n,"hogehoge");"とあらかじめに
プログラムで用意しなくてはならない。

そのため、文字列の表示に関しては以上の長短を考えて使ったほうがよさそうだ。

話が脱線してしまったが、プログラムを作るフローとしては以上である。
ちなみに、プログラムがモデルに組み込まれるタイミングはワールドに
出た直後なため、プログラムが用意できたら

TEST→EXIT→プログラム編集→TEST→EXIT→プログラム編集→...

と繰り返しながらデバッグしていけばよい。
次回はapオブジェクト(AutoPilotクラス)について述べていく。

0 件のコメント:

コメントを投稿