Unity的C#编程教程_52_类 Class 详解及应用练习(一)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值