关于场景搭建
空气墙:即一个赋予了碰撞箱的空物体
给空物体赋予组件Sprite Renderer即可改变其图像,图像格式需为Sprite精灵格式,将图片拖入文件夹即可转化
Sorting Layer以确保物体层级,用以确定哪个物体在上层,layer数字越大,越靠前,同一个Sorting Layer的两个物体可以在Order in layer中确定哪个考前,同样,数字越大越靠前
Tilemap瓦片地图
1.先将一张贴图合集通过Sprite Mode从Single(单一图片)模式转变为Multiple(多张图片)模式以切割成为许多张小贴图入调色板当中,便可运用上方笔刷橡皮等制作一个简单的瓦片网格地图了。
2.在Hierarchy中创建2D project-Tilemap-rectangular创建网格地图
3.在windows中选择2D-tile palette创建一个New palette(新调色板)并将贴图合辑拖
关于UI界面
核心代码:.SetActive(false)则为UI隐藏,.SetActive(true)则为UI显示
关键功能:
适应屏幕:
1.锚点,设置UI图标处于相对于电脑屏幕的位置,让图标位置适应屏幕
2.在Canves中的Canvas Scaler中选择Scale With Screen Size让图标大小适应屏幕
错误点:应将Canvas稍微远离Scene防止在游戏界面中看到Canvas的边框
Button按钮,点击则执行命令,可以设置鼠标点击时,鼠标掠过时,平时的样式,此外点击按钮需要一个EventSystem,将按钮复制到其他场景时,也需要创建一个EventSystem
Text文本
Panel面板,常用于整合多个UI,方便管理
关于场景切换
核心代码:
SceneManager.LoadScene("场景名字");
其中需要在Building Setting中拖入场景以确保可以转跳,在代码前需要写上using UnityEngine.SceneManagement;
关于视频播放
核心组件Video Player和Audio Stdio
计时器代码:
countTime += Time.deltaTime;
关于物品交互
当玩家接触或走到物体旁边,会显示出物品信息,原远离物品则信息消失
为物品赋予一个碰撞箱,
核心代码:
进入碰撞箱
OnTriggerEnter2D(Collider2D other)
离开碰撞箱
OnTriggerExit2D(Collider2D other)
Other.tag==”GameObject的Tag”
关于角色移动
使用刚体的vcelocity,故需要给物体赋予rigidbody刚体组件,Input.GetAxisRaw("Horizontal"),获取Unity自带的按键“水平移动”,GetAxisRaw为获取按键,而GetKeyDown(KeyCode.F)则为获取键盘上的按键。
移动代码:
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
移动和动画的联系:
animator.SetFloat("Horizontal", movement.x);
animator.SetFloat("Vertical", movement.y);
animator.SetFloat("Speed", movement.sqrMagnitude);
关于角色移动动画
1.将人物的每一帧图片集合在同一张图片里,并用Sprite Mode从Single(单一图片)模转变为Multiple(多张图片)模式以平均切割成为许多张小贴图,系统会自动认为此切割后的图片为一个动画,并自动播放动画序列帧,只需要创建动画文件夹并导入即可。
2.直接把人物拖入主界面
3.打开人物的”_0”界面,赋予人物更多的动画,如奔跑时,人物则为running动画
4.创建一个新的blend tree(混合树),以确保上跳与下坠有不同的动画(依据速度的方而决定),同时可以制作向左移动和向右移动的不同动画。
5.实现原地待机和跑步动作之间的切换
- 在动画组件中的running与idle间建立箭头联系
- 在Animator中创建一个bool的变量,记为run
- 取消idle与running间的过渡动画:点击箭头,取消其中Has Exit Time选项
- 当run T时,待机变为移动,run F时,则为移动变为待机
6.同样方式当人物不在地面时,人物为空中的动画
关于对话系统
awake、enable、start依照次顺序执行,awake会在一开始的时候就会执行,但start则是在被激活之后才会调用,因此在编写代码的时候在给脚本挂载的物体做初始化,就用awake,用于挂载组件或者处理引用关系,start是物体“可见”之后才会被调用即setActive("true")之后才会调用(当然一开始就是非隐藏的话会按照顺序执行)
awake:用于初始挂载在对象上的组件或者关系,不论是否激活一开始都会调用
start:用于初始化对象上的数据,只会在物体被激活后按顺序调用,全程调用一次
获取.txt文件中的字符:
void GetTextFormFile(TextAsset file)
{
textList.Clear(); //清空对话框内容
index = 0; //回到目录第0行
var lineData = file.text.Split('\n');
//file.text:将file转化为txt文本转化为string字符形式
//.Spite切割,(‘\n’):按行切割,\n为换行
//var临时变量,匿名类型,自动识别数据类型
foreach(var line in lineData) //foreach用以处理场景中所有对象
{
textList.Add(line); //每一行加到列表当中
}
}
IEnumerator携程
可以依次执行容器中的函数,其实就是将函数进行分块处理,实现逐字显示
IEnumerator SetTextUI()
{
textFinished = false;
textLabel.text = ""; //最开始显示空白
int letter = 0; //letter为第几个字
while (!cancelTyping && letter < textList[index].Length - 1)
{
textLabel.text += textList[index][letter];
letter++;
yield return new WaitForSeconds(0.1f); //等待时长
}
textLabel.text = textList[index];
cancelTyping = false;
textFinished = true;
index++;
}
Unity中的协程方法通过yield这个特殊的属性可以在任何位置、任意时刻暂停。也可以在指定的时间或事件后继续执行,而不影响上一次执行的就结果,yield后的代码会被挂起,先执行前面的内容
关于游戏帧更新
三者执行顺序:FixedUpdate ——>Update ——>LateUpdate
FixedUpdate固定帧更新,一般用作物理更新
Update,每一帧更新,一般用作游戏逻辑更新
LateUpdate一帧中最后更新,一般用作相机更新
关于相机跟随
核心:使相机永远处于玩家的某一相对位置
XX.position即XX这一物体的坐标,是向量,故可叠加,可让相机坐标=物体坐标+相对位移,如:相机.position=角色.position+相对位移(Vector类型)
重点:
1.需要使用方法LateUpdate,这样可以使相机跟随在一帧中的最后执行
2.SmoothDamp(平滑阻尼)