Unity2D教程
文章平均质量分 63
JK Chen
ACM退役选手,战绩4金6银
展开
-
Unity2D游戏学习
Unity2D教程:人物移动Unity2D教程:地图制作TilemapUnity2D教程:预置物PrefabsUnity2D教程:碰撞器Collider,抖动问题,人物旋转问题Unity2D教程:相机跟随Unity2D教程:物品拾取、Trigger、计时器Unity2D教程:添加敌人、简单动画、动画结束后销毁对象...原创 2020-06-25 18:28:33 · 2517 阅读 · 0 评论 -
Unity:帧 timeScale Update 生命周期 Update优化(干货集合)
本文内的大致机制是个人凭借理解的经验之谈,也就是说如果我来写这个功能应该怎么写,不一定对,借鉴一下就行文章目录帧Application.targetFrameRate (fps)Time.frameCount游戏时间Time.timeScaleTime.deltaTimeTime.timeTime.realtimeSinceStartupUpdateUpdateLateUpdateFixedUpdate生命周期GameObject首次Active=true时Active=true时每帧调用非首次Act.原创 2020-12-15 23:05:55 · 2927 阅读 · 0 评论 -
Unity游戏时间管理类、光照随时间变化
游戏的时间与系统时间肯定是不一样的,我采取的是现实世界的一秒钟为游戏内的一分钟。实际维护上一次保存的游戏时间和载入存档的系统时间,那么当前的游戏世界就是【当前的系统时间-载入存档的系统时间】的秒数作为分钟数加到保存的游戏时间即可。/* * Author : Jk_Chen */using System.Collections;using System.Collections.Generic;using UnityEngine;[System.Serializable]public原创 2020-12-15 20:54:50 · 1698 阅读 · 0 评论 -
Unity2D:资源保存,AssetBundle
AssetBundle可以看成类似Zip的压缩包,可以打包任何资源,相对于Resources更加灵活资源AssetBundle编辑左边是包名,右边是后缀名(可以为空)脚本在工程文件夹里面的任意位置创建一个Editor文件夹后,会默认此下的脚本为编辑器脚本(始终处于运行状态)创建一个脚本AssetBundleHelper/* * Author : Jk_Chen */using UnityEditor;using UnityEngine;using System.IO;原创 2020-12-07 11:46:54 · 971 阅读 · 0 评论 -
Unity2D:协程、yield return、IEnumerator
使用场景有些功能可能需要一些时间完成,但是我们不希望看到主进程也就是你的游戏界面卡住,所以使用协程与主进程独立运行。距离需要做延时执行效果Unity里面需要MonoBehaviour才能使用StartCoroutine启动协程 /// <summary> /// 开始协程 /// </summary> /// <param name="action"></param> public void _StartCo原创 2020-12-07 09:39:34 · 763 阅读 · 0 评论 -
Unity2D:使用序列化的存档机制 Serialize
文章目录序列化游戏机制介绍最后用文件存储序列化后的二进制文件序列化在定义一个类的时候在类前面加上[System.Serializable]即可使之可序列化。 [System.Serializable] class V3 { public float x; public float y; public float z; public V3(Vector3 v3) { x = v3原创 2020-12-07 07:48:20 · 1134 阅读 · 0 评论 -
Unity2D:灯光系统
之后创建的Sprite的默认材质变为了Sprite-Lit-Default(需要光照射)一键设置场景内的精灵材质点光源为了让没光的地方不至于看不见加个全局灯精灵灯另外两个是自定义灯和多边形灯原创 2020-12-05 17:34:08 · 2259 阅读 · 0 评论 -
Unity2D:Tip提示窗口制作(自适应大小Text、屏幕坐标转UI坐标)
效果:原理第一个Text加上Content Size Fitter后已经可以自适应文本大小了,但是这个时候只是文本。所以我们给它加一个Image,设置伸展方式使其填充整个文本框。但是这个时候Image又会遮挡住文本框,所以我们再加一个文本框,内容和之前的一样即可。由于伸展,所以Image图片最好选择单色调,或者自己修改Image的图像类型。结构第一个也是Text第一个Text第二个TextImage...原创 2020-12-02 11:58:08 · 1481 阅读 · 0 评论 -
Unity2D:敌人AI行动(Idle、向玩家走、A*寻路、射线检测)
由于敌人自己有一个Collider2D所以需要layer排除Enemy层。 /// <summary> /// 检测是否可以感知 需要2维Collider /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="maxDis"></param>原创 2020-12-01 19:51:35 · 5620 阅读 · 1 评论 -
Unity2D:自动寻路插件A* Pathfinding教程——实际运用与编程
先上Graph图和配置注意Diameter是用来检测是否可以通过的直接需要考虑AI对象的碰撞器大小,以免测试通过但是卡住过不去。这是AI对象的组件AI代码(向鼠标单击右键的地方移动)杂揉了更新动画的代码,不能拿来直接用,就参考一下吧/* * Author : Jk_Chen */using System.Collections;using System.Collections.Generic;using UnityEngine;using Pathfinding;pu原创 2020-11-30 21:05:59 · 3848 阅读 · 1 评论 -
Unity2D:从Gif转png,再到Animation
Gif文件拖入PhotoShop后按照帧生成图层全选图层后右键 - 快速导出为png将导出的png导入到Unity你的文件夹内再全选后拖入场景会自动创建动画和动画控制器原创 2020-11-30 16:01:08 · 1640 阅读 · 2 评论 -
Unity2D:自动寻路插件A* Pathfinding教程——Graph建立
官网:http://arongranberg.com/astarPackage下载链接:https://pan.baidu.com/s/1YyQvG-lumnUWM9H0gEd3Nw提取码:0000导入双击文件,全部import创建一个空对象,添加脚本:PathfinderGraphs - Add new graph配置如下开启Gizmos点击Scan检测效果注:我在对象的底部加了Collider 2D这次是玩家的寻路!!!Layer设定在游戏中,我们可以考虑玩家被敌原创 2020-11-30 15:52:19 · 1909 阅读 · 2 评论 -
Unity:2D实现3D效果,精灵遮挡问题
效果:主要是各个物体的遮挡关系。如果按照使用Layer和Layer Sort的话两个精灵的遮挡关系便已经确认,不管在前在后。所以外面把所有精灵放在同一层,优先级也相同。那么怎么确定遮挡关系呢?我们知道,摄像机从z小的地方往z大的地方看。所以,z值越小的物体越靠前。结合尝试,想到了一个调整方法:y越大的越后面,所以我们让z与y保持正比关系即可。首先是我们的对象设置情况:Player是一个质点,带有Rigidbody2D和Collider2D质点位置:碰撞器:ZPosi原创 2020-11-27 16:41:07 · 3248 阅读 · 0 评论 -
Unity2D教程:音乐管理
/* * Author : Jk_Chen */using System.Collections;using System.Collections.Generic;using UnityEngine;public class AudioManager : MonoBehaviour{ public AudioSource audioSource; public AudioSource audioOneShot; void Start() {原创 2020-11-12 09:49:58 · 494 阅读 · 0 评论 -
Unity2D教程:生成滚动列表
关注专栏,持续更新哦教程总目录结构如下:ListPanel挂载ListUI脚本,其中Item对象为需要生成的预置物。除了Item之外还需要找到Content(设置为生成项的父亲)和Scrollbar(由于生成后会滚到中间去,设置scrollbar.value = 1滚回顶部)ScrollPanel组件及其设置:ContentPanel组件及其设置:ScrollBar组件设置:代码:/* * Author : Jk_Chen */using System.Colle原创 2020-08-16 17:46:00 · 970 阅读 · 0 评论 -
Unity2D教程:单例模式、SceneManager.LoadSceneAsync场景切换、Loading界面进度条
关注专栏,持续更新哦教程总目录单例模式一种和static方法较为类似的东西。下面两种写法的作用类似:public class Config{ public static int a; public static void F(){};}// 调用Config.a;Config.F();public class Config{ private Config() { } public static readonly Config instance =原创 2020-07-05 10:32:15 · 3524 阅读 · 2 评论 -
Unity2D教程:安卓真机调试
手机进入开发者模式,打开USE调试,并连接上USE(需要运行通过USE安装应用)。打开Unity后,Refresh后可以看到你的手机了(手机端可以需要同意某个请求,会弹出来的)勾选这三项然后Build And Run,会生成apk并自动安装到安卓手机。在控制台中,可以看到Debug.Log()的输出,分析器里面也有内容。如果不行的小伙伴可以试试看cmd下敲入:adb forward tcp:34999 localabstract:Unity-项目名称去掉空格...原创 2020-07-04 20:00:32 · 837 阅读 · 0 评论 -
Unity2D教程:UI随屏幕缩放相关问题
设置canvas随屏幕大小缩放,匹配模式选择Expand背景图片在锚点下按住Alt选择右下角那个。效果:原创 2020-07-03 10:08:39 · 3625 阅读 · 0 评论 -
Unity2D教程:当Time.timeScale=0时完成计时器
一个很神奇的功能:暂停游戏,且1秒后自动继续游戏。用Time.timeScale=0来暂停游戏后,不管是用Timer-=Time.deltaTime还是用协程StartCoroutine来完成计时器都不行。因为上面两个方法都需要Time.timeScale。现在来用不基于Time.timeScale的方法完成计时器。Time.realtimeSinceStartup会返回从游戏开始后到现在的时间,想到了这个,我们的计时器就出来了。先设置时间点为当前时间加上暂停的间隔时间:needToUnPaus原创 2020-07-03 20:24:05 · 1893 阅读 · 0 评论 -
Unity2D教程:事件顺序、音乐播放、载入资源、游戏暂停
全是自己总结的干货事件顺序当一个GameObject首次Active=true后,会先触发Awake函数,再触发Start函数,之后每帧触发Update函数。不管是在游戏内通过SetActive(true)来激活,还是本身已经激活,触发的顺序都为:Awake,OnEnable,Start。之后每次SetActive(false)触发OnDisable,每次SetActive(true)触发OnEnable。音乐播放游戏内部音乐从时间长度分为两种:短音乐和长音乐。短音乐通过获取AudioSo.原创 2020-07-03 19:00:46 · 1169 阅读 · 1 评论 -
Unity2D教程:菜单界面、文字设置、常用界面功能
菜单界面创建一个UI-Image,会自动生成Canvas。设置Canvas的设置模式为随屏幕改变设置Image的伸展模式,在这个界面按下Alt键会变成这样,选择右下角那个就是填充整个Canvas了在当前Image下创建Button,将Button下面的Text和Button自身都弄成预置物Text可以加一个Outline组件更加美观,并且设置为居中效果常用按钮事件绑定按钮事件,把下面的脚本挂到Image下,通过public获取按钮对象。/* * Author :原创 2020-06-30 19:14:28 · 4772 阅读 · 0 评论 -
Unity2D教程:通过摇杆控制人物移动
创建摇杆还是要提醒一下Canvas设置size随屏幕大小变化而变化。创建UI内的Image,设置为摇杆背景。需要设置锚点为左下角。在Rocker下再创一个Image,RockerCenter。锚点要在正中间。创建脚本ScrollCircle,并给Rocker。using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;using原创 2020-06-26 11:11:04 · 3580 阅读 · 2 评论 -
Unity2D教程:人物状态条(头像、生命值、魔力值)
UI里面创建4个Image,代表背景框、血条、蓝条、头像。改变source image,并按下set native size恢复到原始大小由于固定于左上角,所以设置锚点为左上角人物状态栏最好设置大小随屏幕大小而改变设置血条蓝条变动,这样设置后fill amount减少后会从右边开始减少,并且左边的部分不会变动。Player下面通过脚本修改amount为health/maxHealth,蓝条同理(通过tag来找到血条)GameObject healthBar..原创 2020-06-25 18:57:53 · 2828 阅读 · 1 评论 -
Unity2D教程:人物移动动画,动画状态机之间的转化,BlendTree,动画卡顿问题
2D像素人物可以通过抬左脚和抬右脚以及原画三种照片完成动画效果把这三种图片水平翻转后,你就得到了所有需要的素材最简单的正常动画逻辑需要4个动画,左idle,右idle,左walk和右walk。idle直接让4张相同的原画就行walk则是左脚右脚左脚右脚左脚右脚,重复是为了看起来流畅点(1秒6个关键帧)状态机的转换需要想一下我们设置了2个参数,speed和lookLeft,表示速度和朝向。idle到walk:检测到speed>0.5触发,根据朝向判断哪个..原创 2020-06-25 18:45:23 · 4901 阅读 · 0 评论 -
Unity2D教程:添加敌人、简单动画、动画结束后销毁对象
添加敌人添加一个敌人加上Collider 2D用OnCollisionEnter2D来给予伤害,这些都比较简单不仔细说了。private void OnCollisionEnter2D(Collision2D collision) { Player p = Helper.GetPlayerByCollision2D(collision); if (p == null) return; p.HealthChange(-damege);原创 2020-06-25 18:20:34 · 3643 阅读 · 0 评论 -
Unity2D教程:物品拾取、Trigger、计时器
物品若无法拾取也不会阻碍人物行动,所以设置为Is Trigger。上代码Helper.csusing System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 帮助类/// </summary>public class Helper : MonoBehaviour{ // 获取Collider2D collision所对应的PlayerHe原创 2020-06-24 21:22:52 · 2582 阅读 · 1 评论 -
Unity2D教程:相机跟随
导入包:Cinemachine(install并import)原创 2020-06-24 17:06:50 · 2087 阅读 · 0 评论 -
Unity2D教程:碰撞器Collider,抖动问题,人物旋转问题
人不能进到树里面,所以需要相互碰撞来杜绝这个现象给人和树添加Collider 2D,点击Edit Collider修改碰撞器的位置和大小。2D下一般以下半部分作为碰撞区域,比较真实。添加Rigidbody 2D,让你的游戏对象被物理引擎所控制,它能通过受到推力和扭力来实现真实的物理表现效果。所有游戏对象必须包含刚体组件来实现重力、通过脚本施加力、或者与其他对象进行交互。该场景不需要重力,设置Gravity为0。且不希望人物旋转,所以锁定Z轴。此时人和树就会分隔开了,但是碰撞原创 2020-06-24 16:00:02 · 5181 阅读 · 0 评论 -
Unity2D教程:预置物Prefabs
当有很多同一对象(多棵树)时,每棵树除了位置不同,其他都相同。且在之后的设计中,改变了一个就可以同时改变其他的,这便是预置物的好处。在Assets下面创建Prefabs文件夹。将Scene下面的对象拖到该文件夹下面就可以使其变为预置物(变为蓝色)。可以直接从文件夹内将预置物拖出。之后对一个进行修改后(除了位置),可以直接apply修改所有的预置物(文件夹下面的那个也会变)...原创 2020-06-24 15:36:26 · 1192 阅读 · 0 评论 -
Unity2D教程:地图制作Tilemap
Assets下创建一个Tiles文件夹,等会所有的资源都保存在这里创建地图创建地图调色板将图片拖入Images文件夹可以设置将该图片分为几块设置单元格对应的像素,比如图片是200200像素,分成22块,所以单个unit是100画板使用选中一种后使用工具在Tilemap里面画就行了,工具前面两个不清楚,后面依次是画一格,画一个矩形,在Tilemap里面选中,橡皮擦,填充一块区域。...原创 2020-06-24 14:29:15 · 6363 阅读 · 0 评论 -
Unity2D教程:人物移动
按键自带的Input有GetAxisRaw来获取按下按键后所对应的值,Input.GetAxisRaw(“Horizontal”)在按下D或右箭头返回1,A或左箭头返回-1;Input.GetAxisRaw(“Vertical”)同理。Input.GetAxis会根据按下时间返回小数,类似于有了加速度 float moveX = Input.GetAxisRaw("Horizontal"); float moveY = Input.GetAxisRaw("Vertic原创 2020-06-24 14:10:13 · 15169 阅读 · 3 评论