游戏开发是一个多学科交叉的领域,需要一系列不同的技能。以下是一些基本技能,它们对于进入游戏开发行业至关重要,以下是需要的基础技术:
一. Unity学前
1.C#基础
1.1、数据类型
- 值类型
- 引用类型
- 指针类型
- 装箱与拆箱
1.2、变量
- 定义
- 初始化
1.3、常量
- 定义
- 引用
1.4、运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
1.5、判断
- if 语句
- if … else语句
- 嵌套 if 语句
- switch 语句
- 嵌套 switch 语句
- ?: 条件运算符
1.6、循环
- while 循环
- for/foreach 循环
- do … while 循环
- 嵌套循环
- break 语句
- continue 语句
1.7、数组
- 声明
- 初始化
- 赋值
- 访问
- 遍历
- 多维数组
- Array与ArrayList的区别
1.8、枚举
- 声明
- 访问
- 与int、string的转换
- 判断枚举是否包含id
1.9、字符串
- 字符串比较
- 字符串替换
- 字符串连接
- 判断是否含有字符串
- 复制字符串
- 判断是否是以某个字符串结尾
- 判断是否是以某个字符串开头
- 字符串判等
- 字符串格式化
- 求索引
- 字符串判空
- 使用分隔符连接字符串数组
- 使用分隔符分割字符串
- 插入字符串
- 移除字符串
- 转char[]
- 大小写转换
- 去除前后空白字符
1.10、命名空间
- 定义
- using
- 嵌套命名空间
1.11、类
- 定义
- 成员函数
- 构造函数
- 析构函数
- 静态成员
- 密封类
- 静态类
1.12、结构体
- 定义
- 特点
- 类与结构体的区别
1.13、接口
- 定义
- 继承
1.14、方法
- 定义
- 调用
- 递归
- ref与out
- 不定参数
1.15、封装
- 访问修饰符
- 类与结构体的区别
1.16、继承
- 基类与派生类
- 接口多继承
- 抽象类与接口区别
1.17、多态性
- 函数重载
- 运算符重载
- 抽象类
- 虚方法
1.18、运算符重载
- 定义
- 执行
1.19、IO操作
- File类
- Directory类
- Path类
- FileStream类
- StreamReader类
- StreamWriter类
- BinaryReader类
- BinaryWriter类
1.20、预处理
- #define
- #undef
- #if
- #else
- #elif
- #endif
- #region
- #endregion
1.21、异常处理
- try、catch、finally 、throw
- 异常类
- 自定义异常
2.C#进阶
2.1、Attribute特性
- 预定义特性
- AttributeUsage
- Conditional
- Obsolete
- 自定义特性
- 声明
- 构建
- 应用
2.2、反射
- 概念
- 原理
- 用途
- 优缺点
- 使用
2.3、属性
- get/set访问器
- 抽象属性
2.4、索引器
- this[int index]
- 用途
- 重载索引器
2.5、委托
- 概念
- 用途
- 声明
- 实例化
- 委托多播
2.6、事件
- 概念
- 用途
- 声明
- 使用
- 事件与委托的区别
2.7、集合
- ArrayList
- Hashtable
- SortedList
- Stack
- Queue
- BitArray
2.8、泛型
- 特性
- 泛型类
- 泛型方法
- 泛型委托
- 泛型接口
- 泛型约束
2.9、匿名方法
- 概念
- 语法
- 委托与匿名方法
- Lambda表达式
2.10、不安全代码
- unsafe
- 托管代码与非托管代码
2.11、正则表达式
- 字符转义
- \r
- \n
- \b
- \t
- 字符类
- [character_group]
- [^character_group]
- [first - last]
- \w与\W
- \s与\S
- \d与\D
- 定位符
- ^
- $
- \A
- \Z
- \z
- \G
- \b
- \B
- 限定符
- *
- +
- ?
- {n}
- {n,}
- {n, m}
- Regex类
2.12、多线程
- 线程生命周期
- 创建线程
- 暂停线程
- 销毁线程
二. Unity基础知识
1. 工程目录介绍
在新建完成后会在创建的目录下生成相关工程文件
如图所示:
Assets: 资源(场景脚本模型)
Library: 库(系统)
Logs: 日志
Packages: 导入的包
ProjectSettings: 工程设置
Temp: 临时文件(文件过大可以删除部分缓存)
UserSettings: 设置
2. 五个窗口面板
创建完成后会有5个窗口面板(红色方框)
Project:工程面板,存放工程的各种资源。包括:声音资源、模型资源、场景文件、材质、脚本等。
Hierarchy:层级面板,展示当前打开的场景里面有哪些东西。(里面的东西称为游戏物体)
Inspector:检视面板(或属性面板),查看一个游戏物体由哪些组件组成。
场景 -> 多个游戏物体 -> 多个组件
Scene:场景面板,显示当前场景的样子
鼠标中键:平移视角
鼠标右键:旋转视角(环顾四周),围绕自身旋转
Alt+鼠标左键:渲染视角,围绕当前视角前方位置
Game:游戏面板,场景运行的时候的样子
Scene文件下meta文件不可删除
右上角的layout也可以修改布局
3. 创建代码和场景
Project > Assets 右键选择create 创建 C# script ,并重命名为“New Name”右键即可打开
Unity支持持的编程语:C#、Mono、JavaScript
4. Unity中的基本模型和场景操作
(1)如何创建基本模型和如何导入复杂模型
(2)场景基本操作
聚焦:双击游戏物体 或者 F
放大缩小视野:鼠标滚轮
围绕物体旋转:Alt+鼠标左键
使用MoveTool下 移动物体
(3)视野分类
Persp 透视视野 ISO平行视野
在不同视野下:关于鼠标右键的不同
(4)保存(场景保存、代码保存)
Ctrl + S
5. 世界坐标系和局部坐标系
坐标系:x 左右 y 上下 z前后
局部坐标系:父物体和子物体
单位:Unity里面的坐标是以米为单位的
6. 工具栏
(1)四个工具
Q:视图工具(使用鼠标中键可以临时切换到这个恐惧)
W:移动工具
E:旋转工具
R:缩放工具
(2)其他工具
Rect Tool Transform Tool Collider Tool
Rect Tool:修改大小——一般2D游戏使用
Transform Tool:WER同时调出
Collider Tool:碰撞器
(3)切换工具
位置工具:Pivot原点 - Center中心
局部和全局坐标切换:Local - Globa
(4)切换工具步移工具
步移工具:一段一段数值移动(快捷键:Ctrl)
条件:世界坐标系下

