前提・実現したいこと
Unity(C#)で、可変長引数&型の変わる関数を作成したいと思っております。
用途は、カードゲームの能力の実行に使いたいと思っています。
各能力で必要な引数が異なるため、どう実現するのが一番スマートなのかアドバイスをいただければ、と思います。
このまま能力を増やしていくとどんどん引数が多くなってきて、メンテナンスがしづらい関数になりそうなのです。
該当のソースコード
C#
1public IEnumerator RunAbility(string[] ability, string[] param, CardController card, UnitController unit, LandController land,bool isPlayer){ 2 // アビリティを実行する 3 int i = 0; 4 foreach(string abl in ability){ 5 // カードドロー 6 if( abl == "draw" ){ 7 yield return StartCoroutine(DrawHand(int.Parse(param[i]),isPlayer)); 8 } 9 // ユニットへのダメージ 10 else if( abl == "damage" ){ 11 yield return StartCoroutine(GameManager.instance.UnitSkillDamage(unit,int.Parse(param[i]))); 12 } 13 // 先制 14 else if( abl == "at_preemptive" ){ 15 unit.SetCanAttack(true); 16 } 17 // 土地レベルアップ 18 else if( abl == "summon_land_up" ){ 19 if(land!=null){ 20 land.LvUP(1); 21 } 22 } 23 i++; 24 } 25}
試したこと
◆可変長引数
C#
1public IEnumerator RunAbility(string[] ability, string[] param, string[] args)
←これは型変換ができないためどうしようもないように思えました。
◆ジェネリック
自分でジェネリックを組んだことがなく、初心者マークをいれるべきかどうか迷いましたが、
ジェネリックだと下記のようなクラスのメソッドをどのように呼び出せばいいのかわかりませんでした。
C#
1land.LvUP(1);
◆関数のオーバーロード
これはできそうだぞ、と思ったのですが、
今後引数がどんどん増えてきたときに最善手なのかどうかわからないでいます。
回答2件
あなたの回答
tips
プレビュー