Unity随笔-1
本文最后更新于:2023年9月23日 下午
随便写写
使用C#脚本
创建C#脚本的三种方法:
- 资源(Assets) -> 创建(Create) -> C#脚本(C# Script)
- 在项目(Project)选项卡中,选择创建(Create) -> C#脚本(C# Script)
- 在层级(Hierarchy)窗口中选择一个GameObject,在检查器(Inspector)中,单击添加组件(Add Component) -> New Script
给GameObject添加脚本
如果不是方法三创建的脚本,要添加到我们想添加到的GameObject中运行的话,直接从项目(Project)选项卡中选中脚本并拖放至GameObject上即可(如:将Move.cs
脚本拖放到层级(Hierarchy)窗口中的Main Camera)。
将信息和反馈打印到Unity编辑器的Console窗口
可以使用Debug.Log()
或者Debug.LogFormat()
方法。下面是例子:
1 |
|
当然,Debug.Log()
方法也支持字符串插值:
1 |
|
Start()和Update()方法
Start()
Unity在启用脚本的第一帧时便调用此方法。只会执行一次。主要用于设置变量或执行首次运行Update()之前需要发生的逻辑。也可用于在Console面板上显示一次性信息。
Update()
每帧显示后,Update()
方法便由Unity调用(即每帧调用一次Update()
)。非常适合用来监测鼠标和键盘输入或运行游戏逻辑。
C#中的数组、字典和列表
数组
数组的特点:
- 数组可以存储任何类型的值,但所有元素都必须是同一类型。
- 数组的长度或可容纳元素的数量在创建数组时就已设置,之后无法修改。
- 如果在创建时没有分配初始值,则每个元素将被赋予一个默认值。存储数字类型的数组默认为0,而任何其他类型都默认设置为null。
如何创建数组
通用模板:elementType[] name = new elementType[numberOfElements];
1
2
3
4
5
6
7
8// example
int[] newArray = new int[3];
// Longhand initializer
int[] newArray = new int[] {713, 549, 984};
// Shortcut initializer
int[] newArray = new int[] {713, 549, 984};
列表
如何创建列表
通用模板:List<elementType> name = new List<elementType>() {value1, value2};
列表中的操作
查找元素:
1 |
|
统计元素:
1 |
|
增加元素:
1 |
|
插入元素:
1 |
|
删除元素:
1 |
|
字典
如何创建字典
通用模板:
1 |
|
操作字典
统计键值对数量:
1 |
|
添加键值对:
1 |
|
修改键值对:
1 |
|
删除键值对:
1 |
|
字典中是否包含指定键:
1 |
|
在循环中捕获键值对:
1 |
|
C#中的类、结构体与OOP
类的关键是它们是引用类型,也就是说,当类被赋值或传递给另一个变量时,系统引用的是原始对象,而不是创建一个新的脚本。
而结构体则是值类型,其特点有:变量不能在结构体声明的内部进行初始化,除非用static或是const修饰;不允许使用没有参数的构造函数。
结构体作为单独对象很容易被复制和修改(可直接structObject1 = structObject2
),而类保留了对其原始对象的引用。
C#中的继承
如何创建继承?
1 |
|
任何用public
、protected
或internal
访问修饰符标记的基类成员都会自动成为派生类的一部分,但构造函数除外。类的构造函数总是属于包含它们的类,但仍可以从派生类中使用父类的构造函数:
1 |
|
C#中的多态
一个方法可以通过调用类产生不同的行为,此即为多态。
派生类对象的处理方式与父类对象相同。例如,一个由ParentClass
类对象构成的数组也可以存储ChildClass
对象,因为它们派生自ParentClass
。
父类可以将方法标记为虚拟方法(virtual
,在访问修饰符和返回类型之间加入,如:public virtual void
),这意味着派生类可以使用override
(也是在访问修饰符和返回类型之间加入)关键字修改其命令(重载方法)。
访问组件
组件是什么呢?比如,对于一个GameObject
,这里以MainCamera
为例,单击它,在右边检查器(Inspector)中的就是它的组件了:Transform、Camera、Audio Listener和我们自己加上去的Learning Curve。
那要如何在自己编写的Learning Curve脚本中获取到Transform组件呢?可以用GameObject
的类方法:GetComponent()
或Find()
。
- 访问当前的Transform组件 -> 使用
GetComponent()
这里能用1
2GameObject.GetComponent<ComponentType>()
camTransform = this.GetComponent<Transform>();this
关键字,是因为两者都附加到相同的GameObject
组件上。 - 访问另外一个
GameObject
上的组件 -> 使用Find()
+GetComponent()
1
2directionLight = GameObject.Find("Directional light");
lightTransform = directionLight.GetComponent<Transform>();
游戏设计入门
对于我们想要构建的内容,我们需要规划好以下几点:
- 概念:对游戏的全局理念和设计,包括游戏类型和玩法风格。
- 核心机制:角色可以在游戏中使用的可玩功能或互动方式。常见的游戏机制包括跳跃、射击、解谜、驾驶等。
- 控制方案:玩家用来控制游戏角色、环境交互和其他可执行动作的键位映射。
- 故事:推动游戏发展的背景叙事,用于在玩家与游戏世界之间建立共情与关联。
- 艺术风格:游戏的总体观感,并体现在从角色、界面美术到关卡和环境设计的各方面。
- 胜负条件:决定游戏输赢的规则,通常由一些可能会遭遇失败的目标构成。
希望本文章能够帮到您~