Appearance
object对象
对象是什么
对象就是根据类创建出来的“真实实例”。
ItemData potion = new ItemData(1, "药水");这里:
ItemData是类,也就是蓝图new ItemData(...)创建对象potion是变量,保存这个对象的引用
class 和 object 的关系
c
public class PlayerData
{
public int Hp;
public string Name;
}创建两个对象:
c
PlayerData a = new PlayerData();
PlayerData b = new PlayerData();
a.Hp = 100;
b.Hp = 50;a 和 b 都来自 PlayerData 这个类,但它们是两个不同对象,各自有自己的数据。
引用很重要
类对象是引用类型:
c
PlayerData a = new PlayerData();
PlayerData b = a;
b.Hp = 50;
Debug.Log(a.Hp); // 也是 50因为 b = a 不是复制一个新对象,而是让 b 指向同一个对象。
小写 object 类型
C# 里还有一个小写 object 类型,它等价于 System.Object,是所有类型的根类型。
c
object a = "Hello";
object b = 123;
object c = new ItemData(1, "药水");但新手不要滥用 object,因为它太宽泛,取出来时经常要强制转换:
c
string text = (string)a;
int number = (int)b;Unity 玩法代码里,能用具体类型就用具体类型:
c
ItemData data;
GameObject enemy;
Rigidbody rb;Unity 的 GameObject
GameObject 不是 C# 的 object 类型。 它是 Unity 场景里的对象容器。
c
[SerializeField] private GameObject enemyPrefab;
GameObject enemy = Instantiate(enemyPrefab);组件对象要用 GetComponent 拿:
c
Rigidbody rb = GetComponent<Rigidbody>();
PlayerHealth hp = GetComponent<PlayerHealth>();新手口诀
class 是蓝图/模板。 object 是实例。 变量保存的是对象引用。 null 表示没有指向任何对象。 C# 的 object 是根类型,不要当万能盒滥用。 Unity 的 GameObject 是场景对象容器,不等于 C# 的 object 类型。
参考链接: