具体的にしたいことは、
スキルボタンを押したときに、スキルデータを取得して、
そのスキルデータからスキル演出(コルーチンというかメソッド?もしくはクラス)を取得して、
それを味方2→敵1や、敵3→味方4など、最低でも使用者と対象者を指定しつつ、コルーチンの実行がしたいです。
他にも引数を渡すことになるかもしれないので、できればint[]で引数を渡すようなことはできればしたくないです。
それを実現しようとして私が思いついたのはタイトルの方法、
スキルデータであるスクリプタブルオブジェクトにスキル名を設定し、そのスキル名+Effect等で名前を指定してクラスを呼び出し、そこのEffectコルーチンを使う。というものだったのですが、タイトル以外の方法でも構いません。
ただ、余韻を残してダメージ判定したり、連続ダメージの判定できたりするように、コルーチンは使いたいと思っています。
どなたかご教授お願いします。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SceneManager : MonoBehaviour { //利用する側のスクリプト public void DrawButton() { Sprite buttonSprite = Resources.Load<Sprite>("buttonGraphic"); Vector3 position = new Vector3(0, 0, 0); //↓これは自作した指定スプライトを描画するためのものです。一番左の引数はIDになっていて、これを使って参照できるようにしています。 PictureManager.Instance.DrawPicture(1, position, buttonSprite); } public void Start() { DrawButton(); StartCoroutine(Coroutine()); } public IEnumerator Coroutine() { DrawButton(); while (true) { yield return null; var click = PictureManager.Instance.GetClick(1);//IDを指定して、クリックされたかどうかを取得できるようになっています。 if(click == 2) { //ID1なのでPlayerDataBaseのskills[1]で取得しようと思います。 Skill skillData = PlayerDataBase.instance.skills[1]; string className = skillData.skillName + "Effect"; //ここでFireBallEffectクラスのCoroutineを呼びたいです。 yield return className.Coroutine(0,10);//呼び方がよくわからないので適当です。 break; } } yield break; } } public class PlayerDataBase : MonoBehaviour { //プレイヤーはスキルデータとかHPとか色々持ってます。 public int hp = 100; public List<Skill> skills = new List<Skill>() { null, null };//ほんとはどこかでSkillを入れますが割愛。 //シングルトン処理(省略) public static PlayerDataBase instance; } //スキル名を持ったスクリプタブルオブジェクトでスキルデータを管理しています。 public class Skill : ScriptableObject { public string skillName = ""; public int damage; } public class FireBallEffect : MonoBehaviour { //スキル演出側のスクリプト public static IEnumerator Coroutine(int caster, int target) { //ここにスキル演出を書きます。ウェイトとか入れたいのでコルーチンです。 yield break; } }
色々端折ってますが、こんな感じにしたいです。
回答2件
あなたの回答
tips
プレビュー