3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

デリゲートを利用して配列に関数を格納する

Last updated at Posted at 2019-07-02

はじめに

Unityでゲームを制作中、
「関数を配列に入れて、変数1つ変えるだけで使う関数を変えたい」
と思ったんです。

具体的には、
要素0.はかいこうせん
要素1.だいもんじ
要素2.ソーラービーム

として要素1呼んだら、だいもんじみたいな...

コード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System; //追記

public class UseSkill : MonoBehaviour
{
    public int skillNum; //スキル番号
    private int skillKindNum = 3; //スキルの種類数

    private Action sFunc[]; //スキルの関数を格納する配列

    public void SkillSet()
    {
        sFunc = new Action[skillKindNum];
        sFunc[0] = Hakaikosen;
        sFunc[1] = Daimonzi;
        sFunc[2] = Solarbeam;
    }

    private void Start(){
        SkillSet();
    }

    private void Update(){
        if(Input.GetButtonDown("Fire1")){
            sFunc[skillNum]();
        }
    }

    public void Hakaikosen(){
    }
    public void Daimonzi(){
    }
    public void Solarbeam(){
    }
}

これで"Fire1"が押されたらskillNumの関数が呼び出されます。

デリゲートもラムダ式もまだ理解が浅いので、もっと楽な方法がありそうです(絶対ある)。

終わりに

Unityで、初めてのWiiのTank!のようなゲームを作っています。
github: https://github.com/Papyrustaro/UnityTankGame

プレイヤーの使うスキルを簡単に変えるために利用したのが、今回の記事です。
もっと良い書き方等ありましたら、気軽にコメントください^^

Twitterもやってます: https://twitter.com/papyrustaro

(2019/07/02 20:30追記)
Actionを利用することにより、より簡潔に書くことができました
コメントしてくださったalbireoさんありがとうございます^^

(2019/07/06 11:59追記)
説明をわかりやすくするために、さらに簡潔にしました。

3
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?