- 博客(307)
- 资源 (10)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 unity3D学习笔记之七 RectTransform与屏幕适配
市面上的移动游戏UI布局分为两种: 1.全屏铺满 2.小屏居中 两种布局引出两种布局方式 相对布局和绝对布局 相对: Image相对Panel顶部距离20 即Image尺寸跟随Panel尺寸改变 唯一固定的是距离顶部的距离20不变 此种对应全屏铺满的UI,比如返回按钮始终在右上角20像素出。 绝对: Image位置不随Panel变化 此种布局对应小屏居中 在不同的分辨率上 屏幕变
2017-07-03 22:55:50
2904
原创 GooglePlay账号被封五个之后的一点总结
这时候越来越多的开发者同病相怜,我们意识到形势变了,比iOS更严格的审核机制来了。2、代码方面:cocos2dx升级4.0,业务相关的C++代码混淆,Lua脚本和res加密,更换加密方式(压缩包加密,单文件混淆名称后加密),协议加密,更换域名。4、上架后台信息:更换五图风格,更换游戏品类,勾选部分上架地区。经过上述三个步骤,最远的一个游戏上架走的最远,连续迭代了五次,持续在架两个月。1、申请账号所需公司注册地,SIM卡归属地,信用卡等归属香港。后来做的一些尝试,摆脱关联,账号关联,代码关联。
2024-08-18 15:26:47
127
原创 Unity项目优化记录
好家伙,跑了两次看了内存快照,再看资源组织和管理方式,存在的问题确实比较多。1、修复内存泄露:结算界面由于资源引用丢失导致整个面板不会被释放,每次泄漏50MB左右的内存。7、粒子特效优化:设置规范,规定粒子发射数目上限,贴图大小上限,模型Mesh面数上限。5、请求协议优化:登录成功后集中请求的协议改为多线程,合并任务活动等协议请求。6、较大模型和spine降低面数,牺牲20%的效果提升60%的性能。2、改进资源卸载,通过引用计数管理资源,当引用计数=0,释放。10、spine导出格式由json改为二进制。
2024-08-18 11:17:56
455
原创 通过Bugly上报的日志查找崩溃闪退原因
第二步,查看内存和调用堆栈,通过分析波峰堆栈,查找内存增长的点,这里发现是spine相关的API,在相关调用地方加日志发现缓存失效,每次都重新创建新的spine,而旧的有没释放。./usr/bin/atos -o [dSYM文件的路径]/Contents/Resources/DWARF/[应用的名字] -l [内存基地址] [要转换的地址]OS应用发生崩溃时,系统会生成一份崩溃日志,这份日志中包含了崩溃时的堆栈信息,但这些堆栈信息并非直接指向源代码,而是以16进制的地址表示,这就需要我们进行。
2024-07-13 09:55:51
591
转载 Visual Studio 2019 Product Key
Visual Studio 2019 Product Key [Please Star this gist] Follow My Account --> https://github.com/ch-kashif @ch-kashif Lets do a code together Join Cloud Disk repository --> https://github.com/ch-kashif/Clou
2024-06-18 16:44:39
38
原创 尾调用与尾递归
尾调用(Tail Call): 尾调用是指一个函数的最后一个操作是另一个函数的调用。尾调用的一个关键特性是它不会在调用栈上创建新的栈帧(函数调用记录),而是可以复用当前函数的栈帧。尾递归(Tail Recursion): 尾递归是递归的一种形式,其中递归调用出现在函数的尾部,类似于尾调用。尾递归函数在递归调用时不会在调用栈上积累新的栈帧,因此也可以避免栈溢出错误。这是一种非常有用的优化技术,尤其是在函数需要重复递归调用时。在尾递归中,递归调用的结果会被传递给下一次调用,并且没有其他操作需要执行。
2023-10-05 12:30:07
199
原创 Unity 发布WebGL平台,C#与JavaScript交互
(JavaScript Library)是Unity的一种机制,允许你在C#中通过JavaScript代码来执行一些操作。这是一种高级的技巧,主要用于一些特殊情况,比如在WebGL项目中使用JavaScript来实现与Web页面的互操作。3.利用Assets/Plugins/WebGL/jslib桥接。发布H5平台,接入SDK,比如微信等,涉及到C#与JS的交互。2.javascript层实现逻辑。
2023-09-23 09:20:46
766
转载 这十个步骤让你的 App 避规ios 4.3被拒问题
您好,针对于贵方提出的 4.3 相关问题,我方目前已修改“地区/售价/分类”,主要目的在于针对不同的人群属性做运营方面的区分,我们希望给予用户不同的产品体验,包括应用程序内的功能侧重点,展现给用户的内容等等;④回复苹果产品设计理念等,表述产品情怀,希望打造独一无二的产品,比如功能目前会跟其他类似,会有相同情况;简单来讲,4.3 是功能或者应用程序重复出现在 App Store,包括相同类型产品功能较一致,以及上传马甲或者分包导致的被拒回复,以下本人亲测的方案希望能帮到大家处理此类问题!
2023-08-27 08:32:23
955
原创 Unity APK在应用宝上架因为提前访问Android_ID被拒
1.个推SDK,Bugly等SDK的API会访问到ANDROID_ID,通过调整逻辑放在同意隐私协议之后初始化.3.如果Unity开启过Analytics,然后再关闭依然后收到获取android_id的log。2.提前访问到PlayerPrefs相关API也会触发 android_id.需要修改UnityConnectSettings.asset文件 1改成0。Unity启动时获取了设备信息,其中包括Android_id.这在安全审查中不被允许,需要在同意隐私协议之后才允许调用.
2023-02-27 14:11:46
598
原创 Unity 查找没有使用的资源
2.获取每个文件的依赖文件,组合一个依赖文件列表 dependenciesFileList。file 是否在dependenciesFileList。1.获得project所有文件 allRes。不在 记录 找到了无用文件。3.遍历allRes。
2023-02-22 17:21:45
734
原创 Unity Dynamic Batching合批注意事项
1.该物体就具有odd negative scaling,即奇数个负缩放轴,不能batching。由于绘制顺序涉及到render state 切换。
2023-02-17 15:24:25
139
原创 C#中的lock关键字详解
块中需要传入一个用于同步的对象。这个对象应该是多个线程都可以访问的共享资源。如果每个线程都使用不同的对象来锁定共享资源,那么锁就不起作用了。块中时,它会尝试获取锁。如果锁已经被另一个线程持有,那么当前线程将被阻塞,直到锁被释放。关键字可以用来实现线程同步,确保在多线程环境中只有一个线程可以访问被锁定的资源。块中的代码执行完毕时,锁会被释放,其他线程才能获取该锁。参数是一个用于同步的对象,也就是需要锁定的资源。在上面的代码中,我们使用了一个私有的对象。在多线程环境中的访问是线程安全的。注意事项 以下是使用。
2023-02-16 10:00:49
3862
原创 Unity shader 常用函数
saturate(x)的作用是如果x取值小于0,则返回值为0。如果x取值大于1,则返回值为1.fmod(x, y): 返回 x / y 的小数部分. 如: x = i * y + f。lerp(a,b,w) 根据w返回a到b之间的插值.frac(x): 返回x的小数部分.
2023-02-08 18:04:45
336
转载 unity set pass call都干了些什么
一个材质球引用的shader可以有多个pass,因此携带这个材质球的物体会被渲染多次,"激活"一一个pass的过程就是set pass call。因此改变影响 pass的行为都会触发一次set pass call(比如游戏运行中开启阴影进而影响了渲染管线),因此把set pass call 作为影响drawcall的一个标准。链接:https://www.zhihu.com/question/299878086/answer/534969185。商业转载请联系作者获得授权,非商业转载请注明出处。
2023-02-03 10:49:52
525
原创 基于Egret的微信小游戏H5项目总结
项目经历H5 puremvc框架 View 与 Mediator 组合模式 View 上Button Image scrollView的事件在Mediator中实现,View仅仅是皮肤、是界面。修改界面布局,不需要改动Mediator。 Mediator之间是策略模式 比如商店,活动等。基础操作不变,都有购买,都有礼包列表,都有限购次数,都有活动持续事件。变化的是档位,变化的是货币单位,变化的是礼包内容。不同Mediator对应不同的策略。 Module 与 Mediator 观察者模式 比...
2021-06-10 12:05:15
647
4
原创 实现企业微信机器人自动发消息
起因:每次发布版本都要再打开微信去艾特对应的负责人,这一步挺机械的,看到运维群有机器人自动发消息,查了下有开放API可自定义消息。https://work.weixin.qq.com/api/doc/90000/90135/90239'''Date: 2021-01-31 18:57:35LastEditors: yanghhLastEditTime: 2021-01-31 18:57:59FilePath: /roh5/Users/yanghh/Desktop/notify.py'''f
2021-01-31 20:38:48
6677
7
原创 2020年终技能点总结
2020年终技能点总结1.使用Jenkins自动化出包发布2.小游戏发布更新上架流程3.换装模块从设计规范制定到效果实现4.项目优化,资源管理心得5.图形学基础原理进一步掌握2021展望1.图形学进一步掌握,能熟练改写shader2.能扛起前端框架搭建任务3.通过独立开发的项目练手,训练技术选型能力和从零搭建复杂项目能力4.在团队协作方面具有更强的共情能力...
2020-12-30 18:10:20
180
原创 Unity 电脑仿真装机演示项目
知识点1.场景切换 changeScene.cs2.UI界面展示操作3D模型使用RenderTexture 实时承接模型渲染结果 赋值给RawImage旋转模型操作 TouchObj.cs 缩放模型 ScaleObj.cs3.仿真装机原理碰撞检测:给目标绑定BoxCollider 拖动(MoveObj.cs)组件到目标上OnTriggerStay(Collider other)检测碰撞碰撞后吸附组件到目标上 可以设置位置,也可以把组件删除&把目标上的组件显示出来.
2020-12-30 18:00:52
1936
3
原创 纹理
纹理https://www.icourse163.org/learn/HUST-1003636001?tid=1457257442#/learn/content?type=detail&id=1232561404第九章 第十章 第十一章https://www.xuetangx.com/learn/UCBERKELEYX08091000166/UCBERKELEYX08091000166/4230980/video/6270084纹理映射的主要思想:建立物体空间表面与纹..
2020-12-12 19:58:50
330
原创 游戏开发中的美术资源规范
美术资源规范:一个模块下的散图会打图集,降低drawcallUI布局时文字和图片分组,利用批处理降低drawcall通过引用计数等方式管理资源的加载和释放,降低运行内存。提高加载速度 :云服务器对指定域名下的CDN资源智能压缩网络加速提高加载速度 : 缓存常用资源,比如主场景 主要的功能界面,字体,音乐等提高加载速度和降低内存占用:酌情删除部分动画帧序列背景衬托图风格尽量通用,大小适中不要过大,可以通过程序缩放适配大小。一些ICON使用8bit 背...
2020-12-02 11:07:35
1549
原创 Direct X 12 3D的初始化
D3D的初始化CPU与GPU间的同步围栏用ID3DFence接口表示视图==描述符 描述内存的数据类型等信息在使用深度缓冲区之前,先创建相关的深度视图并把它绑定在渲染流水线上。创建渲染目标视图同理。frames per second FPS 每秒渲染帧数 流畅度的标杆封装隐藏实现细节 把精力集中在需要关注的特定主题上顶点 与 索引四个顶点有两组索引 组成两个三角形把复用的三角形顶点数据转换为索引这种数据结构输入布局...
2020-12-02 09:58:01
170
原创 优酷小游戏(Egret)断线重连后回包多次
问题:Egret引擎导出的优酷小游戏在其平台断线重连后收到多次回调猜测重连操作内部实现有BUG导致旧的socket对象还在,还能接受消息解决方案 重写重连方法 换做 my.connectSocket let egret_ISocket_addCallBacks: Function = egret.ISocket.prototype["addCallBacks"]; let egret_ISocket_bindEvent: Function = egret.ISocket.
2020-10-31 21:44:22
321
原创 Egret发布小游戏 分包脚本JavaScript heap out of memory
windows用户:将C:\Users\{你的用户名}\AppData\Roaming\npm\egret.cmd中的内容修改为:@IF EXIST "%~dp0node_modules\egret\EgretEngine" (FOR /F "usebackq delims=" %%a in ("%~dp0node_modules\egret\EgretEngine") do @(set EGRET=%%a)) ELSE (set EGRET=%~dp0node_modules)...
2020-10-13 10:25:25
645
原创 换装心得-DragonBones
换装层级遮挡处理1场景举例: 手握武器,剑柄在大拇指和四指之间。 这时处理方式是把拇指和四指分两部分,程序单独调整层级(setChildIndex)换装层级遮挡处理2场景举例: 帽子带帽尾巴,尾巴在头发后面,帽檐在头发前面 这时处理方式是把帽檐和帽子PNG分离,两个json文件控制显示隐藏(displayIndex)基础换装分为局部换装(武器翅膀头饰等)和全局换装(服饰)具体参考官方文档:https://docs.egret.com/dragonbone...
2020-06-09 16:35:52
525
原创 职场沟通记录
”我以前写的那个更新工具卡,没用到多线程““这小工具也用得着多线程?” --质疑的态度‘哦?用多线程的好处是什么,可以提高CPU利用率是吧,我要试试’ --仔细思考谈话对方的思路和想法...
2020-06-06 22:07:25
210
转载 encodeURI javascript
javascript可以使用的内置函数有encodeURI()encodeURIComponent()他们都是用utf-8的编码方式encodeURI(),用来encode整个URL,不会对下列字符进行编码:+ : / ; ?&。它只会对汉语等特殊字符进行编码encodeURIComponent (),用来enode URL中想要传输的字符串,它会对所有url敏感字符进行encode在对url做encode操作时,一定要根据情况选择不同的方法。例如url = 'ww.
2020-06-02 09:52:02
200
转载 mac .profile
1. 当你的home下面有.bash_profile或者.bash_login的时候,会忽略调.profile.2. source ~/.bash_profile 保存使命令生效3.主要有一下几种方式 /etc/profile ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc ~/.bash_logout /etc/profile4...
2020-05-02 20:05:22
683
原创 delegate 委托 代理模式
一组协议/接口不同的对象 有相似的行为 把这种相似的行为抽象出一组接口 形成一个delegate 在整个工程中delegate的接口逻辑调用一次具体到不同的情况下 用不同的对象实现这个delegate的接口接口内部实现自己的详细步骤一个例子是渠道SDK接入,一般每个SDK都有init login pay share logout 等接口 可以把这些接口封装成一个del...
2020-04-02 21:49:17
253
转载 rror: unpack failed: error Missing tree
解决:解决方法来自 stackoverflow.使用如下命令即可推送成功:git push --no-thin review HEAD:refs/for/master关键点是 --no-thin 选项. stackoverflow 上的那位答主这么解释的:默认情况下 git push 会在向服务器推送时进行优化,以将所发送的包降低到最小. 做法是发送时忽略本地仓库和远端仓库中共有的...
2020-02-26 19:10:17
841
原创 Git出现 fatal: Pathspec 'xxx' is in submodule 'xxx' 异常 解决方案
fatal: Pathspec 'au.py' is in submodule 'rowebh5' git rm -rf --cached rowebh5/ git add rowebh5/
2019-12-04 18:02:28
1745
原创 游戏中红点提醒模块设计
红点提醒的要求是达到条件需要在按钮上显示红点 提醒玩家操作达到条件->显示红点 这是明显的观察者模式“观察者”模式是我们在开发的时候经常需要用到的。使用Watch.js那么我们就可以实现在“每当对象属性改变的时候,执行你的函数”。设计思路按钮上绑定 注册监听 何时显示何时隐藏红点操作后更新 操作响应/材料变化 变量更新难点:1.功能复杂的模块是层层嵌套的关系比如:人物页签-...
2019-08-31 16:48:44
2464
1
转载 apply 和 call 的区别
apply 和 call 的区别ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已。apply( )apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作为函数参数所组成的数组。var obj = { name : 'linxin'}function ...
2019-08-31 16:23:21
210
原创 OpenGL矩阵变换
使用矩阵完成如下变换将相机移到正确的观察位置:平移和旋转。 将模型移到视野内:平移,旋转和缩放。 应用透视投影。uniform mt4 ViewT, ViewR, ModelT, ModelR, ModelS, Project;in vec4 Vertex;void main(){gl_position = Project*ModelS * ModelR * Mo...
2019-05-02 22:41:10
201
原创 基础色彩理论
现实物理世界中,光由光子组成,光子是由波长的。人的眼睛有种细胞可以感应光的波长,我们只是用红绿蓝作为基础的三原色理由是这三种颜色非常接近人眼光锥细胞的响应曲线的中心区域。真实世界光的频率和波长是连续变化的,计算机的帧缓存只能使用变化较小的离散数值表示。OpenGL中如何使用颜色?片元着色器将负责设置每个片元的颜色,有多种方式实现这一目的:给每个片元设置一个常亮颜色值。 每...
2019-05-02 22:25:16
332
原创 OpenGL绘制方式
OpenGL绘制方式目标:辨别所有OpenGL中可用的渲染图元初始化和设置数据缓存,用于几何渲染使用多实例渲染等高级技法对渲染优化OpenGL的主要作用是将图形渲染到帧缓存中,为了实现这一要求,需要将复杂的物体分解成图元的形式(包括点线三角形),当他们的密度足够高时,就可以表达为2D和3D物体的形态。OpenGL包含了很多渲染这种图元的函数。这些函数描述图元在内...
2019-05-02 22:22:53
531
转载 脏矩形渲染原理
原文链接全屏刷新渲染基于显示列表结构的渲染方式,最常的就是全屏刷新模式。这也是目前大多数游戏引擎普遍采用的方案,因为不管是原理还是实现都比较简单:首先设定一个时钟频率,例如通常是每秒执行60次。每次都单独刷新一次屏幕。刷新过程就是直接清空整个屏幕,然后从显示列表的根节点开始遍历,按顺序找到每个可呈现的显示对象节点,按照它的坐标和大小绘制到屏幕上。这样开发者只需要改变显示对象的位置属性,等待...
2018-11-28 22:06:01
4914
分享一下python遍历文件夹,读写Excel,压缩文件,上传百度云等操作
2023-02-22
自定义的ScrollRect
2018-05-16
APK Log查看脚本
2018-05-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人