2017年3月13日月曜日

MachineCraftスクリプト機能(C#)の基本(その3):AutoPilotについて

前回(http://henjin0antiforget.blogspot.jp/2017/03/machinecraftc.html)トピック
では、プログラムをモデルに組み込むフローについて述べた。
今回は、予定通りapオブジェクト(AutoPilotクラス)について述べていく。

ただし、今回話すトピックはクラスやオブジェクトなどについての説明ではない。
C#の文法を知るのであれば、SYODA Tuyano氏のこのサイトなどを参考にして
もらいたい。Unity 3Dに関するトピックもあるため、参考になると思う。

[初心者のためのC#プログラミング]

"http://libro.tuyano.com/index2?id=1204003"

前回のプログラムには
といったように、OnStart関数とOnUpdate関数への引数となっていた。
このapオブジェクトを使うことで、前回の文字列表示ができた。

このapオブジェクトの設計図にあたるAutoPilotクラスには、前回トピックの
Log関数やPrint関数が定義されており、MachineCraft本体との情報の
やり取りを簡便化させる役割を担っている。

ただ、AutoPilotクラスを使う上では、MachineCraft上のパラメータが必要になる。
それ故に、継承元(UserScript)で決め打ちになっているOnStart関数とOnUpdate関数
で初期化が逐次行われているのだと筆者は考える。
初期化に必要なパラメータが分からなくてもいいのは、正直ありがたい。

AutoPilotクラスで定義されている関数は、_scriptフォルダの"Luaスクリプト解説.txt"
と"C#スクリプト解説.txt"に書いてある。重要なのが、書いているプログラムが
C#スクリプトでも"Luaスクリプト解説.txt"の関数群が全て使えるということ。
ただし、関数を使うときにはC#の文法に則ってap.func()にする。

以上がapオブジェクト(AutoPilotクラス)についての説明だ。
次回は、モデルの状況をスクリプトへ反映させてみようと思う。

それにしても、継承元のUserScriptクラスはどこにあるんだろう?
ブラックボックス化されるべきスクリプトだというのは承知だけれども...

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クラス)について述べていく。

MachineCraftスクリプト機能の基本(その1):スクリプトを書く前に

前回の投稿からのつづき
MachineCraftがとにかく自由度の高いゲームだというのは、前回の記事で
ある程度把握して頂いたと思う。

今回のトピックは、MachineCraftの機能の一つであるスクリプト機能だ。

この機能は読んで字の如くスクリプトが書ける機能なのだが、これによって
マシンの動きをより一層面白くすることができる。

ただし、現段階においてこの機能は「Advanced」な機能で、ドキュメントも
あまり多くない。少なくとも手軽とは言い難いなーと。
Build→ADVANCED→ScriptNameで書いたプログラム(プログラムの格納している
フォルダ)を指定する。現段階では隠し機能みたいな気構えで良いのだろうか?


スクリプトを書いていくうえで、関門になるのがリファレンスの場所である。
関数などのリファレンスは普通であれば本家サイトか何かからリンクできるように
なっているが、Web上で探してもそれっぽいものはなかなか見当たらない。
どこにあるのかというと、インストールした先のファイルにあるのだ。
それも、txtファイルでポツンとある。


私(Ver 2.28)の場合は、"Steam\steamapps\common\MachineCraft\UserData\_scripts"
にあった。そこに"C#(Lua)スクリプト解説.txt"という名前の
テキストファイルがあるはずだ。

おそらく、まだベータ版だから公にする必要がない故の対応だと思うので、
批判する気はないが、もしスクリプトをモデルに適用したいと考えているなら
注意して頂けると幸せだ。

追伸:上記のtxtファイルには、Luaのサポートはもう切るとのことだ。注意すべし。



だいたい2.5年ぶりの更新 MachineCraftについて

タイトル通り、2.5年ぶりの更新です。

研究やグループでのシステム開発などで、完全に手がついていなかったと
言い訳したいけど、正直な話、備忘録を忘れていたというのが現状です。
ごめんなさい。

今回のトピックは以上の謝罪で終わり...ではなく、最近個人的にHotになっている
"MachineCraft"のスクリプト(C#)についても述べていきたい。

MachineCraftというのは、キューブ状のブロックを組み合わせてオレオレな
車、ミリタリーな戦車、キュートなキャラクターなどを作って、みんなでワイワイ
楽しむゲーム。キューブ上のブロックとは言ったけど、実際には直方体や
歪んだ四角錐などもつくることができて、とにかく自由度がパない。

Steamでフリー版が公開されているから、MineCraftなどのクラフトゲ―が
好きな人はぜひともプレイしてほしい。

[WikiのURL]
http://seesaawiki.jp/machinecraft/d/%A5%B2%A1%BC%A5%E0%B3%B5%CD%D7

実際、私も黄金の人生カーを作ったりして楽しんでいる。


次の投稿でモデルに加えられるスクリプトについて話そうと思う。
あと、すっぽかしてごめんなさい。

2014年9月27日土曜日

Enjoy<(。ε゜)> appcompat_v7は増え続ける

一ヶ月ぶりじゃねーかうわあああ
スイヤヘェェン!

KitKatが出始めた時から出てきた開発上の問題で死にかけたので忘備します。

4.4対応のAndroidプロジェクトを作ってると、勝手にappcompat_v7_3みたいなプロジェクト
がガンガン作られていく。

その時の対策を「appcompat_v7 エラー」とやらでぐぐってみると、やっぱり同じことで苦しめられている人が何人かいる。その中の一番手軽な内容を手順的に書いておく。

ただこの方法で留意することは、最初にでてきたappcompat_v7は消してはいけないということ。
今回の方法ではこのappcompat_v7を使いまわしていくからだ。

  1. 4.4対応のプロジェクトを2回目以降に作ると、忌まわしきappcompat_v7_*が出てくる。
  2. appcompat_v7_*を削除する。僕は「パッケージマネージャー → appcompat_v7_*プロジェクト右クリック → 削除をクリック → ディスクから削除にチェックを入れて削除」をした。
  3. 自分が作ったプロジェクトがエラー祭りになる。これはappcompat_v7_*が削除されることで中にあったパッケージをインクルードできなくなったから。
  4. エラー祭りのプロジェクトをパッケージマネージャで選択し、右クリックメニューからプロパティを選択する。
  5. 右のリストからAndroidを選択して、下の方にあるライブラリを見る。するとこのプロジェクトがappcompat_v7_*をインクルード使用としてることがわかると思う。
  6. appcompat_v7_*を選択し、削除をクリック。
  7. Addをクリックして、appcompat_v7を選択。
  8. エラーがなくなったよ!やったねたえちゃん!

画像はめんどかった。ごめん。
ただ、これでちゃんとコンパイルが通るはず。



2014年8月10日日曜日

よいよい本の紹介

 今日某所のアトレにある書店でいい本を見つけたんすよ。ええ。

 「15時間でわかるGit」っていう本なんだけど、自分が読んだGit本の中で一番わかり易い本だと思う。他のGit本を否定する気は無いんだけど、正直な話発展的な話題が多すぎるせいで導入の妨げになっている感じがあるんだよね。

 一方、上で言っていた本は凄くシンプルでわかりやすいなぁとおもったのです。なんというか文章が簡潔だったり写真が多かったり、ぶっちゃけ「やさしいC」みたいな雰囲気があって大変良い。だから正直な話、このブログを書きながらポチったわけですよ。はい







2014年8月4日月曜日

なんとなく思った事:「授業というツール」について

課題、レポート、テスト、平常授業、実習…

 まぁ高専で色々と体験した事は大量に有るんだけど、その体験って基本的に「学校のカリキュラム」で組まれたものばかりなんだよね。

 実際、課題やレポートを解く、書く力って社会でも凄く重要になるんだけど、なんというか「重要なこと成分」を凝縮しすぎた印象を感じる。特にテスト前は一層強くそんな印象を受ける。

 ぶっちゃけた話スキル向上のためにある「授業というツール」に使われている感じで正直キツイところがある。2年時の「emacs使えなくてプログラミング出来ないよー」みたいなそんな感じに近いなぁ。(今はemacsが手放せないけどね!)

 道具に使われるのは本当に非効率だし、最悪慣れるだけの労力で作業が終了するパターンだってあるから、とてもよろしくない。悪化するとモチベ下がって堕落の道へ行くかなと。

 逆に成績がいい人は、多分「授業というツール」を使いこなしている方なんだよね。もっと極端な話、教員に質問バンバンする人は教員をツールとしてバリバリ扱える人だとおもうのよ(教員の人格否定をしているわけではありません。ご了承ください)。実際にそういう人は尊敬出来るし、見習いたい。

 まぁぶっちゃけ今回の話の結論は、「授業というツールに使われないようにしないとね!」という感じ。もっと言うと「授業というツールを使いこなしてやろうね!」っていう所。まぁアバウトすぎる結論で、「じゃあどうすりゃいいのさ」って話だけど、授業によってやることなす事は変わるからなんとも言えないなぁ。基本的には「分からないなら質問する」、「分からないことを明確にするために勉強する」みたいな所かなぁ

散々言っておいてクッソ意識高すぎんぞこれ。コミュ症な自分にはとっても難しい話だ。うー