原创
qq_598211757
多学一样本事,少说一句求人的话。
展开
-
Unity 脚本去除导入FBX文件的顶点色,UV2,UV3
【代码】Unity 脚本去除导入FBX文件的顶点色,UV2,UV3。原创 2023-04-04 11:50:41 · 886 阅读 · 6 评论 -
Unity优化材质,清除空引用贴图
美术创建材质的时候如果没有选择shader,那么创建的是默认shader材质,文本编辑器打开材质文件(.mat),会发现有很多没有默认的texture,如下图,此时美术切换材质到目标shader,虽然编辑器里面的inspector会变化,但是查看材质文件(.mat),发现那些贴图的定义还是在,这种情况下会被uwa检测为 “包含空纹理采样的材质”。如果在创建材质时选中shader,则没有这个问题。注:该问题不清楚unity打包时是否会自动清除,因为没法检测。原创 2023-04-04 11:45:21 · 571 阅读 · 0 评论 -
Unity导出Fbx文件的动画片段并优化
导出Fbx的动画片段,这里导出单个动画片段,需要导出多个的,使用AssetDataBase.LoadAllAssetsAtPath,然后对asset进行遍历,判断是否为动画片段,再进行下一步操作。代码中包含项目中使用的非关键代码,并不影响查看。对生成的动画片段进行压缩优化,AnimationOptimize.OptionalFloatCurves逻辑实现如下,注释比较完整。原创 2023-03-28 16:39:50 · 1036 阅读 · 0 评论 -
UGUI 摇杆
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;/// <summary>/// 基于UGUI的摇杆/// </summary>public class JoystickUGUI : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHand.原创 2022-05-19 15:03:16 · 144 阅读 · 0 评论 -
c# 反射修改父类的私有变量
Unity写工具的时候碰到的问题,要自动给预制体添加组件并赋值,但是组件有一个变量是私有的,无法修改,而且因为组件脚本是在Package里面,所以无法修改,如果把组件源码放到项目中的话修改使用的话又不利于组件更新,所以想到了用反射去修改私有变量并赋值。 如果一个类没有继承关系,修改时获取字段并修改即可,代码如下。 var t = gameObject.GetComPonent<T>(); t.interactionLayer...原创 2021-12-15 18:41:49 · 2214 阅读 · 0 评论 -
UGUI InputField 无法唤起键盘
unity2018.4.18版本存在的bug,在unity2020.3.21版本已修复,具体开始修复的版本未知。bug表现为在点击InputField输入后,点击输入法键盘上的“完成/确定”等字样隐藏键盘(以下称正常方式),可再次点击InputField唤起输入法,不点击输入法键盘上的“完成/确定”等字样,直接点击屏幕上输入法键盘外位置(以下称异常方式),会自动隐藏输入法键盘,此时点击同一个InputField,会无法唤起输入法键盘,无法输入。此时再次点击InputField外其他位置,接着...原创 2021-10-28 15:14:25 · 2531 阅读 · 0 评论 -
Unity编辑器拓展窗口常用组件笔记(持续更新...)
1原创 2021-06-28 17:58:45 · 775 阅读 · 2 评论 -
Unity WebCameraTexture笔记
记录下代码,其中很多问题没弄清楚,只是可以这样使用。using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class Main : MonoBehaviour{ public int index; public RawImage targetImg; public WebCamTexture current原创 2021-06-22 15:39:12 · 438 阅读 · 0 评论 -
xlua使用unity协程笔记
记录一下,代码及注释如下,具体使用还需加工,需要单独写类去管理local util = require 'xlua.util' --xlua封装好的工具类,路径xlua/Resources/xlua/util.lua.txtlocal go = CS.UnityEngine.GameObject("corGo") --创建对象,不需要new关键字local coroutineCom = go:AddComponent(typeof(CS.CoroutineMine)) --空脚本,无逻辑代码,只原创 2021-05-11 17:51:44 · 577 阅读 · 0 评论 -
二进制在数据存储上的应用
分享一个二进制的应用。应用场景举例,在游戏中,存在一些非固定顺序的新手引导,需要存储玩家引导的数据,各个引导是否执行过,依次来判断是否触发。比如有十个步骤,我们可以通过使用键值对来存储这些引导的状态,key为引导id,value为引导状态,修改的时候直接去赋值即可。今天分享另一种更为高效,节能的存储方式。代码及运行结果如下:class Program { static Dictionary<string, int> datas = new Dictionary&原创 2021-03-01 15:34:25 · 234 阅读 · 0 评论 -
监听Unity编辑器事件,修改Unity编辑器标题
下午看到有这样需求,然后想到前些天做的去除窗口标题,应该是类似的效果,就去试了下。使用场景,接手别人的项目时,需要同时开两个或多个项目进行运行对比,由于项目名一样,编辑器版本一样,无法区分,所以需要修改编辑器窗口标题依次来区分。最初想到的是直接在editor模式下修改标题即可,结果发现,当编辑器切换到运行以及编辑器切换到结束状态时,标题都会重置。所以需要监听状态,修改标题,可以用EditorApplication.playModeStateChanged监听编辑器的状态改变。代码如下,两个脚本,一个原创 2021-02-04 18:21:54 · 996 阅读 · 0 评论 -
c# Environment.GetCommandLineArgs
官方释义:返回包含当前进程的命令行参数的字符串数组最开始接触这个api是unity自动打包时读取传入参数的,但是当时一直不清楚这个参数是通过什么样的形式去传递的,直到今天写批处理时才明白是怎么回事。首先这个参数获取到的值默认有一个,即该进程的文件名(“***.exe”),然后其他参数参数才是命令行传入的参数,传入方式为在命令行执行程序,后接参数。测试一下,首先写一个c#控制台程序,做简单的输出,代码如下: static void Main(string[] args)原创 2020-11-04 16:43:58 · 2931 阅读 · 0 评论 -
程序的魅力,自动化执行应用程序进行批处理操作
再次感叹下程序的魅力,节省了太多的成本。开发中需要用到Criware插件cpk类型的视频文件,没有cpk文件,只能找工具进行转化,墙了好久才找到一款工具,但是奈何工具只能单个单个文件的操作,而且需要手动命名,八百个文件,不谈时间,耐心也不够用,所以想到写批处理执行应用程序来实现自动化解决问题。由于没有操作过其他程序,所以这里只拿这个举例......可能不尽相同那么面临的第一个问题就是程序里面用到的参数,怎么去赋值传递。首先看一下该程序的目录文件以及界面:其中有两个exe应用程序文件,原创 2020-11-04 16:06:48 · 821 阅读 · 0 评论 -
Unity Ugui快速定位选中UI组件
项目开发到后期之后,考虑性能优化,Ugui需要创建多个Canvas渲染不同的界面,然后会导致想要在scnec视图选中某个组件时,点击许多次都无法正确选中目标对象,给调试带来不便,这里使用EventSystem实现快速选中的效果。代码注释如下using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using UnityEngine.UI;using UnityE原创 2020-10-16 17:33:19 · 1767 阅读 · 1 评论 -
MemorySystem笔记
属性,函数见https://docs.microsoft.com/zh-cn/dotnet/api/system.io.memorystream?view=net-5.0using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;using System.Runtime.Serialization;原创 2020-06-14 16:16:22 · 406 阅读 · 0 评论 -
记一次unity3d 游戏帧率踩坑的过程
优化方面,除了平时顺手做的代码方面优化,对象池以外,基本上没怎么去关注过,所以这一方面蛮白痴的。今天发现游戏帧率从一开始的100左右,会随着运行时间逐渐降低,甚至降到个位数,所以只能去查阅这方面的资料进行优化了。文章没有一点干货....没有具体的优化方法(因为我也不知道.....),旨在记录一次分析过程,以便后续碰到类似问题时不会无从下手。首先使用的分析工具是unity的framedebugger,去对边前后drawcall的数量,发现即使已经勾选了动态批处理,但是场景中的同一种对象,竟然每个是一个原创 2020-05-29 01:38:16 · 5330 阅读 · 0 评论 -
Unity移动过快导致射线检测失效的原因及处理方式
直入正题,检测失效的原因如图,设此时子弹,射线,碰撞体属性都如图所示,这里射线从子弹的坐标位置发出,发出位置可以通过修改预设或者增加偏移量的方式进行修改。可以看到,第一帧进行射线检测时,子弹距离碰撞体太远(或者说射线长度不够)导致并没有检测到碰撞,结果第二帧时,子弹已经飞过了碰撞体,此时再次进行射线检测,当然也不会检测到,如此就导致了射线检测失效。怎么去解决这个问题,很简单,增加射线的长度即可,但是增加多少呢?假如这里把射线长度增加到2000,那么第一帧必然能检测到碰撞体,但是如果像下面这种情况原创 2020-05-23 17:09:40 · 2128 阅读 · 0 评论 -
FairyGui 代码给组件赋值控制器
以显示控制器为例,代码如下//GearXXX对象是控制器和属性之间的连接。0-显示控制,1-位置控制,2-大小控制,// 3-外观控制,4-颜色控制,5-动画控制,6-文字控制,7-图标控制GearDisplay gear = (GearDisplay)yourGobject.GetGear(0);gear.controller = yourController;gear.pages...原创 2020-04-16 14:23:50 · 1050 阅读 · 0 评论 -
使用build.gradle 配置签名信息与多渠道打包参数配置笔记
最近看一个热更的demo,看到了多渠道配置,比较感兴趣,记录一下,备用。使用的是flavorDimensions(风味维度???),首先在build.gradle 的android{}闭包里面定义一个flavorDimensions,这里我取名“channel”。然后同样在android{}闭包里面定义并配置productFlavors。这里配置了包名与androidmanifest 的met...原创 2020-03-18 15:21:14 · 669 阅读 · 0 评论 -
记坑 unit fbx文件导入后model页签 scale factor无法修改
踩了一个别人的坑,实在是太坑了。原创 2020-03-10 17:38:02 · 371 阅读 · 0 评论 -
unity android定时本地推送
游戏中恢复体力,玩法出现等功能都是定时的,需要每天定时推送,提醒玩家,最近遇到这个需求,也是花费了几天,记录一下。部分代码参照https://www.jianshu.com/p/b9eb60f04f82,基本能实现推送显示功能,但是点击事件,第二篇写了一大堆,感觉用不到,就借鉴其他的。首先是创建定时任务,写到mainactivity里面,供unity调用。/** * 显示数...原创 2018-12-17 15:22:48 · 2186 阅读 · 2 评论 -
unity打包或者导出Android项目error sdk platform tools version
这个问题碰到了一两次,解决方法是下载旧的tools,然后替换掉,但也不是每次都好,因为并不知道下载哪个版本,我第一次用的25版本,但是后来又遇到一次发现不行,当时捣鼓了几下就解决了,但是,明明已经配好的环境,昨天导出Android项目的时候又出现了这个问题,很郁闷,百思不得其解,后来一点一点看,发现了问题所在,记录一下。首先为什么我配好的环境为什么坏掉了,也就是版本变了。unity跟Andro...原创 2018-12-17 12:01:12 · 978 阅读 · 0 评论 -
java通过web获取json数据
一般的SDK登录之后都会返回渠道用户唯一标识,token,渠道,然后客户端接收后用这些数据登录游戏,但是九游的登录成功返回的参数只有一个token,用户标识要去服务端去取,然而这个时候还没有与游戏服务端连接,所以只能通过web获取了。本来我是写在unity里面的, 但是感觉不怎么好,还不如写到SDK端直接在SDK的登录成功给unity传输数据的时候直接发给unity。结果写完之后,第一天还好好的,...原创 2018-12-04 10:54:27 · 1954 阅读 · 0 评论 -
unity保存图片到手机相册,安卓
第一步,加载图片: string url = "图片所在路径"; Texture2D texture = (Texture2D)Resources.Load(url);第二步,写入手机相册: byte[] bytes = texture.EncodeToPNG(); string path = Application.pe...原创 2018-10-26 14:59:02 · 4644 阅读 · 9 评论 -
NGUI不规则碰撞体及防3d碰撞体穿透
最近做到地图功能,地图可以滑动,地图上有各个形状的建筑,大小不一,地图底栏有按钮可以点击。应该是一个比较普遍的需求。首先贴一张图吧,没法放原图,就用画图工具模仿了一下大概情况。其中矩形黑框为手机屏幕,背景那个特别大的什么颜色是地图,命名为BG,是可拖动的对象。不规则图片ABCD为地图上各个建筑,椭圆形abc分别为界面按钮,注意到因为地图是可以滑动的,建筑随地图滑动而移动,但按钮abc不会动...原创 2018-08-22 12:01:21 · 799 阅读 · 0 评论 -
关于c#,PHP socket挂到云服务器上之后本机无法连接的问题
最近写了下PHP socket编程,在本机测试一直没有问题,昨天放到云服务上之后,本机一直连接不上。但是同样的云服务器,用c#的socket监听同样的端口,本机可以连接,所以不是端口的问题。也没有一句log,效果看起来就像是端口未开放一样,由于是初接触PHP,socket代码就是根据网上的教程写的,不过都是那几步,创建,绑定,监听。然后一直也没有问到合适的答案,今天早上继续找答案的时候,突...原创 2018-07-05 11:18:45 · 797 阅读 · 0 评论 -
UGUI实现长按显示道具详细信息(类背包道具信息显示)
游戏中很普遍的一个功能,长按道具,显示道具的信息。类似下面这样的一个功能: 分析一下这个功能需要的知识点: 1.文本框的长宽根据文本内容自适应; 2.点击位置转换成实际UI位置(弹窗位置由点击位置决定而不是点击对象的位置决定,后者更简单) 3.若道具在屏幕边界,则需要动态修改弹窗的位置以及轴点。 先说一下画布设置,博主在canvas下新...原创 2018-05-23 18:59:54 · 2071 阅读 · 0 评论 -
记坑 屏幕坐标转NGUI坐标
要求是点击屏幕某个点,当前点生成一个ui。代码如下Camera uicamera;uicamera = NGUITools.FindCameraForLayer(8);private void Update() { if (Input.GetMouseButtonDown(0)) { Vector3 vec =uica...原创 2019-01-18 11:20:06 · 461 阅读 · 0 评论 -
记坑 c# string赋值会分配新地址
string a = "a"; string b = a; Console.WriteLine(getMemory(a)); Console.WriteLine(getMemory(b)); a = "b"; Console.WriteLine(a);...原创 2019-01-22 10:59:22 · 1318 阅读 · 0 评论 -
Lua实现另类计算器
Lua的使用现在基本上属于游戏行业的必备技能了,由于项目中没有使用,所以看过几次教程,实验过几次,一直没有系统的写点东西,导致看完过了多久就忘了。这两天又看了遍,准备着手随便做点什么,熟悉下,做什么呢,当时是做计算器啊~以前用c#做过另类计算器,思路上基本是一样的,即把没有括号的式子的数字和符号分割,然后遍历符号计算结果,计算之后替换原式子,把括号消完就好了,具体描述见另一篇文章https:/...原创 2019-08-29 16:54:29 · 1113 阅读 · 0 评论 -
热更新之Assetbundle——加载
加载的类型有很多种,比如预设,图集,字体,shader,但是项目用中用到的只有预设和图集这两个,其实这两个完全可以写在一个方法里面,但是一开始就分开写了,所以就写了两个方法。我这里选择把加载过的bundle存入一个字典,下次需要加载的时候去直接获取(其实一个字典就足够了)。加载的步骤是先根据传入的bundle名字,通过主配置文件manifest去获取该bundle的依赖,然后把加载这些依赖之后,再...原创 2019-07-09 14:29:55 · 317 阅读 · 0 评论 -
热更新之Assetbundle——下载
Assetbundle的下载这一块,是耗时最久的,也是最复杂的。步骤为对比版本号,不同则对比信息配置文件,然后去差异下载更新。做之前听网友们说已经不用www了,说是besthttp插件,非常好用。然后去试了下,确实好用,但是后面下载写入的时候会偶尔报异常,下载0kb的文件,而且看log根本看不出个所以然,没办法又换回了www。besthttp有个比较好的地方是可以设置下载到一定的量就去触发下载回调...原创 2019-07-09 11:10:22 · 514 阅读 · 2 评论 -
热更新之Assetbundle——上传
目前使用的是NetBox2,模拟当前文件夹为文件服务器,这个就.....没什么好说了,以后使用实际文件服务器时候再补充。原创 2019-07-08 18:33:52 · 275 阅读 · 0 评论 -
热更新之Assetbundle——创建
最近实验下assetbundle的热更,本来以为很简单,就创建,上传,下载,加载。但实际上开发的时候才发现个中细节多且复杂。创建本来以为就一句api就可以了,但是实际操作起来,才发现想的过于简单。首先,命名,那么多图集,预设,不可能去手动命名,所以要写一个工具。工具原理就是根据文件名,去自动修改文件的assetbundleName以及后缀assetBundleVariant。需要注意的是,...原创 2019-07-08 18:26:03 · 477 阅读 · 0 评论 -
记坑 Androidstudio gradle failed: out of memory java heap space
用as打包的时候,碰到这个报错,java heap space,以前碰到过,然后重启as就好了,碰到了几次都是这样解决的,以为是电脑运行程序太多了。但是昨天又碰到了,而且重启不管用,甚至重启了电脑,然后百度了很久。有说在gradle.build 里面加配置,具体叫什么名字忘了,有说在gradle.properties里面加配置,还有说改环境变量的。第一种方法试了,不行,第三种没有试,感觉不靠谱...原创 2019-02-26 18:54:30 · 3726 阅读 · 0 评论 -
unity开发简易的本地音乐播放器
由于项目需要,做了个简单的本地音乐播放器demo,记录一下,万一以后就用到了。UI不方便贴图,只贴关键功能的代码。功能1:从本地选择音频文件。 这部分代码是在网上搜索到的,由于不知道原创是哪位前辈(因为所有人都标着原创),所以就不贴出处了,代码看起来感觉很懵,但是其实可以直接复制粘贴使用,只限pc端。using System.Collections;using System.C...原创 2019-02-21 11:31:39 · 2689 阅读 · 2 评论 -
c# 另类计算器
很早的时候碰到的一个问题,当时写不出来,一直觉得很难,前几天试了一下,发现也就一般般,贴一下,记录。需求如下,输入一个任意的符合规则的式子,包含{},[],(),+,-,*,/ 计算结果,如输入{3*[3*(1-2)]},结果为-9 。 可能很多人咋一看觉得很简单,不就是计算器么,但是实际去考虑的话也没有很简单。思路的话就是递归吧。步骤就是 1.写个基础运算,计算没有括号的式子;2. 根据...原创 2019-01-23 11:57:54 · 291 阅读 · 0 评论 -
解决unity打包在安卓8.0因为权限问题黑屏
博主写过一篇文章是如何解决unity打包在安卓8.0上因为存储,短信权限导致黑屏的。链接如下,点击打开链接就不多说了,是一种解决方法,但是根本问题没有解决到。如网上说的,换版本,unity2017,完美解决,什么都不用做。但是因为项目已经上线,换版本跨度太大(博主用的5.5.2,其实跨度也一般般),所以这种处理方式一直被pass,没有考虑。直到今天.... 废话就不说了,直接说解决方...原创 2018-05-16 17:30:06 · 9664 阅读 · 9 评论