はじめに
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追記)
説明をわかりやすくするために、さらに簡潔にしました。