Unity3d技术笔记
文章平均质量分 59
介绍工作项目中说用的Unity3d的技术点。不积跬步,无以至千里;不积小流,无以成江海。
四夕立羽
这个作者很懒,什么都没留下…
展开
-
unity3d:TabView,UGUI多标签页组件,TreeView树状展开菜单
1.最外层DataForm为空壳编辑数据用。可以有多个DataForm,例如福利DataForm,抽奖DataForm2.Menu层为左边栏层,每个DataForm可以使用不同样式的MenuForm预制体3.DataForm中使用ReorderList,可排列配置4.有定位功能,跳转到对应页签5.DataForm具有树状图管理,1级,2级菜单6.PageForm为每个页签的具体生命周期脚本,由DataForm控制。需要显示时如果没加载过,从资源加载。原创 2024-07-28 00:41:46 · 1351 阅读 · 0 评论 -
unity3d:Shader知识点,矩阵,函数,坐标转换,Tags,半透明,阴影,深度,亮度,优化
当在V2F结构体中定义大量变量时,会占用更多的寄存器空间。每个变量都需要占用一个或多个寄存器来存储其数据。因此,如果V2F结构体中的变量过多,可能会导致寄存器数量不足的问题。以下是一些优化建议:1. 只定义需要的变量:避免定义不必要的变量,只保留需要在顶点和片段着色器之间传递的数据。2. 使用紧凑的数据类型:选择适当的数据类型来存储数据,避免使用过大的数据类型。例如,使用float代替float4来存储一个3D向量。3. 考虑使用顶点着色器中的纹理坐标:如果某些数据只在顶点着色器中使用,并且可以原创 2024-07-07 10:45:29 · 1007 阅读 · 0 评论 -
unity3d:GameFramework+xLua+Protobuf+lua-protobuf,与服务器交互收发协议
1.cs收发协议,通过protobuf序列化2.lua收发协议,通过lua-protobuf序列化。原创 2024-06-09 17:59:00 · 1378 阅读 · 0 评论 -
unity3d:GameFramework+xLua+Protobuf+lua-protobuf,生成.cs,.pb工具流
1.区分lua,cs用的proto2.proto生成cs,使用protogen.exe,通过csharp.xslt修改生成cs样式3.proto生成lua加载.pb二进制文件,并生成.pb列表文件,用于初始化加载4.协议id生成cs,lua中枚举。原创 2024-06-08 17:51:14 · 1536 阅读 · 0 评论 -
unity3d:asset store上C#代码热重载插件,不需要重运行,重新加载更新后函数
这种手动重新编译应该在进行不支持的编辑时使用,比如添加一个新类。Hot Reload是一个C#编译器扩展,它只编译发生变化的特定方法(非常快,只需要几毫秒)。请注意,在进行了不支持的编辑后,通常仍有可能继续编辑不相关的文件和函数。在执行手动重新编译之前,不支持的编辑在编辑器中是不可见的。热重新加载建议默认禁用“自动刷新”编辑器设置,因为它会在任何文件更改时触发完全重新编译,这是热重新加载允许您避免的。●方法1:通过导航到Unity菜单栏中的“窗口”打开热重装窗口,然后选择“热重装”。原创 2023-04-01 21:54:32 · 3289 阅读 · 1 评论 -
unity3d:win32api,托盘运行,开机自启动,浏览文件对话框,无标题栏,自定义标题栏拖动
exe安装打包,打包的时候给exe加上运行参数xx.exe -popupwindow。隐藏系统自带标题栏后,有自定义标题栏,拖动自定义标题栏,移动窗口。-popupwindow 只针对unity构建出来的exe有用。隐藏窗口,显示托盘图标,点击托盘图标恢复窗口。原创 2023-01-05 00:30:00 · 1089 阅读 · 1 评论 -
Unity3d:场景加载 GameObejct上脚本执行顺序
场景1脚本public class LoadScene1 : MonoBehaviour{ // Start is called before the first frame update void Start() { StartCoroutine(StartScene()); } IEnumerator StartScene() { AsyncOperation aync = SceneManager.LoadScene原创 2022-05-10 22:31:08 · 1022 阅读 · 1 评论 -
Unity3d:特效对象池,超时删除池内GameObject,GC权值
技术要点:不用的粒子返回缓冲池按照单个粒子名字创建一个池,当a池上一次操作时间(回收对象)超过阈值,每隔一段时间删除池里一个GameObject,可针对单个粒子配表,频繁使用的,驻留时间更长一个完整池被删除,增加GC权值,GC权值达到最大值调用System.GC.Collect()遇到问题:父节点OnDisable,不可设置子节点的父物体Cannot set the parent of the GameObject ''XXX“ while activating or deactivati原创 2022-03-27 16:54:46 · 4148 阅读 · 0 评论 -
Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
ui上面展示粒子一般来说有两种方案1.通过rendertexture渲染,可以完美处理层级问题,不过性能不好,多个摄像机2.直接放到ui界面调整特效sort in layer,不过如果ui特效穿插多,层级不好管理,且多canvas造成合批问题现在来第三种方法粒子BakeMesh(要2018.2以上版本)来自Github:https://github.com/mob-sakai/ParticleEffectForUGUI优点:可像UGUI一样通过上下调整层级排序,接受Mask处理各方案比较粒子原创 2022-03-27 11:18:51 · 5474 阅读 · 1 评论 -
Unity3d:GCloud SDK接入记录,APK更新,资源更新,区服导航,网络连接
启动更新版本线app版本1,只会更新app版本1下的资源版本线程序更新只走程序版本线,例如 2.0.0.0 的程序版本检查更新时,服务器将返回 3.0.0.0 的可选更新资源更新只走所在程序版本下的资源线,例如 2.1.0.0 的资源版本检查更新时,服务器将返回 2.3.0.0 的强制更新,而不会返回 3.X 的版本,尽管 3.X 的版本比 2.1.0.0 高强制更新如果app版本号未找到或者app当前版本为普通不可用,走强制更新可选更新举例:用户自定义json定义可支持版本,例如手机上a原创 2022-02-23 11:46:00 · 3215 阅读 · 0 评论 -
Unity3d:实现自己的Dotween,C#扩展方法,插值旋转,插值移动
C#扩展方法C#扩展方法第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。public static class ExtendMethods { public static tween DoRotate(this Transform transform, Vector3 target, float time) { tween myTween = new tween("DoRotate", transform, target,原创 2022-01-14 22:06:44 · 3387 阅读 · 0 评论 -
Unity3d:c#,Mono,IL2CPP,托管代码,AOT,JIT
Mono跨平台ILIntermediate Language,中间语言,面向对象的汇编语言工作流通过C#编译器mcs,将C#编译为IL(中间语言,byte code)通过Mono运行时中的编译器将IL编译成对应平台的原生码IL三种转译方式即时编译(Just in time,JIT):程序运行过程中,将CIL的byte code转译为目标平台的原生码。提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中的CIL的byte code部分转译为目标平台的原生码原创 2022-01-05 23:08:03 · 2706 阅读 · 1 评论 -
unity3d:协程实现原理(转),IEnumerator,yield,编辑器下协程
转https://www.cnblogs.com/iwiniwin/p/14878498.htmlIEnumeratorIEnumerator是所有非泛型枚举器的基接口。换而言之就是IEnumerator定义了一种适用于任意集合的迭代方式。任意一个集合只要实现自己的IEnumerator,它的使用者就可以通过IEnumerator迭代集合中的元素public interface IEnumerator{ object Current { get; } bool MoveNext()转载 2022-01-05 16:30:06 · 653 阅读 · 0 评论 -
unity3d:动画animator,AvatarMask,边走边攻击,单独设置run动画速度
分为3layer,run-idel层(layer0),攻击时上半身层(layer1),原地攻击层(layer2),其中layer1,layer2里面完全复制的动画状态机其中layer1设置mask,屏蔽下半身动作在移动时切换layer1,layer2的权重,同时只存在一个为0,一个为1using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.AI;public原创 2021-12-11 21:55:30 · 6239 阅读 · 0 评论 -
unity3d:函数耗时记录,Profiler性能采样
Time.time在一帧内,Time.time只会赋值更新一次,所以一帧内获取不到时间差值。void Start () { TestArrayAList(); } void TestArrayAList() { int max = 100000000; int[] array; array = new int[max]; List<int> list = new List<int&原创 2021-12-07 21:54:41 · 1173 阅读 · 0 评论 -
unity3d职业规划与技能职级体系
职业规划UI程序员(3年起步,UI都很重复,重复到90%时间跟个机器人一样)中级u3d:游戏核心模块程序员(技能,任务,新手引导) (3-5年)高级u3d:引擎专家程序员,模块组长(UI业务组,战斗组)(网络连接,AI寻路模块,动画状态机管理,声音管理,AssetBundle管理,大世界加载优化)主程,(客户端技术总监(技术管理岗)或者是转行做TA,或者是到大公司里面做引擎组的成员,或者是全栈工程师,(客户端+服务器)技能职级体系...原创 2021-12-07 21:10:54 · 3410 阅读 · 1 评论 -
unity3d:网络模块优化:减少无用字段,降低字段精度,byte转vector3表示方向,心跳包优化,异步线程接收
网络模块优化方向网络优化的目的是让网络包更小,响应更及时,消耗更少流量,不卡主线程。减少无用字段网络包中通常包含了很多信息,诸如角色位置,朝向,状态等。 如果是2.5D游戏,则位置z分量可以弃掉;朝向只在xz平面上,所以只需要发送RotationY。 通过这种减少无用字段,可以一定程度上降低网络包大小。降低字段精度能用byte的不用int。通常逻辑里的很多信息都是4字节,包括角色位置,朝向,技能或Buff信息等。但很多时候,这些信息不可能达到4字节数的最大值,可以压缩至2字节甚至1字节。原创 2021-12-02 22:23:35 · 2700 阅读 · 0 评论 -
Unity3d+Newbie guide引导:读CSV表驱动,屏蔽不可点击区域,UI镂空矩形区域Shader
主要功能表驱动,引导到哪步查找ui面板下路径屏蔽不可点击区域,点击屏蔽,UImask镂空具有点击该按钮驱动下一步,或者点击新手引导的下一步驱动数据结构//新手引导UI箭头出现的方向public enum EnGuideDir{ up = 0, down = 1, left = 2, right = 3 }//出现引导如何跳转下一步public enum EnGuideClick{ NoClickCloseSelf = 0, //点击空白处原创 2021-11-29 01:01:22 · 1456 阅读 · 0 评论 -
Unity3d:摇杆移动,第三人称镜头控制
主要功能单指旋转镜头,同时摇杆控制移动双指缩放镜头镜头旋转不等低于人脚下镜头与人连线中间碰墙,拉进镜头镜头控制using UnityEngine;using System.Collections;using UnityEngine.EventSystems;using System.Collections.Generic;public class MouseOrbitImproved : MonoBehaviour{ public bool m_isScale = tr原创 2021-11-27 19:04:04 · 1971 阅读 · 1 评论 -
unity3d:Assetbundle模拟加载,同步加载,异步加载,依赖包加载,自动标签,AB浏览器,增量打包
AB自动设置标签文件夹中每个prefab,单独打包成一个assetbundle,使用于模型,单个UI面板文件夹内每个文件夹打包成一个assetbundle,适用于图集所有AB分发器配置数据在Editor/AssetBundle/Database/AssetPackage中,该目录下存在目录的一个映射结构,其中的每个序列化文件对应一个AB分发器在打包前执行 make tag,通过读上面对应配置,自动设置ab标签与名字 public AssetBundleChecker(Asset原创 2021-11-25 01:26:05 · 3480 阅读 · 2 评论 -
unity3d:查找子物体,并输出路径,GetComponentsInChildren,递归查找,栈查找
分为两步:1.找到子物体的transform2.通过child.parent = root,输出路径找到子物体的transform有三种方法:GetComponentsInChildren,递归查找,栈查找GetComponentsInChildrenforeach (Transform t in check.GetComponentsInChildren<Transform>()){ if (t.name == name) { Debug.Log(原创 2020-01-04 12:45:53 · 2087 阅读 · 2 评论 -
unity3d:process 进程调用C#控制台程序,并获得输出。传入参数有空格要加““
public static Process StartProcess(string fileName,string args) { try { fileName = "\"" + fileName + "\""; //args = "\"" + args + "\""; Process ...原创 2019-04-02 09:38:39 · 1745 阅读 · 1 评论 -
unity3d:背景根据字缩放,往一个方向
unity3d:背景根据字缩放,往一个方向原创 2018-09-14 14:51:20 · 763 阅读 · 2 评论 -
u3d 递归输出子孙物体相对总父物体的路径
string GetParName(Transform tran) { if (tran.parent == m_tar.transform) { return tran.name; } else { return GetParName(tran.parent)+"原创 2017-06-07 23:57:32 · 599 阅读 · 0 评论 -
unity3d:Types.GetType 升级为System.Reflection.Assembly.Load
var type = Types.GetType(TypeName, "Assembly-CSharp");5.3.8代码在2018中报错UnityEngine.Types.GetType(string, string)' is obsolete: `This was an internal method which is no longer used'改为var type = Sys...原创 2018-09-27 13:34:51 · 4091 阅读 · 0 评论 -
Unity中解决JsonUtility转换数组失败的BUG
由于转对象没问题,转数组才会产生问题。所以解决思路是: 转换时遇到数组,在数组外加壳,作为对象转成JSON,再去壳。 解析时遇到数组,先套壳转成对象,再取对象里的数组。using System.Collections;using System.Collections.Generic;using UnityEngine;public static class JsonUtil{...转载 2018-09-12 15:53:41 · 2510 阅读 · 0 评论 -
unity3d:xlua hotfix 热补丁修改c#脚本bug
先在场景中挂载脚本,加载自定义Loaderusing System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;using System.IO;using UnityEngine.Networking;public class HotFixScript : MonoBehavi...原创 2018-05-07 01:13:26 · 1016 阅读 · 0 评论 -
unity3d:集成svn菜单到编辑器
using System.Collections;using System.Collections.Generic;using System.Diagnostics;using UnityEditor;using UnityEngine;public class SvnHelper : Editor { [MenuItem("SVN/更新 Assets", false, 3...原创 2019-02-25 16:36:32 · 302 阅读 · 0 评论 -
Unity3D :Mob SMSSDK 运行崩溃
报错信息 android.content.ActivityNotFoundException: Unable to find explicit activity class {com.shuiying.smsm09061/com.mob.tools.MobUIShell}; have you declared this activity in your AndroidManifest....原创 2018-09-06 13:53:34 · 436 阅读 · 0 评论 -
Unity Input Touch fingerId
Input.touchs 是一个数组,存储了 当前的所有touch 事件。而每一个 touch 都是相互独立的。fingerId 是touch 为了标明自己与其他 touch 区别的 一个 索引序号。 (虽然交 手指ID 并不是转指某个手指。)他的 规则经过验证是这样的:将 手指 食指 ,中指,无名指,小指, 按照次序 放上去转载 2016-05-10 01:03:21 · 3267 阅读 · 5 评论 -
u3d目标与摄像机之间的遮挡物变为透明
摄像机和目标物体连接一个射线,然后射线碰到的物体的Transparent/Diffuse全部设为半透明using System.Collections;using System.Collections.Generic;using UnityEngine;public class XrayCameral : MonoBehaviour { public Transform tar;原创 2017-04-20 15:29:27 · 3352 阅读 · 2 评论 -
unity3d:webgl打包,pc端移动端全屏化
<!DOCTYPE html><html lang="en-us"> <head> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">原创 2018-08-01 11:07:12 · 3186 阅读 · 1 评论 -
unity3d:运动残影
Shader "Custom/GhostOnly_Transparent" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _GhostColor ("Ghost Color", Color) = (0, 1, 0, 1) _Pow ("Pow Factor", int) = 2 } SubShader ...原创 2019-03-15 17:31:01 · 752 阅读 · 0 评论 -
unity3d:UGUI卷轴展开动画效果
卷轴式UI面板打开特效思路:content用mask控制x方向大小,用dotween两边的圆柱体同时dotween控制位置面板的结构为content 增加mask组件public class UGUIPanel : BasePanel { public UnityAction m_actOpenFinish; private CanvasGr...原创 2019-03-19 17:34:15 · 8214 阅读 · 7 评论 -
unity+Android:剪切板
package com.luoyikun.clipboard;import android.app.Activity;import android.app.Fragment;import android.content.ClipData;import android.content.ClipboardManager;import android.content.Context;imp...原创 2018-10-06 19:35:09 · 366 阅读 · 0 评论 -
最简单的C#socket通信
服务器端using System;using System.Collections.Generic;using System.Net;using System.Net.Sockets;namespace SimpleServer{ class Program { static void Main(string[] args) {原创 2016-04-07 01:43:36 · 681 阅读 · 0 评论 -
unity+InputField事件,按enter确定,监听变化
m_inputSearch.onEndEdit.AddListener(delegate { InputEnd(m_inputSearch); });原创 2018-01-16 15:13:59 · 16216 阅读 · 5 评论 -
Unity优化技巧
按照硬件划分分为CPU,GPU,内存&硬盘。 CPU Top10使用Profile找到CPU占用最靠前的函数,从最高的开始依次分析优化。定位的方法有很多,Unity的Profile,UWA的性能测试工具,比较推荐的是使用XCode,可以抓取一段时间内函数的开销。更品均准确也可以看到更底层。如过函数比较复杂可以使用BeginSample/EndSample拆分,我在项目里通过添加条件编译进行了封装转载 2017-12-09 16:08:33 · 532 阅读 · 0 评论 -
unity3d ios 应用闪退 variables may not be available
报错提示:XXXX’ was compiled with optimization - stepping may behave oddly; variables may not be available Player Setting – Other Setting,去掉勾选 Strip Engine CodeStrip engine code在build setting的other sett...原创 2018-03-04 11:15:27 · 2062 阅读 · 1 评论 -
Texture ‘XXX‘ is not readable, the memory can not be accessed form scripts, You can make the texture
解决方法: 1、选中图片:Inspector窗口下第一个选项,Texture Type 改成 Advanced; 2、选中Read/Write Enabled。 3、选中下方Override for Standalone,Format这图片ARGB 32bit 4、点击Apply。 5、运行代码,应该没问题了。原创 2017-12-05 22:26:43 · 2236 阅读 · 0 评论