Unity2D开发日志一

关于场景搭建

空气墙:即一个赋予了碰撞箱的空物体

给空物体赋予组件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.实现原地待机和跑步动作之间的切换

  1. 在动画组件中的running与idle间建立箭头联系
  2. 在Animator中创建一个bool的变量,记为run
  3. 取消idle与running间的过渡动画:点击箭头,取消其中Has Exit Time选项
  4. 当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(平滑阻尼)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值