Space Engineers

Space Engineers

Not enough ratings
MonoDevelopでゲーム内スクリプト
By polaris80red
MonoDevelopでIngameScriptを編集するための、コードテンプレート(入力補完)ファイルの配布と解説です。
   
Award
Favorite
Favorited
Unfavorite
はじめに
このガイドでは MonoDevelopのコードテンプレート機能を活用して SpaceEngineers のゲーム内スクリプトを扱うために自作したテンプレートファイル(未完成)の配布と解説を行います。


導入前に
Space Engineers のゲーム内エディタはタブ文字を認識しないので、MonoDevelopでSpace Engineersのスクリプトを扱う場合はタブ文字を半角スペース4字に設定しておく必要があります。
コードテンプレートファイルの導入
配布場所
上記のリンク先でコードテンプレートファイルをまとめたzipファイルをダウンロードしてください。下位フォルダの個別ファイルは内容物の確認用なのでダウンロード不要です。

追加先
C:\Users\<アカウント>\AppData\Roaming\MonoDevelop-Unity-5.0\Snippets
解凍された.xmlファイルをMonoDevelopのSnippetsフォルダ直下に置いてください。
他のC#スクリプトを扱うときは邪魔になるので別フォルダに除けてください。
コードテンプレートファイルの解説
上記テンプレートファイルの、ショートカット名と展開されるテンプレートを解説します。
$名称$ で表記した部分はコードテンプレート機能による入力可能部分です。
Code template 1: CodeTemplate_SpaceEngineers.xml
基本機能?のようなファイルです。

リスト生成

newBlockList_GetBlocksOfType
List<IMyTerminalBlock> $リスト名$ = new List<IMyTerminalBlock> (); GridTerminalSystem.GetBlocksOfType<$ブロックのInterface name$>($リスト名$);

newBlockList_SearchBlocksOfName
List<IMyTerminalBlock> $リスト名$ = new List<IMyTerminalBlock> (); GridTerminalSystem.SearchBlocksOfName($文字列や文字列の変数$, $リスト名$);

newBlockList_GetBlocksOfType(var)
var $リスト名$ = new List<IMyTerminalBlock> (); GridTerminalSystem.GetBlocksOfType<$ブロックのInterface name$>($リスト名$);

newBlockList_SearchBlocksOfName(var)
var $リスト名$ = new List<IMyTerminalBlock> (); GridTerminalSystem.SearchBlocksOfName($文字列や文字列の変数$, $リスト名$);

ブロック1つを格納する変数
Block_FromList
$InterfaceName$ $Name$ = $ListName$[$ListNum$] as $InterfaceName$;
for文内や、リストの0番だけ操作すればいいCockpit系ブロックなどに。

Block_GetBlockWithName
$InterfaceName$ $Name$ = GridTerminalSystem.GetBlockWithName($searchName$) as $InterfaceName$;

Block_GetBlockWithName(var)
var $Name$ = GridTerminalSystem.GetBlockWithName($searchName$) as $InterfaceName$;

CustomNameの読み取り・書き込み
CustomName
$ターゲット$.CustomName

SetCustomName();
$ターゲット$.SetCustomName($文字列や文字列の変数$);
Code template 2: ApplyAction
ApplyAction();
$ターゲット$.ApplyAction($アクション$);

ブロック種類名なしは展開後のアクション入力時に表示される候補に"OnOff", "OnOff_On", "OnOff_Off", "UseConveyor"を設定してあります。

ブロック種類名.ApplyAction();
$ターゲット$.ApplyAction($アクション$);
ブロック種類名をつけたショートカットも展開結果は同じですが、アクション入力時の候補がブロック種類ごとの物になります。
Code template 3: SetValue
SetValue();

SetValueFloat();
$ターゲット$.SetValueFloat($プロパティ名$, $値$);

SetValueBool();
$ターゲット$.SetValueBool($プロパティ名$, $値$);
ブロック種類を指定しないSetValueBool()のプロパティ名は"UseConveyor" "ShowOnHUD"を用意しています。

ブロック種類名.SetValueFloat();
$ターゲット$.SetValueFloat($プロパティ名$, $値$);
ブロック種類名をつけたショートカットも展開結果は同じですが、プロパティ名入力時の候補がブロック種類ごとの物になります。
Code template 4: GetValue
GetValueType()
$ターゲット$.GetValue$型名$($プロパティ名$)
型名の代わりにTypeにしているショートカットは、展開後の型名入力時に候補が表示されます。

GetValueBool()
$ターゲット$.GetValueBool($プロパティ名$)
型名入力済みのショートカットは、展開後のプロパティ名入力時に候補が表示されます。
ブロック種類名なしのGetValueBool()は"UseConveyor", "ShowOnHUD"を設定してあります。

ブロック種類名.GetValue型名()
例:AirVent.GetValueBool()、Rotor.GetValueFloat() など
ブロック種類名をつけたショートカットは型名付きのもので、プロパティ名の入力時にブロック種類に応じた候補が表示されます。
Code template 5: Fields
ブロックの種類.Field
$ターゲット$.$フィールド$

ブロックの種類.Fieldで展開すると、ブロックの種類に応じたフィールド名が入力候補になります。
Code template 6: その他のテンプレートファイル
名称
内容
備考
~PublicText.xml
Text Panelの読み書き
名前やファイル構成などの変更可能性やや高め

名称のテンプレートはショートカットの個人差も小さいので、テンプレートを自作するなら上記のファイルより下記3ファイルのほうが価値があるかもしれません。
名称
内容
備考
~InterfaceName.xml
Interface name
~Name_Action.xml
アクション名
Tab1回目でショートカットが補完されて引用符なし、
2回目で引用符有りに。
~Name_Properties.xml
プロパティ名
Tab1回目でショートカットが補完されて引用符なし、
2回目で引用符有りに。
引用符付きにできる2つは、「(」の直後などではショートカットの補完までで止まってしまうので微妙に使いにくいです。

その他
名称
内容
C-Sharp_general.xml
変数型などSE用の補完に邪魔される物の入力補完
ファイル更新履歴
  • 2015-11-30: 第1版
  • 2015-12-01: リスト作成やGetActionWithNameを使えるように追加
  • 2015-12-04: テキストパネル関連などを追加、変数型などの補完を追加
  • 2015-12-11: GetValue・SetValueの修正
  • 2016-07-01: GetValue、SetValueに、サスペンション付きホイールのプロパティをいくつか追加。
  • 2017-03-11: GetActionWithNameからApplyAction に修正、フィールド用のファイルを追加。