文章目录
C# Classes for Behaviours
- 我们在 unity 中新建一个 C# 脚本,都会生成一个默认的 Class:
public class Test : MonoBehaviour
,这个类继承于MonoBehaviour
这个基类,这样的脚本可以挂载到游戏对象下面。 - 而 Class 是面向对象编程的核心,这会让我们的程序模块化,更清晰,更容易理解
- 比如我们可以有一个脚本挂载在 Player 这个游戏对象下面,控制 Player 的各种运动
- 同时有一个脚本挂载在 arrow 下面,控制玩家发射的弓箭运动
- 这些脚本都需要继承于
MonoBehaviour
- 当然我们也可以有不继承于
MonoBehaviour
的 Class - 对于一个 Class 下面,我们也可以利用 Methods 用于区分不同的功能
- 比如对于 Player 控制的类
- 我们可以有一个方法用于控制移动
- 还可以有一个方法控制发射弓箭
- 还可以有个方法控制升级和能力提升,等等
- 而在 Update 这个主要的方法中,只需要在需要的时候调用对应的功能方法即可
- 便于管理代码,查询 bug
Custom Classes
1. Custom Classes
- 假设我们有一个射击游戏
- 我们可以获取不同的枪
- 这个时候,对于不同的枪,就不适合定义在 Player 的脚本下面
- 最好单独设计一个 Class 来存放不同的枪的定义
那么问题来了,如何定义一个 Class 呢?
- 首先我们要知道,这个 Class 下面需要涵盖哪些东西
- 比如枪的名字,攻击力,冷却时间,描述等
- 所以我们可以把这里的 Class 理解为一种整体的描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Weapon // 创建一个武器的类,这里不需要继承 MonoBehaviour
{
public string name;
public int attack;
public float coolDown;
public string description;
}
public class Player : MonoBehaviour
{
public Weapon smallGun; // 创建一个变量,类型为武器
public Weapon bigGun;
// Start is called before the first frame update
void Start()
{
smallGun = new Weapon(); // 实例化,即武器被实际创建出来
smallGun.name = "Mini"; // 设定名字
smallGun.attack = 2; // 攻击力
smallGun.coolDown = 0.1f; // 冷却时间
smallGun.description = "It's a small gun!"; // 描述
bigGun = new Weapon()
{
name = "Bob",
attack = 20,
coolDown = 2.2f,
description = "It's a very big gun!"
}; // 也可以通过这种方式实例化的时候同时设定属性
}
// Update is called once per frame
void Update()
{
}
}
注意,在 C# 中,也可以在一个 Class 中创建新的 Class。
上面的写法看起来还是比较复杂,我们还可以用构造函数使得写法更清晰明了:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Weapon // 创建一个武器的类,这里不需要继承 MonoBehaviour
{
public string name;
public int attack;
public float coolDown;
public string description;
public Weapon(string name, int attack, float coolDown, string description)// 构造函数
{
this.name = name;
this.attack = attack;
thi