
public 关键字和继承简介
Tutorial
Beginner
+0XP
20m
(173)
Unity Technologies

在本教程中,你将:
- 探索 public 关键字及其在代码中的作用
- 在 Unity 编辑器中创建并访问公共变量
- 探索继承和派生类的概念
完成后,你就可以为 SpawnerSample 脚本中所用的生命值药水创建自定义效果。
Languages available:
1. 了解 public 和 private 关键字之间的区别
在前一教程中,你已探索类关键字在代码组织方面的作用。在前面还出现过另一个关键字:public。在你的 SampleSpawner 脚本中,Spawner Sample 类中编写的 ObjectToSpawn 变量以 public 关键字开头。
默认情况下,类中的所有内容都是私有的。这意味着这些内容只能由类本身访问。但是,如果在类、函数或变量的前面添加 public 关键字,则其他类也可以进行访问。
你可以想象成将公共物品放在敞开的马车中以方便取放车内的物品,而将私有物品放在封闭的马车中。
2. 查看私有变量示例
让我们来看一个用于说明公共变量和私有变量之间差异的示例。
请思考以下脚本:
class Vector3
{
float x;
float y;
float z;
Vector3 otherVector;
}
此处无法在其他脚本中使用点运算符来访问浮点变量 x。
这是因为 x 没有 public 关键字,因此默认为私有变量。只有 Vector3 类中的函数可以访问这个变量。
3. 使 LootAngle 变量成为公共变量
让我们来将你的 LootAngle 构造函数和 NextAngle 函数变为公共函数以便修复 Unity 编辑器错误:
1.在 SpawnerSample 脚本中,找到 LootAngle 类中的 LootAngle 函数:
LootAngle(int increment)
{
step = increment;
angle = 0;
}2.将 public 关键字添加到函数声明中:
public LootAngle(int increment)3.在 LootAngle 函数下方,找到 NextAngle 函数:
int NextAngle()
{
int currentAngle = angle;
angle = Helpers.WrapAngle(angle + step);
return currentAngle;
}4.将 public 关键字添加到函数声明中:
public int NextAngle()5.按 Ctrl + S (Windows) 或 Cmd + S (macOS) 来保存更改。
6.返回到 Unity 编辑器,然后检查 Console 窗口中是否已清除错误。
太好了,你已经通过将构造函数和函数变为可访问状态来修复了错误!
4. 在 Unity 编辑器中访问公共变量
将类变量设为公共变量后,一个有趣的辅助效果就是你可以从 Inspector 访问这个变量。
在 SpawnerSample 脚本中,ObjectToSpawn 变量为公共变量。让我们在 Unity 编辑器中找到这个变量:
1.返回到 Unity 编辑器。
2.在 Hierarchy 中,选择 PotionSpawner 游戏对象。
3. 在 Inspector 中,找到 Spawner Sample (Script) 组件:
ObjectToSpawn 公共变量在 Inspector 中有一个字段!
当你使用 public 关键字来告诉计算机需要从其他位置访问变量时,Unity 会将这个变量显示出来,以便你(或其他人)可以在 Inspector 中更改变量的值。
5. 创建新的生成对象
你可以使用 ObjectToSpawn 公共变量将一个预制件游戏对象指定为需要生成的对象。
让我们创建另一个不同的游戏对象,用于在游戏开始时生成金钱:
1.在 Hierarchy 中,右键单击并从上下文菜单中选择 3D Object > Sphere。将新的游戏对象重命名为 MoneySpawner。
2.在 Scene 视图中,使用移动工具(快捷键:W)移动 PotionSpawner 游戏对象旁边的 MoneySpawner 游戏对象。
3.确保在 Hierarchy 中仍然选中 MoneySpawner。在 Inspector 中,选择 Add Component 按钮。搜索 Spawner Sample,然后将该脚本添加到 MoneySpawner 游戏对象。
4.在 Project 窗口中,选择 Assets/Creator Kit - Beginner Code/Prefabs/Tutorial 并查找 MoneyLoot 预制件。
5.确保在 Hierarchy 中仍然选中 MoneySpawner 游戏对象。将 MoneyLoot 预制件从 Project 窗口拖到 Inspector 中的 Object To Spawn 字段。
6.按 Ctrl + S (Windows) 或 Cmd + S (macOS) 来保存更改。
提示:如果你需要更多支持来完成这些步骤,可以返回到第一个教程并查看 Unity 编辑器复习内容。
6. 使用公开变量来调整游戏玩法
公开变量非常有用,因为通过公开变量,程序员无需编辑脚本即可调整游戏玩法。可通过这种方式来轻松调整的值包括:
- 对象的速度
- 对象在配备后可提供的生命值点数
- 敌人角色的接触点(例如各种碰撞体)
公开值非常有用,因为可以由非编码人员更改此类值。此外,还可以在 Unity 编辑器中实时调整此类值以测试和优化玩家体验。
7. 查看学习进度
你已经在这些教程中学习了很多知识,但还有一点需要了解。让我们来看看 SpawnerSample 类声明:
public class SpawnerSample : MonoBehaviour你现在已经知道这种语句的大部分含义:
- public 是一种关键字,表示此类可以由其他脚本访问
- class 是一种类型,可用于将相关的函数和变量分组到一起
- SpawnerSample 是类名
但是,仍然还有一点信息需要明确:
: MonoBehaviour
8. 查找“MonoBehaviour”
首先,遇到不熟悉的类型或关键字时,应采用标准的处理方法:在 Unity 脚本参考中进行搜索。
第一个结果提供了以下定义:
“MonoBehaviour 是一个基类,所有 Unity 脚本都派生自该类。”
这句话告诉你 MonoBehaviour 是一个类(你在前面已经遇到过),并且所有脚本都派生自该类。由于 SpawnerSample 是脚本,你可以推断出冒号表示“冒号之前的类派生自冒号之后的类”,但是对于在 C# 中“派生”的内容,实际有何含义?
9. 派生和继承简介
类可以将完成特定任务所需的变量和函数分组到一起,例如,Enemy 类可以将控制游戏中的敌人所需的一切元素分组到一起。
但是,有时你需要该类的变体或特化版本。例如,你可能需要飞行的敌人和步行的敌人,它们具有相同的数据和大多数函数,但具有不同的移动函数。
为了提高此代码的编码效率,你可以编写:
- 一个 Enemy 类,用于执行所有通用操作
- 从此类派生的另外两个类(FlyingEnemy 和 WalkingEnemy)
派生的类 FlyingEnemy 和 WalkingEnemy 将自动继承(能够访问)Enemy 类的所有函数和变量。
派生的类就像是同一家族的不同成员。
10. 查看继承示例
让我们使用上一步中的示例来探索实践中的继承形式:
public class Enemy
{
public void Attack()
{
…
}
}
public class FlyingEnemy : Enemy
{
}冒号表示 FlyingEnemy 派生自 Enemy。
然后,你可以编写代码来访问 Enemy 类中的 Attack 函数,而无需重新声明该函数:
void HandleEnemy()
{
FlyingEnemy myEnemy;
myEnemy.Attack();
}11. MonoBehaviour 类包含哪些内容?
Unity 中的脚本派生自基类 MonoBehaviour。这意味着脚本可以访问每个 Unity 用户都可以使用的基类中创建的各种变量和函数,包括:
- transform 变量。该变量包含变换组件
- GetComponent 函数。该函数可用于访问游戏对象上的组件
这些默认变量和函数意味着,你可以用更少时间编写完成通用工作的脚本,进而可以将更多精力集中于编写有助于开发具体游戏的代码。
12. 教程总结
在本教程中,你已经:
- 了解 public 关键字的作用,并将该关键字用于修复 SpawnerSample 脚本中的保护级别错误。
- 探索继承和派生的类的概念。
在下一个教程中,你将运用所学知识,为游戏中的生命值药水编写自定义效果。