プログラミング/TIPS

Last-modified: 2017-11-18 (土) 13:05:06

ゲーム内プログラミング関連の情報置き場。


未整理

update 1.185時点でのCustomName

従来のブロック名書き込みのSetCustomNameで警告が出る。CustomNameプロパティに直接書き込みできる。

サンプルプログラム/警告ビーコン

beacons[i].SetCustomName("NoEntry!:"+MaxRange+"m");

これを

beacons[i].CustomName = ("NoEntry!:"+MaxRange+"m");

に修正することで警告がでなくなる。

GetValueFloat()とSetValueFloat()以外

  • 公式Steamガイドにはないが、Float型以外も同様に使用できる。
    名前備考
    SetValue
    GetValue
    GetValueBool
    SetValueBool

fieldの読み取り

リストに入れたブロックのfieldを読み取りたい場合、for文で「配列名[i]」や、foreachで型名をvarにした場合は「IMyDoor Door = list[i] as IMyDoor;」「IMyDoor Door = obj as IMyDoor;」のように取り出す処理を行わないと読み取れない。

下記の5行目のように、foreachを使用する際に変数の型名をvarにせずインターフェースネームを指定すれば、6行目のif文のようにそのままfieldを読み取ることができる。

public void Main(string argument){
   List<IMyTerminalBlock> targets = new List<IMyTerminalBlock> ();
   GridTerminalSystem.GetBlocksOfType<IMyDoor>(targets);
   foreach(IMyDoor obj in targets){
       if (obj.Open) {
           obj.GetActionWithName("Open_Off").Apply(obj);
       }else{
           obj.GetActionWithName("Open_On").Apply(obj);
       }
   }
}

Air Ventのフィールド

エアロックの制御などで重要になるがガイドにないAir Ventのフィールドについて。

  • 部屋が密閉されているか否かは「CanPressurize」
  • 減圧モードか否かは「IsDepressurizing」

Custom Dataの読み書き

  • 書き込みも可能なフィールドのような扱い。
  • フィールド名は「CustomData
  • 読み取り例
    public void Main(string argument) {
        var target = GridTerminalSystem.GetBlockWithName("LCD Panel Test") as IMyTextPanel;
    target.WritePublicText(target.CustomData, true);
}
  • 書き込み例
    public void Main(string argument) {
        var target = GridTerminalSystem.GetBlockWithName("LCD Panel Test") as IMyTextPanel;
    target.CustomData = argument;
}

関連項目

コメント