![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity学习
我寄人间雪满头丶
劝君莫惜金缕衣,劝君惜取少年时。
展开
-
Unity关于Addressables.Release释放资源内存问题
使用释放资源时,通过MemoryProfiler检查内存信息发现加载的内容还在内存里面,经过一系列测试加上阅读文档和搜索资料后得出以下结论。1.资源引用计数未清零。每次通过Addressables加载资源会增加该资源引用计数,使用可以减少计数,直到计数清零才会释放该资源。2.Addressables.Release是异步操作。因为我写的资源管理器是对加载资源进行缓存的,不会重复加载,但是调用Release内存中依然保留了该资源。原因是因为是一个异步操作,即使释放了也不会马上清除内存,这时如果我们调用。原创 2024-06-25 15:34:30 · 390 阅读 · 0 评论 -
Unity定时(延迟)管理器实现
Unity中实现定时功能的方法有很多,比如协程、UpdateInvokeAsync等,可以说是五花八门,对于这类实现方法多、需求频繁的功能还是需要一个管理器来统一处理。原创 2024-06-21 14:24:30 · 360 阅读 · 0 评论 -
Unity中实现捏脸系统
以上就是捏脸系统的实现,也可以通过该方案捏身材。原创 2024-01-21 20:27:08 · 1406 阅读 · 0 评论 -
C#中枚举Enum特性Flags和Enum.HasFlag(Enum)用法
学习前需要了解位运算相关知识点。原创 2023-12-21 20:12:48 · 1236 阅读 · 0 评论 -
Unity内打开网页的两种方式(自带浏览器、内嵌浏览器)
这个比较简单,直接调用unity官方的API即可,会直接使用默认浏览器打开网页,这里就不多做解释了。另一种方案是使用unity store里的插件实现的。实现具体需求参考插件文档即可,还是蛮详细的。使用该插件不会切出APP。原创 2023-11-01 17:34:39 · 4332 阅读 · 0 评论 -
Unity 显示Raycast Padding区域
Raycast Padding 是一个在Unity2020.1左右添加的功能,它可以让你在不改变RectTransform的值的情况下,调整Image或Text等UI对象的射线检测区域。你可以设置四个参数来控制上下左右的边距。这个功能很实用,在推出这个功能之前如果遇到点击区域过大或者过小的问题,只能通过新建Image并设置透明来做正确的点击区域。但是这个功能有个鸡肋的地方,就是无法通过视图Scene显示直观的知道区域变化(吐槽一下官方怎么没考虑到这个问题,很多开发者在论坛反馈)。原创 2023-04-25 22:08:17 · 1469 阅读 · 1 评论 -
Unity 位运算介绍及使用
位运算是指对二进制数的位(bit)进行操作的运算符,可以实现一些高效的逻辑和数学运算。:只有两个位都是1,结果才是1;:只要两个位有一个是1,结果就是1;:如果位为0,结果是1,如果位为1,结果是0;:两个操作数的位中,相同则结果为0,不同则结果为1;:左移表示乘以2,左移多少位表示乘以2的几次幂;:右移表示除以2,右移多少位表示除以2的几次幂;:无论左侧操作数的类型如何,高顺序空位位置始终设置为零。原创 2023-04-19 10:27:35 · 1408 阅读 · 1 评论 -
Unity 使用RenderTexture显示黑屏、重影、锯齿解决方法
脚本new一个纹理贴图,而不是用序列化拖拽的RenderTexture。调整RenderTexture的antiAliasing抗锯齿参数即可。抗锯齿值必须是(1, 2, 4 或者 8)之一,表明每像素样本的数量。只需要将Camera的Clear Flags设置为。我择中使用的是4,在移动端上锯齿就不那么明显了。原创 2023-03-21 17:14:38 · 3570 阅读 · 3 评论 -
Unity 2020 URP Camera UI相机问题
现在正在开发中的项目使用的URP,发现相机结构有变化直接使用场景相机和UI相机无法正常显示。原创 2022-12-09 14:43:49 · 3239 阅读 · 5 评论 -
Unity ILRuntime Debugger使用及常见问题
ILRuntime支持在VS中断点调试,说一下ILRuntime Debugger的使用及常见问题。原创 2022-12-07 16:11:30 · 2113 阅读 · 1 评论 -
Unity实现Text BestFit文本超框时再缩小字体
因为要做多语言自适应功能,但是Unity自带的BestFit超过一行后就会自动缩小字体,想要的效果是文本满框后再缩小字体,所以需要重写OnPopulateMesh绘制部分。原创 2022-09-27 11:22:10 · 2872 阅读 · 2 评论 -
Unity截图功能并使用UI显示
最近在做一个房间装修项目,有一个功能需要对比装修前后的效果,经过考虑决定使用截图功能制作。原创 2022-07-15 15:11:34 · 1376 阅读 · 0 评论 -
Unity项目性能优化整理
1.Mono下减少foreach使用,频繁调用容易触及堆上限,导致GC过早触发,出现卡顿现象。尤其是Update中如果非必要不要使用foreach。会产生GC Alloc。2.频繁修改的string应使用StringBuilder。3.gameObject.tag会在内部循环调用对象分配的标签属性以及拷贝额外的内存,推荐使用gameObject.CompareTag(“xxx”)来代替.tag。4.贴图压缩:(1).能使用九宫格就不要使用大图。(2).可以上tinypng网站对原始图片进行压缩。原创 2022-05-07 17:55:36 · 2354 阅读 · 3 评论 -
Unity 2D游戏跳跃优化
2D游戏跳跃下落速度问题有些2D游戏会感觉到向上跳跃和下落速度不一致,感觉下落时更干脆一些,比如马里奥,不过也跟具体的项目需求手感有关系。直接上代码。下面是优化下落速度手感的代码。using UnityEngine;public class BettlerJump : MonoBehaviour{ public float fallMultiplier = 2.5f; //下落速度倍数 public float lowJumpMultiplier = 2f; //长按跳跃原创 2022-05-04 02:52:15 · 2414 阅读 · 0 评论 -
Unity的LayoutGroup和ContentSizeFitter同时使用时,动态改变子节点不会刷新位置的问题
前言做图文混排同时用到了LayoutGroup和ContentSizeFitter组件(图文混排教程),发现带有ContentSizeFitter的Text通过代码修改文本内容后UI布局并没有自动刷新。解决方案通过ForceRebuildLayoutImmediate强制刷新UI布局。 //传入带有LayoutGroup组件对象的RectTransform UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(ui.rectTrans原创 2022-03-29 09:52:48 · 4299 阅读 · 0 评论 -
Unity使用自带组件实现图文混排自适应
1.背景图片跟随文字长度变化新建UI结构。在Image上挂载组件ContentSizeFitter和HorizontalLayoutGroup。根据需求调整跟随宽还是高,调整对应参数即可。混排的对齐方向调整父节点(例子中是名为Image的游戏对象)的Pivot即可。2.图文混排自适应示意图新建UI结构。在Image上挂载组件ContentSizeFitter和HorizontalLayoutGroup。根据需求调整跟随宽还是高,调整对应参数即可。但是我们会发现Icon上的Imag原创 2022-02-21 18:17:49 · 4076 阅读 · 1 评论 -
Unity粒子特效UI层级问题
前言方案一,使用shader解决下面介绍下用unity自带组件处理粒子特效层级问题。可以先了解下相关知识。Unity中Depth、SortingLayer、Order in Layer和RenderQueue的讲解解决方法通过给UI添加Canvas组件然后调整Order In Layer实现层级区分,如果UI没添加Canvas的话默认和父级Canvas中的Order In Layer保持一致。Order In Layer越大就显示在越上层。粒子特效中也有Order In Layer选项,根据具原创 2022-02-21 17:40:26 · 9618 阅读 · 0 评论 -
Unity 背景图片自适应Text长度
前言用Unity自带插件也可以实现同样效果,不过封装成脚本使用更方便。效果使用方法给Text组件挂上UIChildSizeMgr脚本和ContentSizeFitter组件,设置如图所示,文字图片对齐方向调整锚点即可。一个Text组件可以关联多个对象,具体参数根据需求调配。代码using System;using System.Collections.Generic;using UnityEngine.UI;using UnityEngine.EventSystems;using S原创 2022-02-17 09:25:31 · 2567 阅读 · 2 评论 -
Unity将物体绑定在spine动画骨骼节点上
实现1.在目标spine动画下新建一个空物体。2.给空物体添加BoneFollwer脚本(sprite动画添加BoneFollwer, ui动画添加BoneFollowerGraphic)。此时spine动画上会显示出骨骼节点。3.选择需要挂载的目标骨骼节点。此时运行会发现挂有该脚本的物体会跟随选中的骨骼节点移动。4.给挂有脚本的物体下附加目标即可完成跟随。代码写个管理器方便使用。using Spine.Unity;using System.Collections;using原创 2022-01-25 18:31:11 · 7978 阅读 · 0 评论 -
Unity Sprite层级显示管理
Unity2.5D Sprite层级显示遮挡问题处理转载 2022-01-11 09:56:29 · 774 阅读 · 0 评论 -
Unity通用红点系统实现,支持自定义红点效果
效果原理学习了知乎大佬放牛的星星的红点系统。因为看到评论区有说不能动态添加移除红点所以在这基础上进行了改进。原理比较简单,其实就是实现了一个从上到下的树状数据结构,通过给每个节点注册事件来实现不同的红点效果。如果没有数据结构基础建议先了解一下数据结构更方便理解。代码下面是核心代码。using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Linq;public cl原创 2022-01-04 17:54:28 · 3572 阅读 · 3 评论 -
Unity Fingers Gesture手势插件教程(新)
前几天Unity资源商城搞活动白嫖到了这个插件,但是看了下网上的教程都是比较旧的版本,所以决定学习记录一下。原创 2021-12-03 17:46:43 · 7221 阅读 · 0 评论 -
Unity检测IOS刘海屏
public bool CheckIphone() {#if !UNITY_EDITOR && UNITY_IOS string modelStr = UnityEngine.SystemInfo.deviceModel; if (modelStr == "iPhone10,3" || modelStr == "iPhone10,6" || modelStr == "iPhone11,2" || modelStr == "iPhone11,6...原创 2021-12-01 14:22:31 · 4655 阅读 · 0 评论 -
Unity从相对角度较小的一侧转向目标方向
首先获取目标角度。Vector3.Angle只能获取角度差,所以需要用叉乘判断转向。Vector3.Cross float GetTargetAngle() { var angle = Vector3.Angle(Vector3.forward, target.position - transform.position); if (Vector3.Cross(Vector3.forward, target.position - transform.posit原创 2021-11-30 18:07:08 · 421 阅读 · 0 评论 -
Unity实现UI在屏幕边缘跟随并指向视野外敌人
最终效果实现心急的小伙伴可以直接跳到文章末尾查看最终代码,如果有问题再来看下思路。首先我们需要确定实现思路。我想到的方案是将玩家和敌人的世界坐标转换为UI坐标,然后求玩家和敌人坐标的线段与Canvas边界的交点即为箭头坐标。下面是求出交点的代码。using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class FindTest : M原创 2021-11-29 18:09:16 · 5256 阅读 · 0 评论 -
Unity简单实现模型描边Outline
最终效果描边前描边后实现前往AssetStore,搜索免费插件Quick Outline并导入。商店链接需要描边的物体添加Outline脚本并启用即可。关闭描边可以通过禁用或移除Outline脚本。Outline脚本参数OutlineMode:描边类型,可以设置描边全部显示,不显示遮挡部分,只显示遮挡部分等。OutlineColor:描边颜色。OutlineWidth:描边宽度。具体可以参考QuickOutline场景。示例下面是项目中写的显示选中物体描边的功能。这里是利原创 2021-11-29 16:30:28 · 7042 阅读 · 3 评论 -
Unity解决点击UI穿透触发collider OnMouse事件的问题
前言遇到了点击UI同时触发UI下面collider的OnMouse事件的问题。解决方法1.以前看过一点UGUI的源码,其实无论是UI点击检测还是OnMouse事件都是通过射线检测触发的。我们可以通过在OnMouse事件里加上!EventSystem.current.IsPointerOverGameObject()判断。如果collider上面点到了UI EventSystem.current.IsPointerOverGameObject()就会返回true,所以这里要取反。2.但是我遇到的情况原创 2021-11-22 00:52:51 · 1814 阅读 · 0 评论 -
Unity简单实现多管血条
效果代码我这里是提前准备了两根血条一红一紫,也可以自定颜色改Color即可,自行拓展。 //参数分别为最大生命值,当前生命值,表现为几管。 public void SetHP(float maxHP,float currentHP,int hpCount) { //如果满血就初始化,不是满血就更新血条 if(maxHP == currentHP) { this.maxHP = maxHP; co原创 2021-11-04 14:33:10 · 2392 阅读 · 0 评论 -
Unity处决动画实现思路
前言不只是处决动画,只要是需要多个动画目标配合的都可以参考下面的思路。方案一去除掉动画的位移部分(xz),在合适的时机移动到固定的位置双方同时播放动画。比如实现下图中狼和鹿的捕猎动画,我的做法是在要开始播放处决动画之前先让狼位移到固定位置,让鹿和狼的朝向保持一致,然后再播放动画。方案二像需要位移的动画就没办法使用上面的方法了,速度不好控制而且容易穿帮。一般的做法是在移动一方的骨骼动画上让美术同学特别设置一块骨骼用来控制对方的位移。比如播放动画时让不移动一方设为该骨骼的子物体,或者是加上约束都可原创 2021-11-04 12:01:05 · 3568 阅读 · 0 评论 -
UnityAnimator游戏运行后动画不播放
问题动画预览正常,运行后观察Animator正常执行动画,但是场景中没有播放动画。解决方法将Animator的CullingMode改为AlwaysAnimate。原创 2021-10-28 11:39:27 · 5420 阅读 · 4 评论 -
Unity利用shader实现自定义扇形技能范围显示
最终效果用法1.创建一个Plane2.创建一个Material3.创建一个Shader,内容如下:// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/Indicator" { Properties{ _MainTex("Main Texture", 2D) = "white" {} _Color("Color", Color) = (0.原创 2021-10-22 11:04:40 · 1925 阅读 · 2 评论 -
Unity简易实现角色脚下光圈
方案一:使用Projector投影最终效果准备工作1.一张背景为透明的圆圈图案。我这里是从阿里巴巴矢量网搜索圆圈下载到的。2.Standard Assets资源包去AssetStore下载通用资源包,需要用到里面的light shader。具体操作创建个空物体并挂载Projector组件,具体属性可以参考中文文档,和相机差不多。然后创建一个材质球,选择light shader,将圆圈图片赋值给Cookie和FallOff。圆圈图片TextureType设置为Lightmap。原创 2021-10-21 18:59:58 · 4500 阅读 · 1 评论 -
Unity汽车漂移轮胎印胎痕效果实现
我是使用拖尾组件实现的漂移胎痕。效果拖尾制作:代码:using System.Collections.Generic;using UnityEngine;using UnityEngine.Animations;public class TrailMgr : MonoSingleton<TrailMgr> //继承单例,可自己实现{ private float time; //拖尾持续时间 private Transform parent; //放置拖尾的父原创 2021-10-11 18:42:48 · 2313 阅读 · 1 评论 -
Unity中获取触发器触发点和碰撞器触发点
触发器不能直接获取碰撞点,但是可以通过获取离边界最近的点来判断。 private void OnTriggerEnter2D(Collider2D other) { hitPos = other.bounds.ClosestPoint(transform.position); print("碰撞点" + hisPos); }碰撞器可以直接取到碰撞点 public virtual void OnCollisionEnter(Coll原创 2021-10-11 14:31:41 · 7051 阅读 · 1 评论 -
Unity中UI的LookAt效果实现
代码: //参数分别为:1.UI修改目标的Transform 2.朝向向量 3.起始向量 public void UILookAt(Transform transform, Vector3 dir, Vector3 lookAxis) { Quaternion q = Quaternion.identity; q.SetFromToRotation(lookAxis, dir); transform.rotation = q; }原创 2021-10-11 14:12:37 · 1207 阅读 · 0 评论 -
Unity铰链位移或被挤压后偏移
1.用代码或组件进行位置约束。2.将ProjectSettings->Time->Fixed Timestep设置小一些。我就是用的这种方法,默认0.02改为0.01这种情况就很少见了。如果有其他解决方法欢迎补充。原创 2021-10-08 18:21:47 · 409 阅读 · 0 评论 -
Unity实现简单技能冷却管理器
前言这段时间做技能系统,需要实现技能冷却。如果每个技能都写一段计时器代码的话重复性太高而且还不方便管理,于是根据使用到的功能写了个简单的冷却管理器统一处理。实现代码很简单,理解思路即可。这里我方法中传的key为了方便管理和传参使用的枚举,可以使用字符串替换。using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Linq;public class CDMgr : Mo原创 2021-09-18 10:42:20 · 1504 阅读 · 2 评论 -
Unity中关于WheelCollider组件的使用
基本使用方法可以参考官方中文文档WheelCollider。下面补充一下我自己开发中用到的点和踩到的坑。车子的滑动惯性:加大 WheelCollider.wheelDampingRate车子上坡下滑:1.正向前(Z)上坡加大 WheelCollider.forwardFriction.asymptoteValue,倒车(-Z)上坡加大WheelCollider.forwardFriction.extremumValue2.减小车身的mass,增加车轮的mass3.再调节WheelCollid原创 2021-09-15 11:50:40 · 2467 阅读 · 5 评论 -
Unity世界坐标与本地坐标的相互转换
1.本地坐标转世界坐标transform.TransformPoint(本地坐标); //返回世界坐标2.世界坐标转本地坐标transform.InverseTransformPoint(世界坐标); //返回本地坐标原创 2021-09-13 14:55:13 · 4674 阅读 · 0 评论 -
unity汽车引擎音效变调实现
前言最近在做汽车模拟游戏,需要给汽车加音频。但是音频资源只有三个,分别是启动声、驾驶前待机和驾驶中。但是玩别的开车游戏驾驶时音效是随着汽车速度改变的,如果只用固定的音效会显得很违和。原理通过调整AudioSource组建的pitch属性值(音高)来达到引擎跟随车速变调的目的。实现可以根据车轮的扭矩力、车速、给车的力等来调整音高。我使用的是给车轮的扭矩力。 private AudioSource engineAudio; public void FixedUpdate() {原创 2021-09-10 16:54:31 · 998 阅读 · 0 评论