环境配置 和 C# 语法
Windows10 环境下 Unity + Visual Studio 环境的配置
下载 Unity 2021.3.20f1 调整初始布局 (我习惯把
Hierarchy
,Project
,Inspector
并列放在右边三排Console
,Animation
,Animator
,Timeline
放在Scene
和Game
视图正下面)下载 Visual Studio 预装 Unity 和 dotnet 开发环境 调整初始布局 下载扩展:
One Dark Pro
,CodeNav
,CodeMaid
,Semantic Colorier
. 习惯把CodeMaid CodeNav
解决方案资源管理器放在左边一排.在
Unity Edit->Perference->External Tools->External Script Editor
选择Microsoft Visual Studio 2022
Markdown ALL in One
插件 按Ctrl + Shift + V
显示预览视图
在 Visual Studio Code 集成终端中运行 C# 代码
首先在 VSCode 中下载 C# 扩展 在集成终端中 cd 到代码对应文件夹 dotnet new --help
-> dotnet new console
-> dotnet run
C# 一些和 Cpp 不一样的特性
抽象 Abstraction
- 抽象类 Abstract class: is a restricted class that cannot be used to create objects (to access it, it must be inherited from another class).
抽象方法 Abstract method: can only be used in an abstract class, and it does not have a body. The body is provided by the derived class (inherited from).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31// Abstract class
abstract class Animal
{
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep()
{
Console.WriteLine("Zzz");
}
}
// Derived class (inherit from Animal)
class Pig : Animal
{
public override void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound(); // Call the abstract method
myPig.sleep(); // Call the regular method
}
}
接口 Interface
Note that you do not have to use the
override
keyword when implementing an interface.C# 不支持多继承 但可以通过 Mutiple Interfaces 实现
枚举类型 Enum
1
2
3
4
5
6
7
8
9enum Level
{
Low,
Medium,
High
}
Level myVar = Level.Medium;
Console.WriteLine(myVar);事件 Event
一个用户操作,应用程序需要在事件发生时响应事件。
委托 Delegate
事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。
发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。
订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。
一道有意思的面试题
1 | class Program { |
当使用new B()
构造 B 的实例时产生什么输出?
x=1, y=0
因为创建B的实例需要先隐式调用父类A的无参构造函数,执行PrintFields()
方法,检查到是虚方法,转去检查实例类B,有重载方法,执行重载方法,输出x=1, y=0
(创建子类对象时会首先调用父类构造函数之后才会调用子类本身的构造函数)
Unity 学习记录
Player Gameobject Set
Hierarchy -> Create Empty
- Sorting Layers: Sorting layers lower in the list get drawn in front of layers above them in the list.
Player 实例需要的 Components (2D) :
Rigidbody 2D
Sorting Group : 确保所有子对象的部分作为一个整体被排序
Player Class and Singleton Abstract Class
创建一个 singleton abstract class
单例抽象类 和一个 player class
.