Skip to content

object对象

unity-csharp-object-system

对象是什么

对象就是根据类创建出来的“真实实例”。

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;

ab 都来自 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 类型。

参考链接:

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0