Unity ターン制[No.2]

  • クリックを検出

  • name変数を使う

  • prefabを扱う

  • 別のクラスのメソッドを使えるようにする

  • オブジェクトを削除する

  • SEを鳴らす

  • シングルトン

  • コルーチン

クリックを検出

  1. prefabにコライダーをつける 例Box Collider2D

  2. カメラにRAYをつける 例Physics 2D Raycaster

  3. prefabにイベントトリガーを付けて関数を紐づける 例Event TriggerのPointer Click

  4. 関数の中身は自身につけているがスクリプトを使える

name変数を使う

public new string name;と宣言して上書きする

prefabを扱う

  1. prefabを定義する

  2. prefabのインスタンスを生成する

  3. prefabからスクリプト(コンポーネント)を取得する

public GameObject prefab;

GameObject Obj = Instantiate(enemyPrefab);
Script script = obj.GetComponent<Script>();

別のクラスのメソッドを使えるようにする

  1. メソッドを入れる変数を用意する

  2. メソッドを登録するメソッドを用意する

登録がわ
Action action; //空のメソッドを定義

//登録用
public void AddEventListenerAction(Action addAction){
    action += addAction;
}
登録したい関数がある
public Script script; //登録がわを取得

//登録用のメソッドを使う
script.AddEventListenerAction(Action);

public void Action(){
    //メソッドの中身
}

オブジェクトを削除する

public Script script //削除したいオブジェクトのスクリプトを取得する

Destroy(script.gameObject);

SEを鳴らす

  1. AudioSourceコンポーネントを用意する

public AudioSource audioSourceSE;//AudioSourceコンポーネントを入れる
public AudioClip audioClip; //SEの音源を入れる

public void PlaySE(){
    audioSourceSE.PlayOneShot(audioClip);
}

シングルトン

ゲーム内に1つしか存在しない物。シーン間でのデータが共有できる
シングルトンでSoundManagerを作ることでシーンが遷移しても音が止まらない

  1. シングルトンのコードを定義

  2. SoundManagerをprefab化して各シーンに配置

public static SoundManager instance;//シングルトンを定義

    private void Awake() {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(this.gameObject);
        }else{
            //2つ存在したら片方を破壊するようにしている
            Destroy(this.gameObject);
        }
    }

    public AudioSource audioSourceSE;//SEのスピーカー
    public AudioClip audioClip;//SEの素材

    public void PlaySE(){
        audioSourceSE.PlayOneShot(audioClip);

    }

コルーチン

  1. コルーチンを定義する

  2. 停止時間を設定する

  3. 連打してもいいように全てのコルーチンを最初に停止する

  4. StartCoroutineで呼び出す

   private void Start() {
        StopAllCoroutines();
        StartCoroutine(SampleCol());
    }

    IEnumerator SampleCol(){
        Debug.Log("コルーチン開始");
        yield return new WaitForSeconds(2f);
        Debug.Log("2秒経過");
    }

この記事が気に入ったらサポートをしてみませんか?