- 博客(240)
- 收藏
- 关注
原创 UnityEngine.Accessibility命名空间
你可以把new Color[5]改成new Color[100]试试,会发现GetColorBlindSafePalette的返回值只有15,而打印出来的颜色也只有15种,尽管你申明了一百个,但colors中只有colors[0]到colors[14]的颜色是不重样的,colors[15]及后面的颜色值都是和前面重样的无效颜色了。至于为啥上限是只返回15个,我也不知道,Unity也没说,网络上也查不到相关资料。描述里面有不同颜色不同亮度对应不同的编号,可以进行一一对应,如下是我写出的一个测试代码。
2024-07-21 13:52:35
708
1
原创 Unity减小空项目打包体积
查找发现,System.Xml.dll和System.dll这两个文件就占了差不多2.5Mb,直接删除,确保在程序中不引用即可。(至于其余的一些琐碎的dll包,如果不懂的话就尽量别删除了,又不占多少空间,删了反而可能有麻烦)在打包出来的文件夹里,找到Data文件夹,再进入Managed文件夹内,就可以看到很多dll文件夹,其中有一些dll体积很大,但是又不需要使用。经过删除,只保留了两个包,一个是UI的包,另外一个是我用的Rider编辑器的包。删除了这么一大堆没有用的东西,包体积减小了0.5Mb。
2023-11-18 20:36:24
2377
原创 Unity安卓项目录音权限报错
在Logcat查看安卓日志信息的时候,发现了这么一句报错:Error MscSpeechLog SpeechRecognizer stopListening failed, is not running。最后发现,原来是安卓手机的录音权限没有开导致的。Unity安卓项目录音权限报错。开一下录音权限,就ok了。
2023-11-15 22:11:04
324
原创 PCL高版本的bug问题
虽然说着简单,但是我用了三天,几乎把网上所有能找到的方法都尝试过了,才总算在1.11.1版本上找到了希望,并配置成功,于是记录一下博客。在安装PCL的时候,我最开始使用的是VS2022版本加上PCL 1.13.0,这两个都是最新的版本,结果就出现了一大堆的奇怪错误。在百度上根本查不到,不过我在谷歌上倒是看到了一点信息,翻译过来大概的意思就是说PCL高版本有一些BUG,所以可以降低版本解决报错。直到我把PCL版本降低到1.11.1的时候,vs版本为2019,才终于成功的配置好了PCL的环境。
2023-05-09 23:33:13
385
原创 VS实用偷懒快捷键
在做项目的时候,经常会遇到要修改一个变量的名称这种事情,重点来了,通常修改一个变量,需要修改几十个地方,如果手动的去修改的话,就问你麻不麻烦?而如果要批量的解除注释,也是一样的,先要选中需要批量解除注释的代码,按住Ctr不要松,按下K松开,最后按下U,就可以批量解除注释的代码了。Ctr+C的第二个用法:将光标移动到需要复制的某一行,然后按下Ctr+C,即可把那一行的内容全部复制,之后进行粘贴即可。当光标在某一行的时候,按下Alt键,再按下↑或者↓,就可以直接移动光标所在的行,也是一个比较方便的快捷键。
2023-04-08 18:28:37
396
原创 Canvas画布下的渲染顺序
上图中,HP_Panel_max是一个空物体,我会在这个空物体下动态的创建血条UI,而这个血条UI是最后被渲染的,所以当重叠时会被下面的所有UI给遮挡住。Canvas画布会先渲染最下面的子物品,然后再依次往上进行渲染,所以,把血条的位置给放在Canvas下的第一个位置就ok了,就能达到我的需求了。本来我还想着要搞什么复杂的东西,比如创建两个Canvas,但是在研究了一番之后,我发现在Canvas画布下的子物品其实也是有渲染顺序的。我发现我的Canvas下面,既有静态的UI界面,也有动态创建的血条UI。
2023-04-06 21:29:52
326
原创 LitJson做简易排行榜
这是我为了做排行榜专门创建一个类,在这个类的Start中,我首先用一个if判断了在Application.persistentDataPath路径下是否存在了我需要创建的文件,如果没有的话就进行if里面的初始化创建,如果有的话就不创建(必须进行判断)。第五步,排行榜数据的更新。如上图所示,这一段代码是专门用来做展示用的,可以将时间转换为时分秒,当玩家打开排行榜的时候,就调用该脚本获取存储时分秒的数据,并用Text进行显示。第四步,做一个排行榜的UI,然后要获取Text组件来进行排行榜的数据的显示。
2023-04-06 16:36:09
150
原创 限制游戏角色不能移动出屏幕外
举个很简单的例子,假如最小值是0,最大值是100。可以看到,Clamp纯粹就是用来限定value的值的,使得value的值小于最小值的时候返回最小值,大于最大值的时候返回最大值,如果在最大值和最小值之间则返回value。第一个Vector3,前面两个0,指的是屏幕左下角,而那个61.8f,是指游戏角色距离相机的距离。第一个参数是value,第二个参数是最小值,第三个参数是最大值。我们需要让角色敌人在屏幕内,这样玩家才能看得到,玩家体验才会更好。这样,就可以将角色的位置始终锁定在屏幕范围内。
2023-04-03 23:46:56
406
原创 血条制作以及移动
很简单,比如说,我需要把血条挂在角色的脑袋上,那么,我这个空物体的位置就在角色的脑袋上(这个空物体是角色的子物体,这样就可以跟随角色一起移动),就是这样。然后下面那句代码,hp_Panel就是血条(血条的黑色Image为父物体,绿色Image为子物体,这里是移动父物体hp_Panel),将血条移动到我第一句代码所设置的3D位置所代表的屏幕坐标。而如果HP大于0的话,就先算出HP的比例,然后下面调用localScale对x进行按比例缩小,就可以实现血条的控制了。角色的血条都是绿色的。
2023-04-03 23:29:52
541
原创 工具类的管理
然后我还创建了一个静态的s_prefab,在Start里面,把public的拖拽的引用赋值给了静态的s_prefab,如此一来,就可以用拖拽的预制体来实现静态方法了。实际上,在每一个工具类里面,我都封装了一个或者多个静态方法,这样很方便在其它类里面进行调用。static静态的变量是不能被显示在unity中的,因为静态变量是属于类的,所以unity中创建的对象没办法显示。当然,这只是我目前的想法,说不定这个管理方法也存在很多缺陷,但对于我目前做的这个小游戏来说已经足矣。没办法,出于下策,只能弄成这样了。
2023-04-03 23:04:14
102
原创 PlayClipPoint声音太小的问题
也就是说,让声音在摄像机的位置播放。(虽然发出声音的地方不在摄像机的位置,但是我们可以通过这个方法强行让声音在摄像机的位置播放,毕竟,如果玩家都听不到这个声音了,那就没什么用处了。我之前要添加声音的时候,都是通过给物体增加AudioSource组件来播放的。所以如果将第二个参数设置的位置离摄像机太远的话,玩家就听不到声音了。只需要把该静态方法的第二个参数传入摄像机的位置就可以了。我把音量设置为1,但是还是听不到声音,声音极小极小。玩游戏的时候,是通过摄像机来听游戏里面的声音的。我按照官方的来使用了。
2023-03-26 19:17:57
767
原创 物体摧毁时发出摧毁音效
于是我就把子弹消失(destroy)和摧毁敌人的音效(Play)一起放在碰撞检测的函数中,结果就报错了。这一次得到了教训,那就是千万不能让物体被摧毁和音效播放放在一起执行,否则一定会报错。遇到一个这样的需求:当子弹和敌人接触时,子弹会消失,然后同时发出摧毁敌人的音效。直到我用Invoke延迟了子弹的消失后,才解决这个问题。尝试了各种办法都无法解决。物体摧毁时发出摧毁音效。
2023-03-23 21:42:14
290
原创 Unity快捷键详解
很简单,也就是说,无论在任何时候都可以使用,是不限定视图和工具集的,只要是在unity编辑器里面,就能够使用的快捷键。(通常来说,全局快捷键会更加重要而且常用,所以如果要记快捷键的话,可以优先考虑记全局快捷键)(我都找了一遍,但是并没有找到关于鼠标的快捷键操作,比如Alt+鼠标左键,这种快捷键这上面并没有。可以通过在如下图所示箭头所指的方向搜索指定的命令,进行快捷键的查询,比如我下图搜索旋转,然后就会出现旋转的快捷键是E。而除了这些基本的快捷键外,其实unity还内置了许多的快捷键,只不过不常用而已。
2023-03-20 19:09:38
2340
原创 UGUI——文本字体选择
unity中的文本字体太过于单调,而有一个简单的办法可以获得更多的文本字体。只要把这些字体给拖拽进入项目工程里,就可以进行使用了,非常的方便。可以在C盘目录下找到这个路径,这里面有电脑自带的字体。
2023-03-15 17:53:51
152
原创 UGUI——详解摄像机模式
而又因为新摄像机和画布是关联在一起的,也就是说,新摄像机的前方一百米的位置是跟随着一块画布的,所以,创建在画布内的物体,只要在新摄像机前方一百米内,都是可以遮挡住UI的。而红色的正方形是属于UI的,因为UI默认是在距离新摄像机一百米远的位置,而白色小球的距离新摄像机不足一百米远,所以,白色小球会遮挡住红色正方形。而另外一部分被UI挡住的物体,就创建在画布之外即可,这些物体会被主摄像机捕获,并且始终创建在UI之前,所以始终会被UI给挡住。我创建的小球是在画布内的,并且看右上角的图层,也是属于UI图层的。
2023-03-15 10:33:40
782
原创 如何遍历任意三角形和任意四边形内的点
如果将一个四边形拆分成两个三角形的话,那么这两个三角形的面积往往也是不同的,比如说有一个四边形可以拆分成面积为1和面积为3的两个三角形,而如果使用相同的参数0.01去遍历的话,面积为1的三角形会遍历n个点,而面积为3的三角形也会遍历n个点,也就是说,虽然面积大小不同,但是会遍历一样多的点。所以在遍历任意四边形的时候,在将四边形拆分成两个三角形来遍历后,就需要对这两个三角形的遍历中的0.01的那个参数来进行合理的调整。但好在有一个比较不错的办法,可以轻松的遍历任意三角形和任意四边形内的点。
2023-03-14 23:16:33
360
原创 CaptureScreenshotAsTexture的使用及踩坑
主要是因为CaptureScreenshotAsTexture返回的是一个Texture2D类型的纹理图片,而在Texture2D中有专门读取像素点的方法,非常方便我进行像素点的处理。也就是说,假如你的场景中有山有水有房子,然后你在update中调用这个截图功能,而截出来的结果就只有山,然后水和房子都还没有渲染出来,这就很尴尬了。这个不可预测的结果,其实就是说,在渲染过程中截图的话,就会返回一个渲染不完全的Texture2D纹理图片。(像素位置和颜色不匹配)在这次的项目中,踩到了一个坑,浪费了不少的时间。
2023-03-14 22:42:04
1008
原创 C#学习笔记——访问修饰符
介绍:public是不限制对该类或者该字段或者该方法的访问;private则是表明私有;protected与继承有关,在类内权限与private相当,但是可以在继承的子类中被子类使用;internal则是可以让同一程序集的任何代码都可以访问(程序集:包括生成的exe可执行文件和dll库文件);介绍:访问修饰符是类封装的重要概念,可以让类更具安全性,对于封装而言具有重大意义,常见的访问修饰符有:public、private、protected、internal、protected internal。
2023-03-12 23:10:57
341
原创 C#学习笔记——属性
比如说,不想让别人在类外修改属性的话,就可以把set的访问修饰符变为private,如果不想让别人读取的话,就可以把get的访问修饰符变为private,而默认情况下,get和set的访问修饰符和属性的访问修饰符一样。除此之外,get和set前面还可以添加访问修饰符,不过这个访问修饰符不能大于属性前面的访问修饰符,比如现在属性ID前面的修饰符是public,那么get和set前面的访问修饰符的访问权限就不能超过public,那加这个访问修饰符有什么用呢?在如下的代码中,就展示了get和set的全貌,其。
2023-03-12 22:36:47
128
原创 C#学习笔记——可变长参数params
介绍:可以想象一下,如果我们需要往方法里传入成百上千个参数的时候,该怎么办呢?面对这个问题,使用可变长参数params就是一个很好的解决方案。params的用法很简单,在这里就不过多赘述了,直接贴一段程序进行理解就ok了。
2023-03-12 21:53:35
249
原创 C#笔记——ref和out的区别
介绍:C语言中有指针,可以通过指针使得函数不仅有返回值,还能够返回修改过后的参数,而C#也可以做到这一点,就是依靠ref和out这两个关键字。区别2:在方法内部,ref修饰的变量可以任意使用,而out修饰的变量却需要赋值才可以。(注意:即使out修饰的关键字在方法外面已经进行过初始化了,但是在方法内部仍然需要进行赋值,否则就会报错)区别:ref和out都可以返回改变后的参数,两者在使用上还是有一定区别的。区别1:当使用ref关键字时,其关键字需要先进行初始化,而out则不用。以下用实例来说明两者的区别。
2023-03-12 21:39:59
432
原创 AssetBundles下载与安装详细流程
解压压缩文件后,进入Unity里面,会发现有报错,此时再回到文件夹里把文件夹里的的Tests文件直接删除就行了。(注意,这点非常重要,如果不删除将没办法运行,会一直报错,我自己也是卡在这里很久,最后把这个文件给删了ok了)最后,在window窗口里面看到有AssetBundle Browser,就说明AssetBundle下载和安装成功了,接下来就可以正常的使用了。这是官方给出的下载地址,可以直接下来用。(下载zip压缩包即可)下载的压缩包就放在自己的项目的Packages里面就ok了。
2023-03-05 17:24:03
4229
原创 gameObject.SetActive的bug
也就是说,一旦这个物体被禁止后,挂在这个物体身上的脚本也不能运行了,不过,如果把脚本挂在其他物体上执行SetActive(false)和SetActive(true)就没问题了。当使用SetActive(false)之后,就没办法使用SetActive(true)了。在使用SetActive()函数时,发现了一个有意思的小bug。我把代码挂在物体上,想实现这个物体忽闪忽现的效果。
2023-02-27 21:55:34
428
原创 C#学习笔记——列表
优点:C#中的列表可以很方便的将一类数据进行储存,使用起来也更加方便,比如我上面把列表的名字定义成name,然后调用的时候,就调用name[0],name[1]等,这样写出来的代码的可读性会更高。中从指定的索引开始、包含指定元素个数的元素范围内第一个匹配项的从零开始的索引。中包含指定元素个数、到指定索引结束的元素范围内最后一个匹配项的从零开始的索引。中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。中从第一个元素到指定索引的元素范围内最后一个匹配项的从零开始的索引。
2023-01-20 18:21:38
1703
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人