クラスで物体を指定したい
使うプログラムでプレハブを渡す
public class スライム : 敵キャラ
{
public スライム(GameObject プレハブ)
{
HP = 10;
攻撃力 = 3;
物体 = プレハブ;
}
}
使うプログラム
public GameObject スライムプレハブ;
敵 = new スライム(スライムプレハブ);
ScriptableObjectを使う
[CreateAssetMenu(menuName = "敵/スライム")]
public class スライムデータ : ScriptableObject
{
public int HP;
public int 攻撃力;
public GameObject 物体;
}
使用例
public class 敵生成 : MonoBehaviour
{
public スライムデータ slimeData;
public ゴブリンデータ goblinData;
public ゴーレムデータ golemData;
void Start()
{
敵データ 敵 = ランダム敵();
Instantiate(敵.物体, new Vector3(0,2,8), Quaternion.identity);
敵.攻撃();
}
敵データ ランダム敵()
{
int A = Random.Range(1, 4);
if (A == 1) return slimeData;
if (A == 2) return goblinData;
return golemData;
}
}
別ファイル
using UnityEngine;
public abstract class 敵データ : ScriptableObject
{
public int HP;
public int 攻撃力;
public GameObject 物体;
public abstract void 攻撃();
}
public class スライムデータ : 敵データ
{
private void OnEnable()
{
if (HP == 0) HP = 10;
if (攻撃力 == 0) 攻撃力 = 3;
}
public override void 攻撃()
{
Debug.Log("スライムの体当たり! ダメージ:" + 攻撃力);
}
}
ゴブリンやゴーレムも同じように作る
説明
if (HP == 0) HP = 10;
スクリプトテーブルはインスペクターで値を自由に変更できる
変更しても OnEnable の初期値に上書きされない(0 のときだけセット)
[CreateAssetMenu(menuName = "敵/スライムデータ")] の「敵」は “Unity のメニューに表示されるフォルダ名” であって、プログラム上のクラス名や変数名とは無関係。
自由に決めていい カテゴリー名 。

