
Unity技术
神一般的狄狄
....字数不够我的签名...............
展开
-
留个档,Unity Animator state节点的Motion动态替换AnimationClip
利用AnimatorOverrideController,GetOverrides 和 ApplyOverrides,对Animator的state进行大量替换。原创 2023-06-20 10:01:53 · 2647 阅读 · 0 评论 -
留个档,Unity 一个简易的红点树功能实现。(两大段,C#版本 和 xLua版本)
一个简易的红点树功能实现原创 2023-03-01 12:26:47 · 731 阅读 · 0 评论 -
留个档,Unity Navigation. 动态创建NavMesh,动态Bake NavMesh, 动态烘培NavMesh
运行时,动态创建NavMesh,动态Bake NavMesh, 动态烘培NavMesh。根据unity官方的demo,解析一下,发现动态创建NavMesh导航并不难.简化写法如下,是不是需要缓存某些信息,就看具体逻辑实现了。其实只需要 网格信息,还有 需要创建的范围即可。可以认为是固定公式了。原创 2022-12-29 20:32:39 · 1773 阅读 · 1 评论 -
造个轮子,Unity UGUI 循环对象池ScrollView
造个轮子,Unity UGUI 循环对象池ScrollView。只用Mask做显示切割,不依赖其他任何UGUI控件,一个纯粹的轮子。原创 2022-08-18 10:57:25 · 1043 阅读 · 0 评论 -
留个档,Unity下,Windows和MacOS快捷打开persistentDataPath缓存目录代码
unity快捷打开缓存目录原创 2022-07-14 14:28:39 · 1144 阅读 · 0 评论 -
留个档,Unity下,利用TexturePacker命令行自动化创建图集
需要大量处理优化合并工作的时候,筛选图片后一个一个去点,再处理引用太过于麻烦,于是需要接入一个可以unity里面操作Pack图集的方案。so就有了下面的代码。TexturePacker的命令行太复杂了,于是找个简单的办法,我们可以自由的操作文本,那么先做好tps配置,让TexturePacker去Publish就好了。注意一点: tps文件有格式要求需要无bom的UTF8<?xml version="1.0" encoding="UTF-8"?><data version="1.原创 2021-12-22 17:55:30 · 2480 阅读 · 0 评论 -
ParticleSystemRenderer.sharedMaterial赋值新材质无效问题记录
错误写法ParticleSystemRenderer psr = gameObject.GetComponent<ParticleSystemRenderer>();psr.sharedMaterials[0] = newMat正确写法ParticleSystemRenderer psr = gameObject.GetComponent<ParticleSystemRenderer>();Material[] arrMat = psr.sharedMaterials原创 2021-12-22 17:49:25 · 477 阅读 · 0 评论 -
留个档,Unity的资源反向引用查询
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using System.IO;using System.Linq;using System;using System.Text;using System.Reflection;public class ReverseDependencies{ [MenuItem("优化工具/反向引用/刷新"原创 2021-12-15 17:42:25 · 2454 阅读 · 0 评论 -
留个档,Unity的Xcode后处理
using UnityEditor;using UnityEditor.Callbacks;using UnityEditor.iOS.Xcode;using UnityEngine;[PostProcessBuild(999)]public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)获取 子工程GUIDstring projPath = PBXProject.GetPBXPro原创 2021-11-19 11:52:58 · 5423 阅读 · 0 评论 -
xcode学习笔记
ins分享:遇到很神奇的问题,游戏是横屏,用documentController处理分享,会出现 帖子没有键盘,快拍布局错误,按钮点不动的情况。于是尝试使用 外链命令的方法,发现没有直接的图片上传命令可以用。外链拉起后,默认选取相册第一张照片。 所以有了下面的尝试。尝试了UIKit的方法//UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), Docum原创 2021-11-18 17:45:20 · 4365 阅读 · 0 评论 -
留个档,MonoBehaviour对象池
using System.Collections;using System.Collections.Generic;using UnityEngine;public class MonoPool<T> where T : MonoBehaviour{ private bool m_isAutoActive = false; // 自动Active, 获取true,释放false // 注: 大量SetParent会导致性能降低 private Transform m_tra原创 2021-09-29 17:04:51 · 263 阅读 · 0 评论 -
增量资源热更以及版控方案
例如,需要下载5000个文件,那么下载第4998,4999个文件的时候,按照常规的WriteAll保存方法,重复写入之前4000多条记录。常规的解法,是路径唯一,当玩家请求的站点不存在资源,那就会从源站点抓取。所以在增量版控的设计里,每一个版本的路径都是唯一的,旧版本的资源不需要动,新版本是新路径,就能保证玩家下载的资源一定没有问题。所以可以理解为,用文本冗余导致的加载本地记录IO带宽增加,和解析本地记录的耗时,来兑换运行时的写入效率。这样玩家下载资源时候,会去最近的一个站点下载,达到了加速的效果。原创 2021-09-01 14:34:34 · 327 阅读 · 0 评论 -
Unity接入AWS S3过程,AWS SDK for Unity 踩坑记录
AWS S3,亚马逊的资源服务器服务,最近在研究这一块内容。记录一下踩坑的内容。AWS SDK研究了aws sdk for unity和for .net 两部分AWS SDK的API命名不管啥平台都差不多,主要分3个系列list 查询get 获取,下载put 上传主要的接口:初始化AmazonS3Clientm_AWSClient = new AmazonS3Client(new BasicAWSCredentials(strAccessKey, strSecretKey), reg原创 2021-09-01 11:18:10 · 1996 阅读 · 0 评论 -
[一个小测试]Unity SceneManager的Unload能不能卸载被挪出Scene的节点
因为SceneManager里面有Unload的API,所以就突发奇想了一个问题。如果当前正在运行默认场景a,然后用addtive的模式加载了一个新场景b,那么场景b里面的东西被挪走了,那么通过SceneManager.unload卸载场景的时候,会不会把被挪走的东西给卸载掉。于是做了测试:默认场景3, Addtive模式加载了场景1和场景2然后我把场景1给卸载掉,看上去卸载的很干净。在图1的基础上,我把1和4 ,2个节点挪到了默认场景3再卸载场景1.哦吼,场景1被卸载了,但是节点1 和原创 2021-07-12 16:26:58 · 1346 阅读 · 2 评论 -
留个档,毛玻璃效果
懒得百度了,留个档脚本using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class BlurMaskCtrl : MonoBehaviour{ [SerializeField] Camera m_uicamera = null; [SerializeField] RawImage m_RawImage = null;原创 2021-05-20 09:57:10 · 189 阅读 · 0 评论 -
浅谈Unity的Meta文件作用和prefab等文件文本内容解析
Unity里的所有文件都是文本格式,可以看到内容。Meta文件格式:(不同文件,可能第三行开始内容会不同)fileFormatVersion: 2guid: 8c37735a974bb7f4a8fa831a31dff02aPrefabImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant:文件导入unity之后,会自动生成meta文件。Meta文件主要记录内容是 GUID 和 文原创 2021-04-22 11:49:53 · 3802 阅读 · 0 评论 -
Unity下,在不规则斜坡上移动解决方案和推导过程
假设有一个上下的旋转楼梯,人物按照第三人称向前移动,爬上楼梯那么这个楼梯就成为了一个斜坡我们来套用 unity的常规移动方案 的话1.Transform.Translate;常规的移动方案,向前走,在斜坡的状态下,人物会嵌入地面,然后再由物理系统把人弹出地面碰撞,就会出现人物上下抖动,摄像机如果是挂在人物节点下面 跟随移动,那估计得眼花了2.Rigidbody.MovePosition3.Rigidbody.AddForce物理移动方案,是在不规则地形时比较好用的方案,但是实际使用的时候会发原创 2021-03-26 11:18:06 · 9064 阅读 · 3 评论 -
Unity,C#版的动画曲线,Tween:EaseIn,EaseOut,EaseInOut(语法逻辑整理版本,含测试代码)
前篇:Unity,C#版的动画曲线,Tween:EaseIn,EaseOut,EaseInOut(编程语言翻译版本)https://blog.youkuaiyun.com/qq_37776196/article/details/114667670整理了语法和逻辑,拆分了会让人难以理解的连写代码。我是很讨厌连写代码的, 大量的三元运算和一行代码中多个赋值操作。下面再附送一段测试代码public class Tween{ public static float GetTime(float time, floa原创 2021-03-11 16:23:02 · 2066 阅读 · 1 评论 -
Unity,C#版的动画曲线,Tween:EaseIn,EaseOut,EaseInOut(编程语言翻译版本)
原文地址:https://blog.youkuaiyun.com/jebe7282/article/details/7521067/原因是因为现在在Unity里用曲线,要不就自己AnimationCurve自己扭一个曲线出来。要不就下载插件。然鹅,插件都封装了DLL, 我只用曲线,也不需要其他功能,买个插件岂不是浪费(不喜欢用盗版)。 找到一篇不是C#的tween算法,于是进行一波翻译。public class Tween{ public static float GetTime(float time, fl原创 2021-03-11 15:19:25 · 1195 阅读 · 1 评论 -
Unity下,移动撞墙后抖动的解决方案
Unity下的移动方案:1.Rigidbody.MovePosition2.Rigidbody.AddForce3.Transform.Translate;Transform.position = vector3;目前主要分这三大类的移动方式。1和2是物理移动方式3是实体对象坐标的移动方式然后说说题目,为啥会抖动呐:public class Test : MonoBehaviour{ public float m_nSpeed = 0; void Update() {原创 2021-03-10 17:19:17 · 3240 阅读 · 4 评论 -
留个档,一篇Shader,物体坐标移动获得世界坐标下的颜色渐变
物体坐标移动获得世界坐标下的颜色渐变这个东西,东拼西凑写出来的。我不懂shader,但是知道原理。就各种百度东拼西凑,结果看上去还不错。Shader "Custom/ColorTransFromTo"{ Properties { _Color("Color", Color) = (1,1,1,1) _Color2("Color2", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} _Glossiness(原创 2021-03-09 14:54:23 · 393 阅读 · 0 评论 -
留个档,Unity自定义曲线,Unity画曲线,贝塞尔曲线
网上有很多贝塞尔曲线实现原理,这篇给自己留个档,好用就行。using UnityEngine;public class BezierCurve: MonoBehaviour{ /// <summary> /// 曲线上的点数量; /// </summary> [SerializeField] int m_nPointCount = 50; [SerializeField] Transform[] m_arrTransDocks = nu原创 2021-03-02 10:57:58 · 465 阅读 · 0 评论 -
留个档,Unity,C#,摄像机抖动 CameraShake
参考2019-03-15 【UnityTips】【曲线】 CameraShake.cs 带曲线操作的相机小恶魔作者:持刀的要迟到了链接using UnityEngine;public class CameraShake : MonoBehaviour{ private static CameraShake m_this = null; public static CameraShake Instance { get {原创 2021-03-01 18:12:03 · 324 阅读 · 1 评论 -
留个档,Unity,C#,物理抛物线计算公式,经常用一直百度公式烦死了,留个档
不是数学里的对称抛物线,是根据 加速度公式 s=v0t + 1/2vt平方,算Y轴和X轴位移, 看起来更像物理抛物线 [SerializeField] Transform m_trans = null; [SerializeField] float m_nV0 = 10; [SerializeField] Vector3 m_v3Dir = Vector3.zero; [SerializeField] float m_nGForce = -9; // 重力加速度原创 2021-03-01 14:05:41 · 718 阅读 · 0 评论 -
Unity下的UI框架的推导和搭建 以及 消息通讯机制对于解耦的实际应用
UI应该是一个独立的模块需要与其他模块之间低耦合,或者0耦合。稍微简述一下解耦和利弊:解耦通常的方案是用消息通讯机制来传递事件和数据。比较好用的方案 可以搜索看看 CSharpMessenger实现原理其实很简单,很多文章都有。是用一个 唯一key对应delegate,保存在字典里。用的时候,找到key,Invoke对应的delegate就可以了。解耦的弊端:那带来的问题是 逻辑的断层,调试时候,会发现在调用delegate这一步断开了,调试器找不到之前或者之后的逻辑,所以就需要人工的查找原创 2021-02-24 10:36:01 · 933 阅读 · 1 评论 -
留个档,批量给BuildSetting设置图片,不用手一个一个拖
直接上代码,批量给BuildSetting设置图片,不用手一个一个拖/* * Icon路径:Application.dataPath + "/Res/Icon/"; * 工程路径"Assets/Res/Icon/"下,放icon图片; * Icon文件名 : * icon32 * icon64 * icon1024 * * * BuildSetting不会自动刷新,需要关闭页签,重新打开后可以看到变化; * 实际上是Set成功的原创 2021-01-27 14:18:19 · 293 阅读 · 0 评论 -
简单易懂的Socket TCP网络通讯知识-粘包,拆包,包体长度的意义
粘包 和 拆包百度一下很多文章都有解释的链接:MSS.MTU.原因的话,就是网络层级故意给你搞的。TCP下,也没啥必要纠结这一块东西。简单来说,就是 粘包就是 接收端一次收到2个包拆包 就是 接收端里 有一个包不完整,只有一部分。拆包 和 粘包 可能混合出现。解决这个问题最好的办法,其实就是 数据包 有长度。按照长度去获取 数据包,发现包体不完整,就等下一次Check。例如完整数据包 + 破损数据包(粘包 + 拆包,经常出现 很正常)破损数据包(拆包,可能是你缓冲区太小了,单个数原创 2020-12-06 15:37:38 · 646 阅读 · 0 评论 -
简单易懂的Socket TCP网络通讯知识-消息协议和数据包
不管用的是什么样的协议方式,基本通讯的原理到底层 都是 byte[]数组 传递。1.协议的定义协议本身只是 通讯时候 前后端 定义的变量类型和顺序的集合。比如说,要做一个登陆的消息传递,需要传递的内容是帐号密码public class MsgLogin{ public string m_strIDName = null; public string m_strPassWord = null;}前后端都确认好,使用帐号密码登陆,那么这样一个类,就可以称之为一个协议了。那么原创 2020-12-06 15:12:17 · 949 阅读 · 0 评论 -
[一个小测试]Unity的AssetBundle重新引用依赖项,是否可以成功?20200727更新
最近突然想到个问题。ab加载的策略,能不能加速那。想着想着 就想到个方案:如果某个UI的Prefab:a 依赖一个图片:b,a和b都打包成ab.按照unity的ab相关文章的说法,要加载并显示出a,需要在a之前加载到b,就很多文章写的 assetbundlemanifest的用法。所以我就在想, 如果按照顺序 加载b,加载a,然后显示。这时候a不需要用了,隐藏a,卸载b。等要用了,...原创 2020-04-22 15:50:04 · 465 阅读 · 1 评论 -
留个档,动态给UGUI绑定事件的delagete工具类
直接上代码,动态给UGUI绑定事件的delagete工具类using Fox.Common;using UnityEngine;using UnityEngine.EventSystems;namespace Fox.UI.EventListener{ /// <summary> /// 事件监听类 /// 使用方法:UIEventListener.Get(gameO......原创 2019-12-10 14:54:51 · 199 阅读 · 0 评论 -
[一个小测试]Unity Coroutine协程可以包含返回值
话不多说,直接上代码:using System.Collections;using UnityEngine;public class NewBehaviourScript : MonoBehaviour{ private int m_nStep = 0; void Start() { StartCoroutine(RunCoroutine()); } ...原创 2019-12-04 16:05:21 · 3002 阅读 · 0 评论 -
UnityEditor下调用命令行编译外部sln工程
UnityEditor下编译外部sln工程。//先用File删除原来的DLL//编译DLL------------------------------------------------string strMSBuildPath = "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/MSBuild.exe";string strSlnTarg...原创 2019-09-27 11:05:10 · 891 阅读 · 0 评论 -
“SingleCoroutine”。用GameObject.Active来管理协程Coroutine的方案
因为Coroutine有各种开启方法StartCoroutine(字符串);StartCoroutine(函数);StopCoroutine(字符串);StopCoroutine(函数);StopAllCoroutines();用过就会知道 开启和停止的调用比较混乱。用字符串启动,可以用字符串停止。用函数名启动,无法用函数名停止。1.为了解决这个对应关系,所以可以考虑到Corou...原创 2019-06-26 19:27:42 · 333 阅读 · 1 评论 -
Unity下的 C# 解析XML,读取部分
Unity下的 C# 解析XML,读取部分xml解析类using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Xml;public class XmlReaderHelper{ private XmlDocument xDoc = null; private...原创 2019-06-21 14:23:10 · 461 阅读 · 0 评论 -
浅谈,Unity下,数据对象的内存管理和生命周期的概念
今天听到几个大佬在讨论内存泄漏的处理方案,不是我在的项目,我也不好多插嘴,但是不认为打补丁的方式,去找泄漏的资源和内存去卸载是个正确做法,所以分享一下我以往的内存管理的经验。从设计出发去解决问题,才是正确的处理方式。首先 内存泄漏,给内存泄漏一个定义:申请了内存,但是巴拉巴拉等等操作之后,这块内存没有在使用中,之后也无法使用到,这块内存被认为是泄漏的,这块内存被占领了,无法被重复使用了。...原创 2019-04-24 23:31:51 · 572 阅读 · 0 评论 -
unity资源的计数型AssetBundle加载管理
unity资源的计数型AssetBundle加载管理那内存管理有我们动态申请的程序运行或者计算使用的内存,还有一部分就是动态加载进来的资源的内存。那这篇说的是关于资源内存管理的。说的好像很高端,其实是个很简单的东西在MVC的结构下,资源内存管理和AB加载是一个独立的模块资源内存管理引用加载器,形成一个单独的模块我把它叫做Loader(加载器)首先第一点,为什么要做资源内存管理很明显...原创 2019-01-10 15:15:53 · 1337 阅读 · 2 评论 -
Unity写Log到文本
分享一篇输出Unity Log到文本的脚本。在手机上调试看Log相当方便,不用写一堆OnGUI做显示,OnGUI还容易写错出问题。/* * By: Fox.Huang 黄文叶, Date:2018.12.18 */using UnityEngine;using System.IO;public class DebugLogOutput{ static bool s_HasIni...原创 2018-12-28 16:16:04 · 1190 阅读 · 1 评论 -
Unity的Console窗口双击重新定向脚本。
Unity的Console窗口双击重新定向脚本。项目里有时候会自己重新封装unity的Debug类,做Log信息的输出权限管理for写入本地Log文件,着色之类的。那么会带来双击定位到自己的脚本,而不是具体的业务脚本。所以就分享一篇定向脚本,附带一些注释。引用了别人的一篇定位脚本,做了修改。。。引用了谁的已经不记得了。Sorry。/* * By: Fox.Huang 黄文叶, Date...原创 2018-12-28 16:00:48 · 2232 阅读 · 5 评论