実現したいこと
Unityで弾幕STGを作りたいと思っています。
前回、抽象クラスで生成したスクリプトを動的にアタッチする方法を質問しました。(前回の質問:解決済)
次のステップとして、string型でスクリプト名を指定し、上記と同様にアタッチしたいと考えています。
発生している課題
1)抽象クラス"BulletMoveAdd"を継承した"Homing"を用意しています。
c#
1public class Homing : BulletMoveAdd{ 2 public override Vector2 ModifyDirection(Vector2 pos, Vector2 dir){ 3}
2)弾を発射する時、string型の"Homing"でインスタンスを生成し、弾にアタッチしたい。(東方弾幕風の中身を参考にしてます)
(下記のscriptNameに"Homing"を入れて、そのスクリプトをアタッチしたい)
c#
1public class Player : MonoBehaviour{ 2 ///<summary> 3 ///スクリプトで規定した弾を生成、発射します 4 ///<param name="bd">弾の種類</param> 5 ///<param name="scriptName">スクリプト名</param> 6 ///</summary> 7 public void CreateShotFromScript(BulletData bd, Vector2 shotPosition, float speed, float angle, string scriptName){ 8 GameObject bullet = BulletPool.GetBullet();//プールから弾を借りる 9 BulletController bc = bullet.GetComponent<BulletController>();//借りた弾の制御スクリプト 10 bc.BulletData = bd;//弾の種類を設定 11 12 BulletMoveAdd bma = bc.gameObject.AddComponent<"scriptName">();//ここの書き方がわからなくて困っています。 13 14 FireShot(pbc);//設定終了後、弾の発射処理を行う 15 } 16}
前回の解決コード
アタッチしたいスクリプトがあらかじめ決まっている時は、下記コードでアタッチできています。
public void SetShotDataA(BulletController bc){ BulletMoveAdd bma = bc.gameObject.AddComponent<MoveDataA>(); }
試したこと
string型からTypeを取得するGetTypeと、System.Reflectionを調べてみましたが、
使い方がよくわからずうまく実装できていません。
c#
1//??? 2System.Type type = System.Reflection.Assembly.Load("UnityEngine.dll").GetType(typeName);
どうかよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー