
Unity3d技术笔记
文章平均质量分 56
介绍工作项目中说用的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 · 1973 阅读 · 0 评论 -
unity3d:Shader知识点,矩阵,函数,坐标转换,Tags,半透明,阴影,深度,亮度,优化
当在V2F结构体中定义大量变量时,会占用更多的寄存器空间。每个变量都需要占用一个或多个寄存器来存储其数据。因此,如果V2F结构体中的变量过多,可能会导致寄存器数量不足的问题。以下是一些优化建议:1. 只定义需要的变量:避免定义不必要的变量,只保留需要在顶点和片段着色器之间传递的数据。2. 使用紧凑的数据类型:选择适当的数据类型来存储数据,避免使用过大的数据类型。例如,使用float代替float4来存储一个3D向量。3. 考虑使用顶点着色器中的纹理坐标:如果某些数据只在顶点着色器中使用,并且可以原创 2024-07-07 10:45:29 · 1382 阅读 · 0 评论 -
unity3d:GameFramework+xLua+Protobuf+lua-protobuf,与服务器交互收发协议
1.cs收发协议,通过protobuf序列化2.lua收发协议,通过lua-protobuf序列化。原创 2024-06-09 17:59:00 · 1650 阅读 · 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 · 1737 阅读 · 0 评论 -
unity3d:asset store上C#代码热重载插件,不需要重运行,重新加载更新后函数
这种手动重新编译应该在进行不支持的编辑时使用,比如添加一个新类。Hot Reload是一个C#编译器扩展,它只编译发生变化的特定方法(非常快,只需要几毫秒)。请注意,在进行了不支持的编辑后,通常仍有可能继续编辑不相关的文件和函数。在执行手动重新编译之前,不支持的编辑在编辑器中是不可见的。热重新加载建议默认禁用“自动刷新”编辑器设置,因为它会在任何文件更改时触发完全重新编译,这是热重新加载允许您避免的。●方法1:通过导航到Unity菜单栏中的“窗口”打开热重装窗口,然后选择“热重装”。原创 2023-04-01 21:54:32 · 4192 阅读 · 1 评论 -
unity3d:win32api,托盘运行,开机自启动,浏览文件对话框,无标题栏,自定义标题栏拖动
exe安装打包,打包的时候给exe加上运行参数xx.exe -popupwindow。隐藏系统自带标题栏后,有自定义标题栏,拖动自定义标题栏,移动窗口。-popupwindow 只针对unity构建出来的exe有用。隐藏窗口,显示托盘图标,点击托盘图标恢复窗口。原创 2023-01-05 00:30:00 · 1253 阅读 · 2 评论 -
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 · 1123 阅读 · 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 · 4305 阅读 · 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 · 5669 阅读 · 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 · 3335 阅读 · 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 · 3481 阅读 · 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 · 2887 阅读 · 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 · 713 阅读 · 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 · 6635 阅读 · 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 · 1440 阅读 · 0 评论 -
unity3d职业规划与技能职级体系
职业规划UI程序员(3年起步,UI都很重复,重复到90%时间跟个机器人一样)中级u3d:游戏核心模块程序员(技能,任务,新手引导) (3-5年)高级u3d:引擎专家程序员,模块组长(UI业务组,战斗组)(网络连接,AI寻路模块,动画状态机管理,声音管理,AssetBundle管理,大世界加载优化)主程,(客户端技术总监(技术管理岗)或者是转行做TA,或者是到大公司里面做引擎组的成员,或者是全栈工程师,(客户端+服务器)技能职级体系...原创 2021-12-07 21:10:54 · 3833 阅读 · 1 评论 -
unity3d:网络模块优化:减少无用字段,降低字段精度,byte转vector3表示方向,心跳包优化,异步线程接收
网络模块优化方向网络优化的目的是让网络包更小,响应更及时,消耗更少流量,不卡主线程。减少无用字段网络包中通常包含了很多信息,诸如角色位置,朝向,状态等。 如果是2.5D游戏,则位置z分量可以弃掉;朝向只在xz平面上,所以只需要发送RotationY。 通过这种减少无用字段,可以一定程度上降低网络包大小。降低字段精度能用byte的不用int。通常逻辑里的很多信息都是4字节,包括角色位置,朝向,技能或Buff信息等。但很多时候,这些信息不可能达到4字节数的最大值,可以压缩至2字节甚至1字节。原创 2021-12-02 22:23:35 · 2842 阅读 · 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 · 1532 阅读 · 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 · 2148 阅读 · 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 · 3660 阅读 · 2 评论 -
unity3d:向量计算,AOE图形相交
点到直线的最短距离/// <summary> /// 三角函数法求x到直线x0为起点,u为单位向量的垂直最短距离平方 /// </summary> /// <param name="x0">起点</param> /// <param name="u">射线的单位向量</param> /// <param name="x"></param&原创 2021-09-07 21:33:01 · 921 阅读 · 2 评论 -
转-C#多播委托因异常而终止的解决方案
1.C#多播委托执行到某个方法抛出异常的时候,整个委托的迭代将在抛出异常的地方退出终止,后面的方法就不会再去执行了;2.可以通过自己设计迭代方法来容错,起到即使抛出异常,委托链也不会中止执行的效果;#define UseEventusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MultiDelega转载 2021-08-11 22:01:39 · 435 阅读 · 0 评论 -
unity3d:CatmullRom采样曲线,沿着曲线移动
采样曲线生成,UnityStandardAsset赛车工程里public class WaypointCircuit : MonoBehaviour { [HideInInspector]public WaypointList waypointList = new WaypointList(); [HideInInspector]public float[] distances; private int numPoints;原创 2021-07-02 01:31:08 · 578 阅读 · 0 评论 -
unity3d:两条线段相交并求交点坐标
public static float Cross(Vector2 a, Vector2 b) { return a.x * b.y - b.x * a.y; } public static bool SegmentsInterPoint(Vector2 a, Vector2 b, Vector2 c, Vector2 d, ref Vector2 IntrPos) { //v1×v2=x1y2-y1x2 //以线段ab.原创 2021-04-07 15:17:05 · 2692 阅读 · 0 评论 -
unity3d与android交互:aar导出给unity:闪退,Theme.AppCompat.Light,appcompat-v7问题
unity接sdk,打包报错 No resource found that matches the given name ‘Theme.AppCompat.Light’.这是因为sdk中用了这个主题,冒然的删除,会导致后面出来的功能有问题使用appcompat-v7-23.0.0.aar解决,这个里面包含了资源,单纯的jar包不行appcompat-v7-23.0.0.aar可以通过androidsdk文件中SDKManager下载Unity接sdk,运行中报错java.lang.NoClassD原创 2021-04-04 23:56:13 · 701 阅读 · 0 评论 -
unity3d与aar :android gradle自动任务task,build后复制aar至unity目录
// 删除旧的aartask deleteOldAar(type: Delete) { //删除Unity工程下的Android资源 delete 'D:/UnityProjects/AcGame0403/Assets/Plugins/Android/acgame0403-release.aar'}//导出aartask exportAar(type: Copy) { from('build/outputs/aar/') into('D:/UnityProjects原创 2021-04-04 23:20:28 · 419 阅读 · 0 评论 -
unity3d:http www get传输中文与空格
web传输转义客户端IEnumerator Post() { WWWForm form = new WWWForm(); form.AddField(UrlEncode("123 qwe"), UrlEncode("123 sdfsdf")); form.AddField(UrlEncode("num2"), UrlEncode("sdf 阿斯顿发生单号")); WWW www = new WWW("http://" + Publ原创 2020-11-12 16:57:38 · 447 阅读 · 0 评论 -
unity3d:text描边
using UnityEngine;using System.Collections.Generic;using UnityEngine.UI;namespace Effects{ [RequireComponent(typeof(Text))] [AddComponentMenu("UI/Effects/BoldOutline")] public class BoldOutline : Shadow { public bool IsEcoMode原创 2020-10-23 11:46:45 · 1249 阅读 · 0 评论 -
unity3d:文字渐变色
using UnityEngine;using System.Collections.Generic;using UnityEngine.UI;namespace Effects{ [AddComponentMenu("UI/Effects/Gradient")] public class Gradient : BaseMeshEffect { public enum Type { Vertical,原创 2020-10-23 11:35:21 · 393 阅读 · 0 评论 -
unity3d模拟Scene视图camera控制
中键滚动,camera前进后退右键拖动,camera原地旋转中键拖动,camera上下左右平移using System.Collections;using System.Collections.Generic;using UnityEngine;public class CameraCtrl : MonoBehaviour{ Transform m_trans; public float m_zoomSpeed = 1.0f; public float m_dragS原创 2020-08-18 21:04:15 · 1028 阅读 · 0 评论 -
unity3d:WebRequest post请求
命名空间using System.Net; public static string GetResponse(string reqString) { string result = ""; WebRequest req = WebRequest.Create(reqString); req.ContentType = "text/html; charset=UTF-8"; Web原创 2020-08-16 16:59:33 · 637 阅读 · 0 评论 -
unity3d:激活码系统(根据PC机器码,给对应激活码完成软件注册)
1.机器码为明文,采用DES加密2.判断输入激活码与机器码的密文一致,激活成功using UnityEngine;using UnityEngine.UI;using UnityEngine.SceneManagement;using System.IO;namespace KeyScene{ public class KeyMgr : MonoBehaviour ...原创 2020-05-19 20:36:18 · 13201 阅读 · 6 评论 -
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 · 2200 阅读 · 2 评论 -
Unity3d 直升机空战游戏
外网买的直升机游戏效果使用的插件StormEffects插件,包含雨雪,暴风雨WeaponSystem武器系统插件原创 2019-11-18 01:13:59 · 627 阅读 · 1 评论 -
unity3d:向量计算:得到围绕物体一圈点位置
/// <summary> /// 生成一圈 /// </summary> /// <param name="forward">物体的前进方向</param> /// <param name="center">物体位置</param> /// <param name="radius...原创 2019-10-12 01:12:53 · 776 阅读 · 0 评论 -
unity3d:java定义转c#定义
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace JavaToCs{ class Program { static void M...原创 2019-05-08 17:08:32 · 320 阅读 · 1 评论 -
unity3d:弹道飞行
敌人间隔5-10s开枪,有子弹从我眼前飞过,粒子使用lean缓冲池循环使用敌人:using Lean.Pool;using System.Collections;using System.Collections.Generic;using UnityEngine;public class GunEffectCtrl : MonoBehaviour { public Trans...原创 2019-04-23 18:00:06 · 1618 阅读 · 1 评论 -
unity3d:打印日志至文件
using System.IO;using UnityEngine;public class MyLogCallback : MonoBehaviour { FileInfo fileInfo; string content = ""; FileStream writer; System.Text.UTF8Encoding encoding; // ...原创 2019-04-12 10:19:10 · 1357 阅读 · 0 评论 -
unity3d:htc wavesdk,VR一体机滑块与按钮事件
点击VR一体机上触摸板,可使滑块定位,与按钮响应InputModuleManager改为PointerDown,因为滑块之类的无点击事件增加按钮响应,把监听click改为监听downusing UnityEngine;using System.Collections;using UnityEngine.Events;using UnityEngine.EventSystems;...原创 2019-04-11 11:52:16 · 1159 阅读 · 0 评论 -
unity3d:物体寻路贴合地面,y轴与地面normal方向平行(坦克爬斜坡问题)
坦克在爬斜坡时,保持坦克是贴合地面前进寻路挂在父物体上,控制姿态脚本挂在坦克子物体上RaycastHit hit;int Rmask = LayerMask.GetMask ("Terrain");Vector3 Point_dir = transform.TransformDirection(Vector3.down);if (Physics.Raycast(transform...原创 2019-04-10 13:56:56 · 5906 阅读 · 1 评论