下のソースコードはScriptableObjectを継承したクラスEnemyDataにあるフィールドの値をコンソールに表示しているそうです。
「クラスの中身を利用したければnewでインスタンスを生成しなければならない」と思っているのですが、下のソースコードではnewせずEnemyDataの中身を利用しているようです。
public EnemyData enemyData;と定義したらenemyData = new EnemyData();とインスタンス化しなければデータを扱えないと考えてしまうのですが・・・どういうことなんでしょうか?
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ScriptableCharaController : MonoBehaviour { 6 7 public EnemyData enemyData; 8 9 void Start(){ 10 ShowScriptableObjectData(); 11 } 12 13 void Update(){ 14 15 } 16 17 void ShowScriptableObjectData(){ 18 // 参照しているEnemyDataの中身をコンソールに表示する 19 Debug.Log("私の名前は" + enemyData.enemyName + 20 ", 最大HPは" + enemyData.maxHp + 21 ", 攻撃力は" + enemyData.atk + 22 ", 防御力は" + enemyData.def + 23 ", 経験値は" + enemyData.exp + 24 ", ゴールドは" + enemyData.gold + "です。"); 25 }
下は参照先のEnemyDataクラスです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[CreateAssetMenu(menuName = "MyScriptable/Create EnemyData")] 6public class EnemyData : ScriptableObject { 7 public string enemyName; 8 public int maxHp; 9 public int atk; 10 public int def; 11 public int exp; 12 public int gold; 13}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/19 12:44