基础
文章平均质量分 71
天富儿
这个作者很懒,什么都没留下…
展开
-
3D物体AABB碰撞检测算法
最后,AABB碰见庄策算法虽然计算方法简单,速度快,但是仅适用于精度不搞的游戏中。相对于AABB碰撞检测,还有一种更逼近物体并更为精确的一种算法——OBB碰撞检测。转载 2023-02-06 15:34:44 · 983 阅读 · 0 评论 -
unity3d中获得物体的尺寸(size)
属性表示口径的度数,范围为[1,179];属性为正交模式下的口径尺寸。说明:一般用方法2。转载 2023-02-06 14:49:52 · 1551 阅读 · 0 评论 -
Unity的Bounds(包围盒)简记
包围盒算法是一种求解离散点集最优包围空间的方法。基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。最常见的包围盒算法有AABB包围盒(Axis-aligned bounding box),包围球(Sphere),方向包围盒OBB(Oriented bounding box),固定方向凸包FDH(Fixed directions hulls或k-DOP)。原创 2023-01-20 15:39:37 · 11864 阅读 · 4 评论 -
C#扩展函数&Unity子对象组件的定向获取
可以为无法修改源代码的对象添加新的方法,或者强制让对象支持某些方法,这些方法看起来就是对象本来就有的功能。该功能就是使用扩展函数来实现的,平时在项目中自己使用的,这里做个例子,来表现一下扩展函数的功能。不一样的就是后面的参数是一个字符串(以各层子节点名称以及分隔符。那为什么扩展方法没有得到很大的推广呢?原创 2022-10-21 15:49:11 · 1429 阅读 · 0 评论 -
Unity创建C#脚本与项目的模板路径并修改
修改C#脚本模板路径模板文件在项目开发的过程中,我们需要对一个.cs文件添加一些注释(例如:创建者,创建日期,该类的作用),或者给创建的类增加某个通用的函数。如果我们每创建一个.cs文件都需要添加这些会影响我们的开发效率,会很麻烦。那么我们本着“多一事不如少一事”的原则,这个时候就需要一个模版来解决这个问题。路径首先我们要找到脚本模板文件。当然每个人在电脑上安装的目录不一样,所以注意前面目录...原创 2019-12-25 16:27:11 · 3058 阅读 · 2 评论 -
Unity判断程序联网状态
Unity判断程序联网状态NetworkReachability —— 网络可连接性代码原文链接NetworkReachability —— 网络可连接性Application.internetReachability == 不同的状态时,就对应不同的网络状态:Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork;:Wifi链接Application.internetReachabi转载 2021-09-17 16:40:36 · 1658 阅读 · 1 评论 -
Unity中的StrippingLevel
Unity中的StrippingLevelStrippingLevel的作用StrippingLevel选项的副作用利用link.xml手动排除不能被剥离的的类原文链接StrippingLevel的作用StrippingLevel是用来减少打包出来的player的体积。如图。第一个是选择Strip Byte Code的包的大小,第一个是选择的Disabled的打出来的包的大小,明显的Strip Byte Code的包体积小于没有进行剥离的包,大概1M。StrippingLevel选项的副作用使用转载 2021-08-10 14:24:23 · 301 阅读 · 0 评论 -
Unity项目发布iOS版本DLL中的构造函数丢失问题
Unity项目发布iOS版本DLL中的构造函数丢失问题报错问题解决办法静态实例link.xml原文链接报错问题比如某个dll中有一个类:public class A{ public A(){}}如果工程中,没有显式调用new A(),在使用il2cpp方式构建时,这个A()会被剔除掉。最终的程序包里也就没法找到这个默认构造了。解决办法静态实例找一个位置定义一个无用的静态实例,如static A _unusedA = new A();这样就相当于A()被使用了,不会被剔除。问题是转载 2021-08-10 14:18:41 · 450 阅读 · 2 评论 -
Unity使用Strip的总结
Unity使用Strip的总结Code Strip开启方法强制保留对比Strip中遇到的问题及解决方法类型转换错误无法为抽象类创建对象无法解析符号找不到Class ID对应的类型找不到构造器找不到set函数Strip之后需要注意的问题参考链接Code Strip简而言之,Code Strip就是代码裁剪。开启代码裁剪,能够在build时将项目中没有用到的代码裁减掉,以减少build出的代码量。如果使用了il2cpp,由于build过程中先生成CIL然后再生成cpp代码。所以开启Managed cod转载 2021-08-10 12:15:50 · 1523 阅读 · 0 评论 -
Unity的NavMeshAgent自动寻路几种判断到达目的地的方式
Unity的NavMeshAgent自动寻路几种判断到达目的地的方式如何判断`NavMeshAgent`到达目的地?用到的的是`NavMeshAgent`的`destination`和`nextPosition`这两个自带的属性变量。用`NavMeshAgent`的`nav.remainingDistance`参数碰撞体`Collider`角色当前的坐标Position_1和目的地的坐标Position_2坐标的差值角色当前的坐标Position_1和目的地的坐标Position_2坐标的矢量值`NavMe原创 2021-05-07 17:50:43 · 7816 阅读 · 0 评论 -
Unity时间戳和时间的相互转换
Unity时间戳的获取和与时间的相互转换获取当前时间转化为时间戳把时间戳转化为日期时间获取当前时间转化为时间戳System.TimeSpan st = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0);//获取时间戳Debug.Log(Convert.ToInt64(st.TotalSeconds));//时间戳转换Int64把时间戳转化为日期时间System.DateTime startTime = System原创 2021-05-06 21:32:14 · 7185 阅读 · 0 评论 -
C# Enum,Int,String的互相转换
C# Enum,Int,String的互相转换Enum-->StringString-->EnumEnum-->IntInt-->EnumEnum为枚举提供基类,其基础类型可以是除Char外的任何整型。如果没有显式声明基础类型,则使用Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。注意:枚举类型的基类型是除Char外的任何整型,所以枚举类型的值是整型值。Enum提供一些实用的静态方法:比较枚举类的实例的方法;将实例的值转换为其字符串表示形式转载 2021-04-12 13:03:16 · 294 阅读 · 0 评论 -
Unity之协程原理探究与实现
Unity之协程原理探究与实现一、介绍二、迭代器三、原理case1 : 分帧case2: 延时等待case3: 协程嵌套等待四、总结一、介绍协程Coroutine在Unity中一直扮演者重要的角色。可以实现简单的计时器、将耗时的操作拆分成几个步骤分散在每一帧去运行等等,用起来很是方便。但是,在使用的过程中有没有思考过协程是怎么实现的?为什么可以将一段代码分成几段在不同帧执行?本篇文章将从实现原理上更深入的理解协程,最后肯定也要实现我们自己的协程。关于协程的用法网上有很多介绍,不清楚的话可以看下官方转载 2021-04-12 16:01:52 · 462 阅读 · 0 评论 -
Unity解析Base64的图片
Unity解析Base64的图片项目中有需求,要将从网络中接收到的Base64(string)在项目中转换为图片(Texture2D)使用。稍微看了一下,其实很简单,这里记录一下:Texture2D _texture = new Texture2D(4096, 4096);_texture.LoadImage(Convert.FromBase64String(m_textureBase64));这样就可以,获取到图片了。代码中Texture2D的长宽高是和后台、引擎的同学沟通之后获得的,或可在网原创 2021-01-25 21:14:00 · 1490 阅读 · 0 评论 -
Unity编辑器的整体颜色风格设置
对Unity编辑器的整体风格的编辑,只有买付费版(或者破解),才可以改。就在Edit—Preferences—General—Editor Theme上就可以选择编辑。选择Professional就是深色;选择Personal就是浅色。如下图:另外在Mac版本的Unity上Preferences界面是在Unity的按钮下拉框上,如下图:在Windows版本的Unity中,Preferences界面就是在Edit按钮下拉框中,如下图:...原创 2020-11-26 20:36:50 · 8464 阅读 · 0 评论 -
文件夹操作:DirectoryInfo类与Directory类
文件夹操作:DirectoryInfo类与Directory类引子DirectoryDirectoryInfo`DirectoryInfo`类的属性说明`DirectoryInfo`类的实例方法说明`Directory`类和`DirectoryInfo`类的区别参考链接引子项目中需要一个功能是获取文件夹下的所有文件。我的想法是:如果资源有添加或更新时,我就可以通过这个功能再进行后续的操作。代码如下:var files = Directory.GetFiles(filepath);for (int i原创 2020-11-16 15:28:27 · 4970 阅读 · 0 评论 -
Unity帧率设置以及运行时显示帧率
在Unity3d 中可以通过代码设置来限定游戏帧率。Application.targetFrameRate = -1;设置为**-1**表示不限定帧率,一般情况在手机游戏中我们限定帧率为30就OK了。Application.targetFrameRate = 30;但是把这个代码添加到工程之后,在Unity中运行起来发现并没有起作用,于是到官网查看资料,官网的解释是:Application.targetFrameRatepublic static int targetFrameRate;原创 2020-10-29 17:20:32 · 37557 阅读 · 3 评论 -
C#之数组、ArrayList和List三者的区别
C#之数组、ArrayList和List三者的区别数组ArrayList泛型List总结在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。数组数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。//数组string[] s=new string[2]; //赋值s[0]="a";s[1]="b";//修改s[1]="a1";但是数组存在一些不足的地方。在数组的两个数据间插入数据是很麻烦的,而且转载 2020-10-27 14:48:01 · 552 阅读 · 1 评论 -
Framework类库
Framework类库简介.Net Framework类库包含Framework类库(Framework Class Library,FCL)。FCL是一组DLL程序集的统称,其中含有数千个类型的定义,每个类型都公开了一些功能。MS还发布了其它库,比如MS还发布了Windows Azure SDK和DirectX SDK,这些库提供了更多的类型。公开了更多的功能。Framework类库作用通过Framework类库可以创建以下应用程序:命名空间简介由于FCL包含的类型数量实在太多,所以命名空间这转载 2020-10-27 14:38:08 · 513 阅读 · 0 评论 -
装箱和拆箱的相关简记
装箱和拆箱装箱拆箱尽量避免拆箱和装箱重载泛型方法`ToString`提前显式装箱装箱与拆箱(又叫取消装箱)就是值类型与引用类型的转换,是值类型和引用类型之间的桥梁。之所以可以这样转换是因为CTS允许这样做。只有值类型才存在装箱和拆箱。装箱是隐式的,拆箱是显式的,因为你需要告诉CLR你要给拆出来的值赋予什么类型。通过深入了解装箱与拆箱的过程,我们可以知道其中包含了对堆上内存的操作,故会消耗性能,这是完全不必要的。另外值得注意的是,装箱需要比原数据更多的空间,因为它需要两个引用类型的标准配置:类型对象原创 2020-10-27 14:28:04 · 443 阅读 · 0 评论 -
CTS、CLS和CLR
CTS、CLS和CLRCLR:公共语言运行库CTS:通用类型系统CLS:公共语言规范代码总结CTS、CLS和CLR是.NET框架的基本概念,但往往成为程序员们忽视的部分。清楚理解三者的概念,有助于.NET程序员编写高效安全的.NET程序。所涉及到的知识点:NET的基本概念CLS、CTS和常用语言的关系CLR:公共语言运行库CLR的全称是公共语言运行库(Common Language Runtime),读者可以把CLR理解为一个包含运行.NET程序的引擎和一堆符合公共语言基础结构的类库的集合。转载 2020-10-27 11:29:42 · 1775 阅读 · 0 评论 -
Unity判断网络连接的类型
Unity判断网络连接的类型if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork){ //2G/3G/4G}else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork){ //wifi}else if (Application原创 2020-10-22 20:40:01 · 377 阅读 · 0 评论 -
Unity3d中GridLayoutGroup组件的自适应宽高
Unity3d中GridLayoutGroup组件的自适应宽高Unity中常用的布局自动排列组件:GridLayoutGroup、VerticalLayoutGroup和HorizontalLayoutGroup。其中后面两个有比较好的自适应能力,而GridLayoutGroup,则没有,需要我们自己变相相关代码:高:/// <summary>/// 设置父节点的高度/// </summary>/// <param name="num">每行Cell的个数原创 2020-09-14 10:46:44 · 6016 阅读 · 3 评论 -
基于Unity的事件管理者
事件管理者事件管理者使用个人使用的事件管理者,用于项目中的事件分发,以增加代码的灵活性。事件由于本人习惯,本着“多一事不如少一事“”的原则,使用的是程序库中自带的事件EventHandler:using System.Runtime.InteropServices;namespace System{ [ComVisible(true)] public delegate...原创 2019-12-22 17:04:45 · 1041 阅读 · 1 评论 -
Unity从VideoPlayer获取当前帧纹理
Unity从VideoPlayer获取当前帧纹理Video Player每一帧的纹理项目完整代码Video PlayerVideo Player在Unity5.6版本正式加入用以取代之前的MovieTexture。在视频导入编辑和播放等功能上比之前的MovieTexture已经好上很多。相关介绍链接:https://blog.csdn.net/f_957995490/article/details/108112467每一帧的纹理具体操作,如下:通过将VideoPlayer.sendFrameR原创 2020-08-21 19:42:52 · 2822 阅读 · 0 评论 -
Unity由Matrix4x4提取Quaternion和Vector3和由Quaternion,Vector3构造Matrix4x4
Unity由Matrix4x4提取Quaternion和Vector3和由Quaternion,Vector3构造Matrix4x4由Matrix4x4提取Quaternion和Vector3由Quaternion,Vector3构造Matrix4x4原文链接由Matrix4x4提取Quaternion和Vector3Quaternion getRotationFromMatrix(Matrix4x4 m){ return Quaternion.LookRotation(m.GetColumn转载 2020-08-20 18:35:37 · 748 阅读 · 1 评论 -
Unity视频组件Video Player的介绍
Unity视频组件Video Player的介绍Video Player生成方式组件面板原文链接Video PlayerVideo Player在Unity5.6版本正式加入用以取代之前的MovieTexture。在视频导入编辑和播放等功能上比之前的MovieTexture已经好上很多。当然Unity还是保留了MovieTexture以防出现一个不可用的情况。生成方式Unity5.6提供了多种生成Video Player控件的方式:新建一个空白的Video Player:选择菜单栏的GameOb转载 2020-08-19 22:47:35 · 5590 阅读 · 0 评论 -
Unity的MonoBehaviour单例设置
Unity的MonoBehaviour单例设置MonoBehaviour的基本单例模式MonoBehaviour单例的泛型基类MonoBehaviour单例脚本的问题解决方案互斥锁Mutex使用Editor.OnEnable()监测想法实现参考链接MonoBehaviour的基本单例模式根据Unity的MonoBehaviour脚本创建单例模式,我们一般的创建方式是:using UnityEngine;public class MonoSingleton : MonoBehaviour{原创 2020-08-19 00:26:42 · 2515 阅读 · 0 评论 -
Unity中GL类的使用简记
Unity中GL类的使用简记代码效果图我用GL类画了两种不一样的方块。废话不说直接上代码。代码using UnityEngine;public class GLTest : MonoBehaviour{ void OnGUI() { GL.PushMatrix();//保存摄像机变换矩阵 Color clr = Color.green; clr.a = 0.1f; GL.LoadPixelMatrix();//设置用原创 2020-08-13 18:30:06 · 1466 阅读 · 1 评论 -
Unity移动端自动翻转及横竖屏的设置与检测
Unity移动端自动翻转及横竖屏的设置与检测Unity手动设置代码设置与检测Screen.orientationInput.deviceOrientationUnity手动设置手动设置程序方向File- - ->Build Settings- - ->PlayerSettings- - ->Resolution and Presentation- - ->Orientation。如下图所示。所能设置的值有:Portrait:设备在纵向模式,设备直立并home按钮在底部。原创 2020-08-06 23:23:55 · 10308 阅读 · 2 评论 -
VS C++生成动态库DLL(Windows),并使Unity调用
VS生成动态库DLL(Windows),并使Unity调用VS生成动态库,64位的dllDLLVS新建一个C++工程修改VS导出设置生成DLLUnity调用DLL拷贝DLL到Unity工程中C#中调用DLLVS生成动态库,64位的dllDLLVS新建一个C++工程在项目中新建两个脚本,一个头文件,一个C++文件。头文件:NaviteCode.h#ifndef __NativeCode_H__#define __NativeCode_H__#ifndef EXPORT_DLL#define原创 2020-07-17 14:42:35 · 905 阅读 · 0 评论 -
Unity代码调用网络摄像头WebCamTexture
编辑器模式或Android环境和实机测试都没有问题。using System.Collections;using UnityEngine;using UnityEngine.UI;public class UITest : MonoBehaviour{ /// <summary> /// 图片组件 /// </summary> public RawImage rawImage; /// <summary> ///原创 2020-07-17 12:27:56 · 2881 阅读 · 1 评论 -
Unity3D研究院之拓展Scene视图
Unity3D研究院之拓展Scene视图Scene视图是编辑游戏模型的地方,其实它还可以进行编辑。如下图所示,我给Scene视图做了简单的编辑。Scene视图的拓展是基于对象的,意思就是你必须在Hierarchy视图中选择一个对象才行。Hierarchy视图中选择不同的对象可以有不同的Scene视图。图中我们创建了一个立方体对象,接着给它绑定一个脚本。Test.cs 是个空空的脚本。using UnityEngine;using System.Collections; public cla转载 2020-07-03 13:07:22 · 299 阅读 · 0 评论 -
使用Profiler工具分析内存占用情况
使用Profiler工具分析内存占用情况OtherAssetsScene MemoryBuiltin ResourcesProfiler内存重点关注优化项目项目中可能遇到的问题Unity3D为我们提供了一个强大的性能分析工具Profiler。今天我们就使用Profiler来详细分析一下官方例子AngryBots的内存使用信息数据。首先打开Profiler选择Memory选项,在游戏运行的某一帧查看Detailed选项数据(Simple模式的数据很直观,可以知道内存大体被哪部分占用了,网上也有很多相关介绍转载 2020-07-03 12:47:16 · 1117 阅读 · 0 评论 -
Unity3D--Mecanim动画系统之动画分层(Layers)
Unity3D--Mecanim动画系统之动画分层(Layers)为什么动画中会有层的概念如何使用层动画?注意点参考链接为什么动画中会有层的概念就目前来说:使用状态机的单一层动画就已经可以满足日常开发需要。那么为什么出现层的概念呢?先来几张图,对比一下,你就会发现哪里好。第一:分离动画组第二:规范动画制作第三:提供更丰富的动画制作Ps:其实跟我们的动画融合树差不多。。。如何使用层动画?添加动画层注意:同一时刻我们只能执行一个层的动画片段。添加参数注意:参数是执行动原创 2020-07-03 11:05:09 · 2787 阅读 · 0 评论 -
Unity C# 文件夹的创建,与文件的保存创建和读取
Unity C# 文件夹的创建,与文件的保存创建和读取代码解释代码using System;using System.Collections;using System.IO;using UnityEditor;using UnityEngine;public class CreateFiles{ /// <summary> /// 创建文件夹 /// </summary> [MenuItem("Tools/CreateFolder")原创 2020-06-23 10:07:55 · 4512 阅读 · 2 评论 -
Unity一个关于实时烘焙的问题
实时烘焙同时,在项目中也遇到另一个问题:就是对环境光进行修改之后,场景中却并没有出现向对应的变化。如图:我在项目中手动调节Intensity Multiplier的值的大小,但在Scene视口却看不到任何的变化。经过查找资料和测试,终于知道BUG在哪里。项目中,我将Realtime Global Illumination关掉了,即关掉了实施光照;而且Auto Generate实时更新烘焙也被关掉了。这样可以节省很多效率,但在项目测试观察效果时,却会忽略很多东西。这是我们只要将Auto Generat原创 2020-06-18 21:02:21 · 1025 阅读 · 0 评论 -
Unity之粒子特效参数详解
Unity之粒子特效参数详解目标步骤一:新建一个粒子特效步骤二:参数设置步骤三:添加一个点光源,完成火焰的灯光效果粒子系统参数图原文链接unity版本号:5.5.0参考书籍:《Unity5.x从入门到精通》参考资料:Unity官方API参考文章:1.http://jingyan.baidu.com/article/380abd0a77c5041d90192c19.html2.http://www.cnblogs.com/qinghuaideren/p/3597666.html?utm_sourc转载 2020-06-18 18:56:23 · 4329 阅读 · 2 评论 -
可以设置Unity脚本的执行顺序
可以设置Unity脚本的执行顺序引子示例原文链接个人看法引子有时候,设置脚本的执行顺序还是很有必要的。我曾经遇到过这样的情况,中午去吃饭的时候程序还跑的好好的,到下午回来的时候却出现空对象异常的情况,后来我找到了错误,原来是代码的执行顺序的问题。示例好了,废话不说了,看步骤吧!步骤:在unity场景中建立3个空的游戏物体,名称分别为:Script1,Script2,Script3建立三个脚本,脚本名称为Script1.cs,Script2.cs,Script3.cs,对应编辑脚本如下:转载 2020-06-05 18:31:13 · 373 阅读 · 0 评论 -
Unity抗锯齿设置
Unity抗锯齿设置问题方法方法一方法二方法三方法四方法五方法六参考问题有时候在Unity中的模型边缘、棱角会出现锯齿的情况。如图:方法一般情况,下面有以下几种方法:方法一让美工查找模型的问题,看看是不是面和面之间太近,模型有重叠面,磨损的面。方法二通过修改shader,来改变一下渲染方式。方法三在编辑(Edit)菜单,查找Project Setting—Quality在弹出的面板(QualitySettings)里找Anti-Aliasing选择2x Multi Sampling、原创 2020-05-30 20:05:29 · 18318 阅读 · 0 评论