コンテンツにスキップ

プログラムの形

書き方説明
struct NsHelper { ... }同じファイルの補助の型
namespace Sample { ... }名前空間の宣言
namespace Sample.Inner入れ子の名前空間
using V = UnityEngine.Vector3;別名(using エイリアス)
using static UnityEngine.Mathf;静的メンバの using
UnityEngine.Debug.Log(...)完全修飾名
public int V;どこからでも見える範囲
private int V;宣言した型の中だけの範囲
protected int V;自分と派生した型
internal int V;同じプログラムの中
protected internal int V;同じプログラム、または派生した型
private protected int V;同じプログラムで、かつ派生した型
int a = 1;内側の名前による隠蔽
int V = 1;入れ子での隠蔽
for (int i = …) { }for の変数の範囲
global::System.Int32.MaxValueグローバル名前空間の別名
nameof(value)引数の名前の文字列化
public static void Main()Main の記述
書き方説明エラー理由代わりに
1 ファイルに 2 つの具象の Behaviour1 つのファイルが 1 つのプログラムTUKI0109設計ファイルを分ける
using Tsukimi;using UdonSharp; の併記同じ綴りの型が 2 つの名前空間から見えているCS0104設計片方の using を外す
Take(int v)Take(ref int v)渡し方だけが違うオーバーロードTUKI0001未実装名前を変える(変数と引数の渡し方
1 つのファイルに具象の Behaviour を 2 つ置くと、TUKI0109 で止まります。補助の型は同居できます。

見える範囲の修飾子は 6 種すべて書けます。

Main は書けますが呼ばれません。エントリポイントは基底が宣言しているイベント(イベント)で、実行環境がそれを呼び出します。

struct / record / enum / インタフェース / 静的クラスは、同じファイルに同居できます。同居できないのは、2 つめの具象の Behaviour だけです。

using UnityEngine;
using Tsukimi;
public struct NsHelper
{
public int V;
}
public class NsWithHelper : TsukimiBehaviour
{
void Start()
{
NsHelper h = new NsHelper();
Debug.Log(h.V); // => 0
}
}
using UnityEngine;
using Tsukimi;
namespace Sample
{
public class NsBlock : TsukimiBehaviour
{
void Start()
{
Debug.Log(1); // => 1
}
}
}
using UnityEngine;
using Tsukimi;
namespace Sample.Inner
{
public class NsNested : TsukimiBehaviour
{
void Start()
{
Debug.Log(1); // => 1
}
}
}
using UnityEngine;
using Tsukimi;
using V = UnityEngine.Vector3;
public class NsAlias : TsukimiBehaviour
{
void Start()
{
V v = new V(1f, 2f, 3f);
Debug.Log(v); // => 実行環境の値
}
}
using UnityEngine;
using Tsukimi;
using static UnityEngine.Mathf;
public class NsUsingStatic : TsukimiBehaviour
{
void Start()
{
Debug.Log(Abs(-1f)); // => 実行環境の値
}
}
using Tsukimi;
public class NsQualified : TsukimiBehaviour
{
void Start()
{
UnityEngine.Debug.Log(UnityEngine.Mathf.Abs(-1f)); // => 実行環境の値
}
}

public を付けたフィールドは編集画面に出ます(属性)。

using UnityEngine;
using Tsukimi;
public class BcPublic : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 0
}
public int V;
}
using UnityEngine;
using Tsukimi;
public class BcPrivate : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 0
}
private int V;
}
using UnityEngine;
using Tsukimi;
public class BcProtected : TsukimiBehaviour
{
void Start()
{
Debug.Log(1); // => 1
}
protected int V;
}
using UnityEngine;
using Tsukimi;
public class BcInternal : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 0
}
internal int V;
}

同じプログラム、または派生した型

Section titled “同じプログラム、または派生した型”
using UnityEngine;
using Tsukimi;
public class BcProtInt : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 0
}
protected internal int V;
}

同じプログラムで、かつ派生した型

Section titled “同じプログラムで、かつ派生した型”
using UnityEngine;
using Tsukimi;
public class BcPrivProt : TsukimiBehaviour
{
void Start()
{
Debug.Log(V); // => 0
}
private protected int V;
}
using UnityEngine;
using Tsukimi;
public class BcSimpleName : TsukimiBehaviour
{
void Start()
{
int a = 1;
Debug.Log(a); // => 1
}
private int a = 2;
}
using UnityEngine;
using Tsukimi;
public class BcHideNesting : TsukimiBehaviour
{
void Start()
{
int V = 1;
Debug.Log(V); // => 1
}
private int V = 2;
}
using UnityEngine;
using Tsukimi;
public class BcForScope : TsukimiBehaviour
{
void Start()
{
for (int i = 0; i < 2; i++) { Debug.Log(i); }
for (int i = 0; i < 2; i++) { Debug.Log(i); }
}
}
// 出力
// 0
// 1
// 0
// 1
using UnityEngine;
using Tsukimi;
public class BcGlobalQual : TsukimiBehaviour
{
void Start()
{
Debug.Log(global::System.Int32.MaxValue); // => 2147483647
}
}
using UnityEngine;
using Tsukimi;
public class BcNameofParam : TsukimiBehaviour
{
void Start()
{
Debug.Log(Take(1)); // => "value"
}
private string Take(int value) { return nameof(value); }
}

Main は書けますが、実行環境は呼びません。プログラムのエントリポイントは、基底が宣言しているイベントです。

using UnityEngine;
using Tsukimi;
public class BcMain : TsukimiBehaviour
{
void Start()
{
Debug.Log(1); // => 1
}
public static void Main() { }
}