public 关键字和继承简介

Tutorial

Beginner

+0XP

20m

(173)

Unity Technologies

public 关键字和继承简介

在本教程中,你将:

  • 探索 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 类,用于执行所有通用操作
  • 从此类派生的另外两个类(FlyingEnemyWalkingEnemy


派生的类 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 脚本中的保护级别错误。
  • 探索继承和派生的类的概念。


在下一个教程中,你将运用所学知识,为游戏中的生命值药水编写自定义效果。

Complete this Tutorial