今天开始学习Unity
使用的Unity版本
学习视频是BiliBili的Unity2D官方入门教程Ruby Adventure 完整版首先是配置环境,需要关联Unity和VSCode
参考文章 安装了如下俩插件
常用快捷键
快捷键Q–Hand(手形)工具 可以平移整个Scene视图
快捷键W–Translate(移动)工具 移动所选择的游戏对象
Ctrl+N–New Scene 新建场景
代码块上一行/// 注释
Ctrl+6 打开动画面板
其他可以参考[快捷键文档]
()
切割图片为瓦片
以这张图片为例, 初始并未切割为瓦片
操作如下
- 修改属性Sprite Mode为Multiple,点击Apply
- 点击Sprite Editor按钮打开编辑弹窗
- 在Slice下拉框中修改Type为Grid By Cell Count,并修改数量为3x3,并点击Slice按钮进行切割
- 点击弹窗右上角Apply按钮,关闭弹窗,切好了
将瓦片添加到场景中
- 首先要打开Tile Palette瓦片调色板窗口(Window-2D-TilePalette)
- 新建一个调色板放到/Assets/Tiles下
- 将瓦片图集拖到调色板上,同样保存到/Assets/Tiles下
- 选择调色板中笔刷工具,选中其中一块瓦片,就可以绘制到场景中了
但是瓦片并没有占满一格
因为整张图片大小为192x192,切割后每个瓦片就是64*64
100的格肯定占不满
解决方法就是将单元格大小改为瓦片大小64
精灵添加碰撞
人物精灵需添加刚体
需要把重力改为0,不然会下坠
需要冻结z轴旋转,不然碰撞后会旋转
之后再添加一个Box Collider 2D组件,可以编辑碰撞盒大小和位置
瓦片添加碰撞
在Tilemap节点下添加碰撞组件
不需要碰撞的瓦片,直接在瓦片资源配置
但是如图,池塘里的每一块瓦片都有一个碰撞盒,很消耗性能,可以在Tilemap再添加一个Composite Collider 2D组件,并在碰撞盒组件下选择合并选项,合并在一起的碰撞盒
需要注意,添加合并碰撞组件后会自动添加刚体组件,需要将刚体设置为静态的,不然一碰就地震了hhh
上树了怎么办
A: 修改层级排序设置(Edit-Project Settings-Graphics)
修改为以y轴进行排序
修改精灵锚点
想修改树的锚点为树根,死活找不到
A: 需要直接在图片资源上修改锚点 +_+
改完之后还需要重新设置一下排序轴,不知道为啥
碰撞抖动问题
是因为刚体进行物理运动,碰撞时与精灵本身移动会产生误差,因此精灵和刚体不停进行位置矫正,导致抖动
A:使用刚体位置来控制移动
// Vector2 position = transform.position;
Vector2 position = rbody.position;
position.x += moveX * speed * Time.deltaTime;
position.y += moveY * speed * Time.deltaTime;
// transform.position = position;
rbody.MovePosition(position);
改完时候性能很不好,待解决…
相机跟随
先要下一个Cinemachine包(Window-Package Manager-Cinemachine), 可以自动控制相机
相机边界
人物走到边界时就会看到边界外边,希望相机到边界就不要移动了
A: 在跟随相机中添加相机边界组件(Cinemachine Virtual Camera-Add Extension-Cinemachine Confiner)
再添加一个空节点,添加自定义形状的碰撞盒组件Polygon Collider 2D,将盒子覆盖整个地图上(如图)
将这个节点拖动到相机边界组件Bounding Shape 2D属性上
就Ok了
代码模板
写了一个代码模板
{
"Initial Code": {
"prefix": "ucs",
"body": [
"///<summary>",
"///Author: Qiu",
"///Describe: $1",
"///</summary>",
"",
"using System.Collections;",
"using System.Collections.Generic;",
"using UnityEngine;",
"",
"public class $TM_FILENAME_BASE : MonoBehaviour",
"{",
"\tvoid Start()",
"\t{",
"\t\t$2",
"\t}",
"\tvoid Update()",
"\t{",
"",
"\t}",
"}",
],
"description": "cocos creator common template"
}
}
碰撞检测
吃草莓
/// <summary>
/// 碰撞检测,开始碰撞时回调
/// </summary>
/// <param name="other">碰撞物体</param>
void OnTriggerEnter2D(Collider2D other)
{
PlayerController pc = other.GetComponent<PlayerController>(); // 检测是否有PlayerController脚本
if (pc != null)
{ //是和任务碰撞的
Debug.Log("把它吃掉!");
}
}
进入陷阱
当人物进入陷阱中不走动时,此时不会进行碰撞中回调,需要在任务刚体组件中Sleeping Mode选择Never Sleep
/// <summary>
/// 碰撞中回调 每一帧调用一次
/// </summary>
/// <param name="other">碰撞物体</param>
void OnTriggerStay2D(Collider2D other)
{
PlayerController pc = other.GetComponent<PlayerController>();
if (pc != null)
{
pc.changeHp(-1);
Debug.Log("啊!当前血量:" + pc.myCurHp);
}
}
修改精灵显示范围
想要将陷阱的范围变大,直接拉回变形
A: 需要先在陷阱图片中改变属性
再改变陷阱节点的渲染模式
最后用Rect Tool就可以拉大范围了
动画面板按钮灰色
想编辑动画,但按钮都置灰了
A: 需要选中所编辑的节点
动画修改帧数
A: 动画面板x按钮下方的三个点,选择Show Sample Rate
添加混合树
这块没太懂。。
添加特效
添加节点-Effect-Praticle System
各种属性可以调节 比较多。。。慢慢了解吧
小问题:新建的脚本引入不了其它脚本类
A: 可能开启时间太长了?重启下VSCode就好了
添加音效
添加背景音乐
添加音效
private AudioSource audioS; //音效组件
void Start()
{
audioS = GetComponent<AudioSource>();
}
/// <summary>
/// 播放音效
/// </summary>
public void AudioPlay(AudioClip clip)
{
audioS.PlayOneShot(clip);
}
设置音效近大远小
引擎666
给机器人添加了脚步声的音效,正常播放的话就会很吵
在音效组件下设置声音传播范围
但此时听不到声音,因为Audio Listener目前是挂载在主相机下的,而主相机在z轴-10的位置
所以解决办法是:在关闭主相机Audio Listener组件,在主相机下新建一个空节点,挂载上Audio Listener组件
OK~~
弹幕里说挂载在主角下更好??
打包
在File-Build Setting打开窗口
设置完成后点击Build按钮,选中新建build文件夹,就等编译完成啦
但还是会有一些问题。。。