Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics

该课程来源于Unity Learn Premium,教程分步与摘要如下。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第1张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第2张图片

 

C# Scripting in Unity: Beyond the Basics目录

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第3张图片

1. Project Overview

 

主要介绍:

命名空间(using xxxxx);

命名规则(首字母大写小写等);

区域(#region #endregion)。

 

新概念:

#region 后可跟描写该区域的词句,区域缩起后显示region里的描述语句。例:#region API 则缩起后显示API

 

2.Understanding Types

 

主要介绍:

类型(type,value type值类型和reference type引用类型);

var关键词的使用;

枚举的使用(enumerations,为值类型);

泛型的使用(Generic Type)和方法重载(method overloading);

 

新概念:

① var关键词的使用

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第4张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第5张图片

 

②enum关键词的使用

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第6张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第7张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第8张图片

 

③泛型的使用和方法重载的说明

 

C#是强类型语言(Strongly-Typed Language)

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第9张图片

 

而泛型则可以在使用前才定义参数类型和值,优势在于代码多次使用,替代方法重载。下面的方法重载我们在Unity里定义的各类方法里常常使用(不同的参数)。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第10张图片

 

用泛型代替则是

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第11张图片

 

控制台输出

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第12张图片

 

3.Working with Groups of Types

 

主要介绍:

数组(Array,比如Public string[] shapes = {"circle", "triangle"}; 或 Public string[] shapes = new string[4];);

List泛型(List);

队列和栈(Queue和Stack)

 

新概念:

①List与数组的区别

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第13张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第14张图片

 

②字典的使用

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第15张图片

 

③队列和栈的使用

队列采用先进先出,栈采用先进后出

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第16张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第17张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第18张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第19张图片

 

4.Coroutines

 

即协程

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第20张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第21张图片

 

yield后有以下几种形式

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第22张图片

 

要注意的是WaitForSeconds()和WaitForSecondsRealtime()的区别

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第23张图片

 

上图内Time.timeScale = 0,关于timeScale的说明参考来源

timescale是时间流逝速度的缩放比例,0.5时会降到一半,一般用于慢动作或快动作。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第24张图片

 

所以上面的程序执行一次后就停止了,如果换成WaitForSecondsRealtime(2)则可以继续正常进行。

 

如果不是在Update等方法内每帧执行,想要两个程序同时执行的方式是两个程序都为coroutine。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第25张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第26张图片

 

停止协程有StopAllCoroutine()和StopCoroutine(xxx),前者停止该Monobehaviour下的所有携程,后者仅停止该携程,StopCoroutine()的使用方法有点复杂,可以参考unity api。

 

5.Working with Classes

主要介绍:

面向对象的编程(Object Oriented Programming)(method为面向对象的语言的叫法,function为面向过程的语言的叫法);

制作一个简单的打飞机游戏说明类的继承(inheritance),多样性(Polymorphism)和接口(interface)。

 

新概念:

①类的继承

之前就在2D Roguelike里学习过。脚本里的打头 public class xxx: Monobehaviour  中的Monobehaviour就是基类,xxx就是mono的派生类。roguelike里也出现过不继承mono基类继承其他基类的情况。基类中的public对基类和其他所有类可见,private仅对自己可见,protected对子类可见对其他类不可见(即保护于其他类)。详细了解类继承可参考

 

②多形性

通常使用类继承是为了减少冗余代码(比如某部分代码在a脚本和b脚本内共同使用,则把该代码写到x脚本,ab继承x),这就涉及到对父类内的方法(method)变量的改写重写(添加功能或者直接重写),这种功能叫多型性。

父类里的方法必须使用virtual或abstract关键词才能改写。

比如 public virtual void Player(){xxx}; 和public abstract void Enemy();。

如果父类的方法使用了关键词abstract则表示子类必须重写该方法({}内不能为空),父类里的abstract则不必写实现(仅有声明,不能加{}和里面的内容,就是抽象)。如果父类方法使用了virtual则必须在父类内写该方法的实现(哪怕仅有一对花括号,即类)。

在子类内重写父类方法,该方法必须同名,必须添加override 关键词,比如public override void Player(){xxx};详细了解多形性

 

③接口

继承只能一个类继承自一个类,比如A→B→C,C继承了AB,但想要继承一个不在链条上的类,就要使用接口。接口像一个合同,用固定形式声明X接口,并使A类内的方法可直接使用X内的内容(方法method,属性properties,事件events,索引器indexers)

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第27张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第28张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第29张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第30张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第31张图片

 

在之前brakers的装备系统学习时已经学习使用过例如IPointEnter之类的接口使用方式。

 

6.Delegates, Events, and Actions

 

主要介绍:

委托(delegate,一种类型type,用于在委托对象delegate object中保存对方法method的引用reference);

事件(Events,当约定的某事发生时A类class或对象object可以通知B类或对象);

Action(Action是一种简化声明形式的委托)。

 

新概念:

①委托

委托是一种引用类型,是对某一类而不是某一种method的引用(类似c++的指针),可以把方法像参数一样传递。

委托声明方式必须在使用delegate关键词,委托可以引用与它有相同返回类型和参数类型的方法。

委托可以定义在类外也可以在类内,可根据委托的可见性在前面加 public private 和protected。

比如有一个委托为public delegate void A (int a); 的A,还有两个同样返回类型的参数的public void B(int b){};的B和public void C(int c){};的C,还有一个不同返回类型的public string D(int d){};和一个不同参数的public void E(string e){};

那么A在实例化public A aDelegate;后,就可以在某个需要的地方使用A调用B aDelegate = B; 然后aDelegate(6);就调用了B方法,同样 aDelegate = C; aDelegate(6)等于调用了C方法。

aDelegate /= D 或 E,因为他们不具有同样的返回类型和参数类型。

 

如果想通过A同时调用B和C,则 aDelegate += B; aDelegate += C; aDelegate(9);就同时调用了B(9)和C(9)。这叫做委托的多播。

也可以在其他脚本对之前委托的实例进行监听(即把新的方法加进委托)。比如另一个脚本里有同样返回类型参数类型的方法F,不需要在该脚本重新实例化委托A,而是在需要加入监听的地方 GetComponent().aDelegate += D; 就可以了。

想取消调用就用-=符号就可以。

参考资料

另一种不实例化用委托的方式则是教程的演示的。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第32张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第33张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第34张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第35张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第36张图片

 

②事件

事件Event比如鼠标点击等。事件必须有委托类型(即事件依托于委托),事件只可在内部触发,外部只能订阅(委托在内外都可触发)。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第37张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第38张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第39张图片

 

③Action

委托这种机制每次使用之前都要先创建一个新的引用类型,然后再创建实例,会显得比较臃肿、麻烦,所以C#提供了一种简化方式,使用Action来创建委托实例。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第40张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第41张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第42张图片

 

7.Tips and Considerations

 

主要介绍:

特性(Attributes,用于程序运行时传递各种元素(类,方法,结构,枚举,组件等)的行为信息的声明标签)

 

新概念:

①特性

使用[]括起特性的名称和值,放在它所应用的元素前。比如public int point;上的[HideInInspector]就是一种特性。

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第43张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第44张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第45张图片

Beginner Programming: Unity Game Dev Course(1)- Beyond the Basics_第46张图片

 

完毕。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(•【完整课程】)