位置工具:Pivot原点 - Center中心
局部和全局坐标切换:Local - Global
三. 案例实操作
1、创建场景
在project面板右击"Scenes"文件create>scence
(1)创建地面
①点击创建好的“Main Scene”
②在Hierarchy面板中右键3D object>Plane
③点击Plane,inspector面板会显示相关物件属性
Position位置设置为(0.0.0)
scale X,Z放大2倍
④创建材质使Plane更改颜色和材质
在assets文件下创建文件“Materials”右键此文件创建Ground材质
Mesh Filter:控制形状模型
Mesh Renderer:在网格上渲染
smooththness:控制光滑程度(值越大越光滑)
例如:smooththness为1
smooththness为0
相关板块间的关系
(2)创建墙体
创建的Materials组件也可以直接拖动到场景里的任何物件
①在Hierarchy面板中右键3D object>Cuba
②建立一个立方体重命名为“wall”,调整立方体的“Scale”并根据需添加材质
(3)预制体
创建多个相同物体,可以创建预制体
①在“Hierarchy”面板下创建一个物体,重命名为“wall调整好各个参数”
②创建一个文件“Prefabs”用于存放预制体
③将物体拖动在文件下,需要用到相同物体可以直接拖出预制体
(4)构建互动物体
根据前文提到的步骤,通过预制体或者直接复制的方式生成多个相同物体
2、添加物理组件
(1)碰撞检测
①在Hierarchy面板中的最下方点击“Add Component”
②搜索“Sphere Collider”点击即可添加此组件
(2)添加物理组件
①在Hierarchy面板中的最下方点击“Add Component”,搜索“Rigidbody”钢铁组件进行添加
添加刚体组件作用:模拟物理效果(重力、摩擦力、弹力、动力等),可以通过刚体控制小球的运动
渲染模型和碰撞模型需要分开
同时碰撞监测消耗越小,运行越流畅
这里的模型一套精细建模用于渲染 ,一套低模碰撞监测穿模减少穿模情况
调整摄像机位置
3、代码组件
(1)添加删除代码组件
①添加两种方式:
a、在Project里面
Project > Assets 右键选择create 创建 C# script ,并重命名为“New Name”右键即可打开
b、在Inspector面板
在Inspector面板最低端点击“Add Component”添加组件
②删除两种方式:
a、删除代码
b、删除组件
(2)脚本的基本结构
a、引用
b、脚本名字(类名)(类名和脚本名保持一致)
c、什么是方法
d、Start方法和Update方法 - 系统方法(事件方法)
(3)控制台面板 - Console
a、怎么打开—“Crtl+shift+C” 可以快速唤出可控制面板
b、怎么输出—
c、收缩输出—
d、注释——
(4)在代码中获取刚体组件
在Player脚本中
a、第一种方法 - 通过代码获取
private Rigidbody rd;
rd = rd = GetComponent<Rigidbody>();
b、第二种方法 - 通过拖拽
public Rigidbody rd;
(5)给小球添加力
**a、小球的碰撞监测**——在player脚本里写一个系统事件
private void OnCollisionEnter(Collision collision)
{
Debug.Log("发生碰撞了 OnCollisionEnter");
if(collision.gameObject.tag == "Food")
{
Destroy(collision.gameObject);
}
}
collision collision来检测来储存碰撞到的信息
添加标签 “Food”
(6)让物体旋转
在预制体里添加“food”脚本,每个实例都会有此脚本
transform.Rotate是旋转
vector3.up围绕自身上方的旋转
四. Unity软件游戏开发顺序
-
项目规划和设计:
在编写代码或放置3D模型之前,首先进行项目规划和设计。包括确定游戏的概念、玩法、故事、目标和视觉风格。
-
创建3D模型:
在项目早期阶段,先开始创建好3D模型和其他游戏资产,如纹理、动画和特效。
-
设计unity项目:
创建新的Unity项目,并设置基本的项目结构,包括文件夹和子文件夹,以组织和管理资源。
-
导入3D模型:
将3D模型和其他资产导入Unity。这要在编写代码之前完成,因为代码通常需要引用这些资产。
-
编写代码:
开始编写代码来实现游戏逻辑、控制游戏对象的行为、处理用户输入等。代码编写可以与3D模型的导入和设置并行进行。
面向对象编程(OOP)的基础是类(Class)和对象(Object)。在游戏开发中,几乎所有的元素都可以看作是对象,比如角色、道具、敌人等等。类是一种定义对象属性和行为的模板或蓝图。游戏中的每个对象都是根据某个类创建出来的实例。
以下是一个简单的C#类的例子:
public class Player
{
public string Name { get; set; }
public int Health { get; set; }
public int AttackPower { get; set; }
public void Attack()
{
// 实现攻击的逻辑
}
}
在这个例子中,创建一个名为myPlayer
的玩家对象,并设置了玩家的名称、健康值(Health
)和攻击力(AttackPower
)。然后调用了myPlayer
的Attack
方法。
using System;
// 定义Player类
public class Player
{
// 玩家的属性
public string Name { get; set; }
public int Health { get; set; }
public int AttackPower { get; set; }
// 玩家的构造函数
public Player()
{
// 这里可以初始化默认值
}
// 玩家的攻击方法
public void Attack()
{
// 这里实现攻击逻辑
Console.WriteLine($"{Name} attacks with a power of {AttackPower}!");
}
}
class Program
{
static void Main(string[] args)
{
// 创建Player类的实例
Player myPlayer = new Player();
myPlayer.Name = "Hero";
myPlayer.Health = 100;
myPlayer.AttackPower = 10;
// 调用Attack方法
myPlayer.Attack();
}
}
实际的游戏逻辑可能会更加复杂,包括处理攻击结果、更新健康值、与其他游戏对象的交互等。
-
游戏场景:
使用导入的3D模型搭建游戏世界的场景。可能包括放置环境、设置灯光和相机等。
-
优化和调整:
在开发过程中,不断地迭代和测试游戏,比如调整模型和代码等。在开发后期,对游戏进行优化和调整,包括性能优化、用户体验改进等。准备游戏发布,包括构建最终版本、测试不同平台上的表现等。