从零开始Unity引擎学习
- 简单说明
-
- 教程
- 【Unity界面基础认识①】2021/12/13
- 【Unity基础界面认识②】2021/12/14
- 【Unity 脚本认识①】2021/12/15
- 【Unity 脚本认识②】2021/12/16
- 【Unity 脚本认识③】2021/12/17
- 【Unity 脚本认识④】2021/12/19
- 【Unity 脚本认识⑤】2021/12/20
- 【Unity 脚本认识⑥】2021/12/21
- 【Unity 脚本认识⑦】2021/12/22~23
- 【Unity 脚本认识⑧】2021/12/26
- 【做一个简单的飞机打怪兽小游戏①】简陋实现
- 【做一个简单的飞机打怪兽小游戏②】进行优化
- 【Unity脚本认识⑨】2022/01/01
简单说明
你好! 这是我从零开始学习unity的博客。
每有空就会添加一个小标题用于总结当天所学的知识。
在小标题下会用加粗字体一句话总结当日学习的知识点。
刚开始接触unity什么都不懂,有错误还请多多包涵( ゚Д゚)ノ
教程
【翻译注释文档】
游戏蛮牛Unity 用户文档1.0
代码调试和配置环境
调试C#代码
【Unity界面基础认识①】2021/12/13
本日安装了Unity 和 Unity Hub 。
学习到了:初步认识了unity界面、学习了什么叫场景,如何新建场景、场景编辑器、如何添加资源、什么叫游戏对象,坐标系。
1.unity界面初识
新建项目后安装unity界面如图所示。
Project项目面板:项目内的资源文件。图中下方的面板。可在里面直接建立场景、文件夹、对象、脚本等等物品
Scene场景视图:以可视化的形式展现游戏内容。
面板内部左上角一排工具分别为:抓取工具(可拖动视图)、旋转平移工具、自由变换工具和拉伸工具。其中旋转可进行xyz轴的旋转。
右上角工具为相机和将视图画面2D3D切换的可视化工具。
Game游戏视图:对游戏进行播放预览。
Hierachy层级面板:以树状形式显示游戏中的对象(左侧面板)
inspector 组件面板:显示一个游戏对象的全部组件
Console控制台:打印调试的
2.什么叫场景,如何新建
场景就是一个游戏里的关卡,或者某个画面。
我个人理解,以找茬游戏为例,应该是一个解密里的一个关卡,在该关卡中进行解密,到下一关就切换为下一个场景。
新建场景:在project面板中右键create新建场景就可以了。
3.场景编辑器
就是中间这个编辑窗口,可以用滚轮放大缩小,也可以平移。
其内部可见:
1.网格: 一个占屏幕上100像素、1个Unit(可自定义)
2.主摄像机:摄像机的可视范围
3.世界坐标系:x,y轴
4.如何添加资源
方法:
①直接将素材拖拽进project面板的Assets
②右键Assents区域选择import导入
注:可直接右键素材Show In Explorer找到该素材所在的目录,当导入素材后会多出一个对应的.meta文件。且删除原有的素材项目内素材不会消失,因为unity导入规则是复制一份新的文件。
管理资源时可以添加子目录来分类管理。可以重命名素材,也可以删除素材。
5.游戏对象,坐标系的概念
游戏对象就是场景中包含的内容。
比如将某个图片拖进Scene窗口或是Hierarchy窗口中,就新增了一个游戏对象。
点击该对象,右侧会显示该对象的属性信息(名字,变换信息、组件,脚本情况等等)
注:在场景中只是保存了游戏对象引用了谁,比如说引用了某个图片,该图片的id是什么。
坐标系可以在对象的Inspector属性面板查看对象的坐标xyz轴
坐标的单位:一个方格是一个Unit(单位),一个单位在现实世界中都可以自行约定。
x轴:水平向右
y轴:垂直向上
z轴:垂直屏幕向内
(可以用ae的摄像机来理解)
【Unity基础界面认识②】2021/12/14
今日学习:认识了游戏对象的概念及其操作和显示顺序、摄像机、组件。
1.游戏对象
基本操作
移动(更改position值或者使用工具)
旋转(x,y,z轴都可以作为旋转轴)
缩放(x,y轴的缩放,中间的方块可以不失去比例的缩放)
矩形工具:自由变换(按shit键可以等比例缩放)
隐藏和显示:属性中选择active复选框
点击 Sprite Editor打开图形编辑器,右下角显示图片的各个属性
名称 | 作用 |
---|---|
name | 名字 |
Position | centered 位置 |
Border | |
Pivot | 轴心(可选择轴心位于哪里) |
Pivot Unit Mode | |
Custom Pivot |
图片切割
打开图片编辑器后,打开左上 第二个菜单:Slice,点击Slice,会自动剪裁图片,分成相应的多个图片游戏对象
图片与渲染器
Sprite:精灵
Sprint Renderer:图片渲染器,用于显示一个Sprite(一种组件)
将素材拖拽到Sprite的位置,替换当前显示的素材图片。
显示顺序
-修改Order in Layer属性
-修改Z坐标
父子关系
与AE的父子关系同理,子对象随父对象变换
:在树状管理器里拖拽就可以设置了
2.摄像机
点击摄像机可查看其添加的组件
下面展示了部分了解到的组件
名称 | 功能 |
---|---|
Transform | 一种组件,表示:Position:位置 Rotation:旋转 Scale:缩放(每个游戏对象都有的组件) |
Background | 背景,显示区域外的填充是什么颜色 |
Size | 摄像机的范围大小,默认为5个单位,描述了摄像机可以拍摄多大的区域 |
Game窗口中可以跳调整其长宽比例
3.组件
组件:用于实现一种功能。
在右侧面板种可以添加一些组件
【Unity 脚本认识①】2021/12/15
今日学习:认识了什么叫脚本、如何挂载脚本、学习查看手册、认识了脚本中的Start()和Update()
什么是脚本
游戏对象的行为由附加的__组件__控制。脚本可以理解就是在写一个自用组件(?
怎么挂载脚本
Assets窗口创建一个C#脚本
双击脚本启动VS
在VS页面内可以编辑该脚本,编辑脚本后退出到unity界面,可以直接将脚本拖拽至对象上挂载,然后点击Game窗口中运行。
①新建一个脚本和使用它、
新建一个脚本后点开脚本观察其代码。
using UnityEngine;
using System.Collections;
public class MainPlayer : MonoBehaviour {
// 使用此函数进行初始化
void Start () {
}
// 每帧调用一次 Update
void Update () {
}
}
为了连接到 Unity 的内部架构,脚本将实现一个类,此类从称为 MonoBehaviour 的内置类派生而来。也就是说MonoBehaviour是每一个脚本的基类。
MonoBehaviour 是一个基类,所有 Unity 脚本都派生自该类。
使用 C# 时,必须显式派生自 MonoBehaviour。(不太理解,找个例子来理解它)
——什么叫做显式派生?
就是在派生类的构造函数中指定要调用的基类的构造函数,
并将派生类构造函数的部分参数值传递给基类构造函数。
——什么叫做隐式派生?
隐式方式就是在派生类的构造函数中不指定对应的基类的构造函数,
这个时候调用的是基类的默认构造函数。
Component 菜单上的 Scripts 子菜单,其中包含项目中可用的所有脚本,包括自定义的脚本。
每当创建一个脚本时,自动创建一个类.cs文件,文件名与类名相同。
会由引擎自动调用:
Start() :启动时调用
Update():每帧调用 (帧率不固定)
内部执行的顺序:
1.创建对象
2.创建其调用的组件
3.Start()
4.定时执行Update()
【Unity 脚本认识②】2021/12/16
今日学习:重新配置了环境、学习帧率的概念、如何获取当前对象和其他对象的组件
今早打开脚本不知道为什么vs的自动补全代码又没了,就把环境重新配置了一下。
查看vs2019的unity相关组件是否装上。(查看发现明明已经安装好了T T)
然后打开unity,点击edit中的preference,找到自己安装的编译器,进行一个选择。
然后记得一定要重启,再次打开后双击脚本就能查看代码的补全了。
②什么叫帧率,如何让一个物体匀速移动?
帧率就是指每秒钟更新多少次。
FPS = 50 约每20ms 更新一次
FPS = 60 约每16.7ms更新一次
Debug.log("In Update() .." + Time.delaTime);
观察间隔多久刷新一次
提问,什么叫做delaTime?
中文名称增量时间,含义是每经过一帧所耗费的时间。
Update()每帧执行一次,那么经历过一帧耗费的时间就是 增量时间(deltaTime)
1秒内Update执行的次数,就是1秒内执行的总帧数
举个例子
void Update()
{
transform.Translate(0, 0, Time.deltaTime * 10); //物体沿着自身Z轴方向,每秒移动物体10米运动
}
用增量时间*10,可以让物体每一秒钟移动10米。而Update()每一秒刷新的次数都不同。
(Update执行一次就是一帧,每秒的帧不同但每一帧移动的距离都是速度 * 时间,最后相当于再乘每秒钟有几帧,相当于下面这个公式)
10米=(增量时间 * 1秒总帧数) *10米/秒
③如何获取节点和组件?
-当前游戏对象
this.gameObject //当前你这个游戏对象
取得当前对象的全部组件
void Start()
{
//在当前对象下寻找类型为SpriteRenderer类型的全部组件
SpriteRenderer render = this.gameObject.GetComponent<SpriteRenderer>();
//简写:SpriteRenderer 自变量名称 = this.GetComponent<获取的类型>();
render.flipY = true; //对当前对象进行一个翻转(X对称轴)
}
运行脚本后图片翻转了……
-获取其他对象
GameObject obj = GameObject.Find("相应对象的路径");
【Unity 脚本认识③】2021/12/17
今日学习:父子节点关于transform的一些简单操作、组件的属性如何增加修改,游戏对象如何改变坐标,旋转。
今天又有问题了。
找到这个用户目录下,删除原有的许可证。
再重启电脑,重新打开unity hub申请许可证就好了。
④父节点和子节点
左侧树状文件结构由Transform来管理。
常见操作:
1.取得父节点,获得父节点的名称
//取出当前对象的父节点
GameObject parentobj = this.transform.parent.gameObject;
Debug.Log("rabbit的父节点" + parentobj.name);
2.遍历全部子节点
遍历当前对象的全部子节点并打印出其名称。
//遍历子节点
foreach (Transform child in transform)
{
Debug.log("子节点" + child.name);
}
3.把一个节点移动到另外一个位置。
将rabbit对象挂载到主摄像机对象下面。
//分别定义两个对象
GameObject obj = GameObject.Find("rabbit");
GameObject target = GameObject.Find("Main Camera");
//通过transform,先找到子节点的transform,将其挂到父节点的transform下面
obj.transform.SetParent(target.transform);
未运行前层级关系。
运行后层级关系。
当想将对象挂载到场景下面的时候,直接设置为null
obj.transform.SetParent(null);
游戏运行时,层级面板和组件面板都会显示实时数据。
⑤组件的属性定义
在组件面板中可以看到组件下面的一些属性。
新建一个脚本,在脚本内定义一个public的组件属性,我们可以看到属性面板中显示了我们自己定义的属性。
该值也可以修改
⑥游戏对象运动计算
Vector3,用于表示一个3维向量(x,y,z),也称为3元数。
定义一个三维的坐标,坐标表示为浮点数,所以在其后必须要加f
Vector3 pos = new Vector3(0, 0.1f, 0);
节点坐标、旋转都可以用Vector3表示
transform.position = new Vector3(0, 0.1f, 0); //设置位置
//eulerAngles 欧拉角 用来旋转的 旋转了45度
transform.eulerAngles = new Vector3(0, 0, 45f);
世界坐标 World Space Position 绝对坐标,以世界坐标系计算
本地坐标 Local Space Position 以父节点的坐标系计算
控制游戏对象在一定范围内移动,当碰到上下边界的时候就调转自己的方向。
private bool upward = true;//飞行的方向,向上
// Update is called once per frame
void Update()
{
if(upward && transform.position.y > 5)
{
upward = false;
transform.localEulerAngles = new Vector3(0, 0, 180);
}
if (!upward