[Unity] 属性・条件文・Delegateなど

配列・リスト:https://yoshitomiunity.com/?p=52
数値・文字列(Mathf, ToString):https://yoshitomiunity.com/?p=87
オブジェクト(色変更、透過、点滅、生成など):https://yoshitomiunity.com/?p=57

アクセス修飾子

public void Check1(){//ライブラリ内外問わずアクセス可能

}
private void Check2(){//同じクラス内、または同じ構造体内からアクセス可能

}
protected void Check3(){//同じクラス内、または派生したクラスからアクセス可能

}
internal void Check4(){//同じライブラリないからアクセス可能

}
protected internal void Check5(){//同じライブラリ内と、別のライブラリの派生クラス内からアクセス可能

}
private protected void Check6(){//同じクラス内、または派生した同じライブラリないからアクセス可能

}

属性(Attribute)

SerializeField

インスペクター上で編集できるようになる。privateにしていてもインスペクター上に表示され編集可能。

[SerializeField] public int money;
[SerializeField] private int level;
HideInInspector

インスペクター上で編集できないようにする。publicにしていても表示されない。

[HideInInspector] public int money;
Tooltip

インスペクター上でマウスカーソルを合わせると説明文を表示できるようになる。

[Tooltip("これは体力です")] public int hp = 100;
Range

数値変数に対して最小値と最大値を設定できる。

[Range(0, 100)] public int hp = 100;
Header, Space

インスペクター上にヘッダー文字を入れられる。
インスペクター上にスペースを作成できる。
どちらもインスペクターの見やすさ向上

[Header("Name")] public string humanName = "Huuman";
[Space(10)] public int hp = 100;
ExecuteAlways

実行中だけではなく、Editorで操作している間にも実行される。
デバッグなどで使用する機会が多くビルドしたものには適用されない。
エディタのリソースが取られるため注意が必要。

//このスクリプトをオブジェクトにアタッチすると実行していなくてもログが流れる
[ExecuteAlways]
void Update()
{
    Debug.Log("何か確認したい変数" + hensu);
}

if・for・foreach・while

ガード節

ネストが深くなると可読性が落ちるので、それを避けるために条件に合うのであれば次の条件を見るのではなく、条件に合わないならreturnする

public void CheckNumber(){
    if(number == 0){
        if(number == 1){
            //チェックする処理
        }
    }
}

//条件に合わない場合はreturnでメソッドを終了させる
public void CheckNumber(){
    if(number != 0)return;
    if(number != 1)return;
    //チェックする処理
}
for
int forNum = 3;

//forNumの回数中の処理を繰り返す
for(int h = 0; h < forNum; h++)
{
    //ここに処理をかく
    Debug.Log("forNumの数処理できます");
}

//リストや配列の逆の順番に処理したい時なども使えます
//>や<を間違えたりするとunity落ちるので気をつけてください(プロジェクトの保存を忘れずに)
for(int h = 10; h > forNum; h--)
{
    //ここに処理をかく
    Debug.Log("(10 - forNum)の回数処理できます");
}
foreach – 読み取り専用(要素変更には注意が必要)
List<string> list = new List<string>;

foreach (string f in list) {
    Console.WriteLine(f);
}
while
//while
switch
int number;
float _numInt = 0;

switch(number)
{
   //0
   case 0: case 1: 
   {_numInt = 1.00f; break;}
   //1
   case 2: case 3:
   {_numInt = 1.05f; break;}
   //2
   case 4: case 5: case 6:
   {_numInt = 1.07f; break;}
   default:
   {_numInt = 1.00f; break;}
}

Delegate

命名は個人的にわかるようにつけているものです

public delegate void DelVoid();
public delegate int DelInt();
public delegate int DelIntInt(int _num);

public class DelegateManager : MonoBehaviour
{
  //変数を作成
  public DelVoid GoInventory;
  public DelInt GetInventoryLength;
  public DelIntInt GetInventoryNumber;
  public DelVoid delAry = new DelVoid[10];
  
  //配列にセットするメソッド
  public void SetDelegate(DelVoid _delegate, int _arrayNum) 
  {
        delAry[_arrayNum] = _delegate;
  }
}
public class InventoryManager : MonoBehaviour
{
  DeleGateManager del; //DeleGateManagerをアタッチ
  int[] inventory = new int[10];
  GameObject inventoryPanel;

  void Start()
  {
    //変数に格納
    del.GoInventory = GoInventory;
    del.GetInventoryLength = GoInventory;
    del.GetInventoryNumber = GetInventoryNumber;
    //配列の0番目に格納
    del.SetDelegate(GoInventory, 0);

    //呼ぶとき
    del.GoInventory();
    del.GetInventoryNumber(2);
    del.delConItemAry[0].Invoke();
  }

  public void GoInventory()
  {
    inventoryPanel.SetActive(true);
  }
  public int GetInventoryLength()
  {
    return inventory.Length;
  }
  public int GetInventoryNumber(int _num)
  {
    return inventory[_num];
  }
}  

DelegateManagerをアタッチしているスクリプトなら
del.GoInventory();
del.GetInventoryNumber(2);
など格納しているメソッドを呼び出すことができます。

コメント

タイトルとURLをコピーしました