1. C#基础知识
Unity C#教程 C#教程
脚本文档 脚本 - Unity 手册
- 变量与函数
- IF - Else
- 循环 - For
- 循环 - Foreach
- 循环 - While
- 作用域访问修饰符
- Awake 和 Start
- Update 和 FixedUpdate
- Transform组件
- Destroy
- 获得输入 - Input Key
- 获得输入 - Button Click
- 获得输入 - Mouse
- 类
- Instantiate
2. Unity 教程
Creator Kit: Beginner code Creator Kit: Beginner Code - Unity Learn
商店资源: Creator Kit: Beginner Code | URP | Tutorials | Unity Asset Store
1. 导入资源到Unity
- 新建1个Unity 3D 项目;
- 在网页中打开上述商店资源(记住要登录自己的Unity ID),点击“添加至我的资源”,再点击“在Unity中打开”
- 回到Unity 界面,依照界面的提示框依次点击;
- 导入完成后,在Project窗口 Unity Technologies > Creator Kit - Beginner code > Scenes 文件夹中双击 ExampleScene
2. 试玩游戏
点击 “Play” 按键进入游戏模式:
- 导航
-
走到那里的位置
-
攻击目标(假人)
-
将点击的物体添加到您的库存中的项目
库存和角色统计
-
查看角色统计数据(力量、防御和敏捷)
-
查看设备和库存物品(将鼠标悬停在它们上方以显示更多详细信息)
-
双击图标使用或装备物品
3. 开始编程
设置默认编程器
visual studio 2022 (在安装Unity时选择安装该模块)
- 点解Unity界面上端的 “Edit” 菜单,在下拉菜单中选着 “Preference”
- 在弹出的Preferences 窗口中选择左侧菜单 “External Tools”, 然后在右侧的 External Script Editor 右侧的下拉框中选择 Visual Studio 2022.
打开脚本文件
Spawner Sample (Script) 关于游戏物体的生命药水(Health potion)
- 在层次结构中,选择LevelDesign > PotionSpawner游戏对象。
- 在 Inspector 中,找到Spawner Sample (Script) 组件。该组件是使三种药水出现的脚本。
在上图右侧SpawnerSample 名称上点击右键,在弹出窗口中选择 “Edit Script”。这将在默认安装的代码编辑器(Visual Studio 2022)中打开该文件
关于变量
变量angle
在上述窗口中 ,脚本的第 10 行
上述每一行是1个指令,每行指令以 “;” 结尾
上述 int angle = 15; 声明并分配一个变量(angle)。
变量是存储值的容器。你可以把它想象成一个写有名字的行李箱,你可以在里面存储你以后想要检索的信息。顾名思义,存储在变量中的信息可以更改(或变化)。
在使用变量之前,您需要通过声明其名称 (angle) 和类型 (int)来声明它。您还可以为其指定一个初始值 (15)。
在第17行和第22行分配变量不同的 值,注意在第一次(第10行)给变量分配初始值的时候要声明变量 的类型(int),后面(第17和22行)就直接给 变量赋值,不需要在前面加类型了
变量spawnPosition
设置声明药水瓶的初始位置
在第11行声明了该变量,其类型是 Vector3,是一个三维向量,表明该位置的x, y, z 值;
在第14行,第19行,第24行分别3次重新赋予该位置一个值
上述 Instantiate 是生成1个生命药水瓶,在第15行,第20行,第25行使用了3次,说明生成了3个药水瓶,在unity界面,点击中间上方的play按键,就可以在游戏窗口中可以看到每个药水瓶的位置,因为是程序生成 的,所以只有在play模式下显示这三个生命药水瓶。
创建及使用变量
创建一个 radius 变量代替原来程序中的 2 来改变生命药水瓶的初始位置:
步骤:
- 声明变量: int radius = 5;
- 分配该radius变量到spawnPosition,替代 2
在visual studio 界面的上方快捷键中点击保存按键,
切回到Unity 界面,unity会自动更新上述脚本变化,再次点击unity界面中间上方的play按键,看看声明药水瓶的位置是否改变了,每个药水瓶之间的距离变大了!
关于函数
函数是指令集。当编译器到达某个函数时,它会告诉计算机完成(或执行)该集中的所有指令,然后再继续执行脚本的其余部分。
上述程序代码中Instantiate 是一个生成新生命药水瓶的函数,我们在代码后面加入如下代码,在游戏中生成第四个生命药水瓶:
// Fourth potion created at spawn
angle = 135;
direction = Quaternion.Euler(0, angle, 0) * Vector3.right;
spawnPosition = transform.position + direction * radius;
Instantiate(ObjectToSpawn, spawnPosition, Quaternion.identity);
示例函数
void AddingNumbers( float num1, float num2 )
{
float resultingNumber;
resultingNumber = num1 + num2;
}
- 分解该函数
该函数的每一行
void AddingNumbers(float num1, float num2)
这是一个函数声明,它指示计算机创建一个函数。这类似于变量声明。函数声明始终包括:
1.函数的类型 。void是一种特殊类型,这意味着“无类型”或“空”,因为它不存储在任何地方。当你调用int函数时,它会返回一个整数值; void 类型变量不返回值。
2.函数的名称,每次您希望计算机执行函数中的指令时都会使用该名称。该函数的名称是AddingNumbers 。
3.变量声明,括号之间。这些称为参数。您可以包含任意数量的参数,以逗号分隔。即使函数不带变量,也需要括号。
变量是浮点型(float)变量。浮点变量是小数,与 int 变量(整数或整数)相反。它们的小数点两侧都有数字,可用于提高准确性。
函数第一行后面有:
-
左花括号
-
指示
-
右花括号
{
float resultingNumber; //声明变量;
resultingNumber = num1 + num2; //变量赋值,根据第一行函数括号中的参数
}
- 调用该函数
示例函数调用:
AddingNumbers(5.5f, 18.9f);
函数调用由以下部分组成:
- 函数名称
- 一组包含两个值的括号
- 分号,标记指令的结束
函数调用告诉计算机在继续按顺序执行脚本之前执行函数中包含的所有指令。
编写函数
上述代码中如下四个部分的内容中大部分相似,只是 angle 的值不同,如下图所示:
可以编写一个函数来表示上述四个部分中的共同内容。
void SpawnPotion(int angle)
-
SpawnPotion是一个描述性函数名称,这对以后阅读您的代码的任何人都有帮助。您可能选择了不同的名称 - 任何清晰且描述性的替代名称都可以。
-
参数变量类型为 int 。
-
示例中的参数变量称为 angle ,因为这是每个生成的药水唯一会发生变化的变量。同样,您可能在自己的版本中选择了不同的名称。
该函数的初步内容如下:
void SpawnPotion(int angle)
{
Vector3 direction = Quaternion.Euler(0, angle, 0) * Vector3.right;
spawnPosition = transform.position + direction * radius;
Instantiate(ObjectToSpawn, spawnPosition, Quaternion.identity);
}
spawnPosition
,
radius,下面有红色的波浪线,表明该处有错误

void SpawnPotion(int angle)
{
int radius = 5;
Vector3 direction = Quaternion.Euler(0, angle, 0) * Vector3.right;
Vector3 spawnPosition = transform.position + direction * radius;
Instantiate(ObjectToSpawn, spawnPosition, Quaternion.identity);
}

关于类 class
- 点运算符
-
首先,点左侧是包含您需要访问的变量的变量
-
中间是点运算符
-
右边是第一个变量中包含的变量
- 创建1个类变量
编写类Class
public class LootAngle
{
}

-
当前位置的角度 ( n )
-
每次生成新药水时需要添加到该位置的度数 ( x °)
public class LootAngle
{
//声明2个变量
int angle;
int step;
//构造函数,与类的名称一致
//给上述2个变量赋值
public LootAngle(int increment)
{
step = increment;
angle = 0;
}
//计算下一步的角度
public int NextAngle()
{
int currentAngle = angle;
angle = Helpers.WrapAngle(angle + step);
return currentAngle;
}
}
2. 在 start 函数中调用 LootAngle 类
LootAngle myLootAngle = new LootAngle(45);
3. 更新SpawnPotion函数中的参数
SpawnPotion(myLootAngle.NextAngle());
新的脚本内容如下图所示: