Unity
文章平均质量分 71
参宿_七
格物致知
展开
-
unity使用 form.showDialog() 函数,打包后出现空指针错误 的解决方法
需要实现一个unity打开文件/文件夹选择框,一开始使用:path = UnityEditor.EditorUtility.OpenFilePanel("Load Images of Directory", UnityEngine.Application.dataPath, extion);方法实现,但是这种方法只在编辑器里起作用,不能导出exe。于是使用:using System.Windows.Forms;OpenFileDialog dialog = new OpenFileDi原创 2021-04-22 15:28:55 · 748 阅读 · 2 评论 -
Unity中的渲染优化
造成Unity渲染瓶颈的原因可能是CPU(物理模拟、过多的drawcall)GPU(过多的顶点计算(顶点多、逐顶点光源多)、过多的片元计算(分辨率大、多次overdraw(半透明、屏幕后处理、渲染顺序))、实时渲染)内存(尺寸大且未压缩的纹理、静态批处理、分辨率过高的帧缓存(实时渲染))等因素。优化的主要手段有静态批处理、动态批处理减少顶点计算(建模时就要考虑尽量减少顶点数、模型LOD(需要建模人建不同精度的模型)、遮挡剔除)减少片元计算(控制绘制顺序、减少实时光照(最多使用原创 2020-05-28 13:12:08 · 474 阅读 · 0 评论 -
9. Unity3D中使用可空值类型
主要介绍为什么需要可空类型,如果C#语言不提供可空类型,我们可以有哪些解决方案、C#中的可空类型以及其简化语法一、 为什么需要可空类型引用类型如果没有通过构造函数初始化,则会指向空,其值为null,在内存中会有一块被置为0。但是值类型却不能为空,它一定有一个默认值,因为值类型的值就是它本身,所以不会为空。1. 但是有些时候,默认值也可能是一个有意义的值,而不是开发者想要的空值,比如...原创 2019-03-27 22:29:54 · 1339 阅读 · 0 评论 -
12 在Unity中使用AssetBundle
主要介绍什么是AssetBundle,如何在开发阶段创建AssetBundle文件,如何在运行阶段下载AssetBundle文件等一、什么是AssetBundle上一节已经讲过了,AssetBundle是一种二进制文件,它可以将模型、贴图、音乐、场景以及开发者自己定义的二进制文件(但是必须是.byte的后缀名)打包。用于在应用运行时加载远程或本地的资源。二、创建AssetBundle文...原创 2019-04-01 17:32:49 · 440 阅读 · 0 评论 -
10. C#序列化与反序列化
主要介绍如何使用序列化与反序列化、控制类型的序列化与反序列化、Unity中的序列化与反序列化、序列化器是如何工作的。一、如何使用序列化与反序列化序列化:将数据(可以是类,结构体还有其他int型等数据)转换成字节流。反序列化:将字节流文件转换成原数据类型(如类等)。序列化与反序列化的作用:1.可以将类的信息转换成字节流用于网络传输2.一般的引用类型的数据复制,只能复制引用,但...原创 2019-03-28 22:30:54 · 395 阅读 · 0 评论 -
11.Unity,在程序中读取外部文件资源
主要介绍 为什么要规范化地读取外部文件,四种读取外部资源的方式,两个读取外部资源的类(Resources与WWW)一、为什么要规范化地读取外部文件最直接但不是很正确的方法是,在Assets的目录下新建一个文件夹(如FileName),然后将文件(如Text.xml)存放在该文件夹下。在代码中写:using System.Xml.LinqXElement testxml=XEleme...原创 2019-03-29 10:57:49 · 4826 阅读 · 0 评论 -
13. Unity 3D优化
主要介绍CPU优化、GPU优化、内存优化一、 CPU优化1. 对DrawCall的优化DrawCall是CPU调用底层图像的接口函数,也就是渲染的次数,其实一个场景,渲染是由GPU做的,它的工作量不会改变,但是CPU发号指令(调用DrawCall)的次数,却大大影响了CPU的效率。为了减少DrawCall的调用次数,主要有以下三个方法:a. 批处理(Draw Call Batch)...原创 2019-04-02 20:07:09 · 251 阅读 · 0 评论 -
Unity 解决由高版本转低版本时,prefabs不能用的问题(2018.2.12转5.6.2)
在需要将高版本的Unity项目转成低版本的时候,场景中会出现很多missing prefab,这时候,在文件夹中的prefab怎么都不能拖进场景中。在网上找了很久,都没有解决这个问题,最后还是自己捣鼓出来的。其实很简单,分三步:1. 首先,用2018版本的Unity打开项目,将项目设置成以text的格式序列化prefabs:点击菜单的Edit->project Settings-...原创 2019-04-15 22:51:52 · 11430 阅读 · 12 评论 -
14 Unity 3D的脚本编译
主要介绍Unity 3D脚本编译流程,JIT编译、AOT编译、如何将项目发布到Android与IOS上。一、Unity 3D脚本编译流程我们都知道,用高级编程语言写成的源代码并不能直接被机器识别并运行,而是通过编译成原生码,也就是二进制机器码,才能运行。Unity使用的三种脚本语言编写的代码,则需要经过两次编译,第一次,将源代码编译成.Net的dll文件,第二次是运行时,进行JIT编译,从...原创 2019-04-03 16:19:15 · 1406 阅读 · 0 评论 -
Unity中制作简单的动画Animation与状态机Animator
Animator是多个Animation的集合。一、AnimationAnimation是一个小动画,在Unity中可以自己制作,比如旋转,缩放,颜色变化等等,只要设定好了关键帧,中间帧会自动生成。下面以门的开关举例。制作过程:选中你需要制作动画的物体A,点击Windows->Animation打开编辑界面。新建Animation,比如命名为open,并保存,添加属性,添...原创 2019-04-24 13:20:25 · 2197 阅读 · 0 评论 -
Unity 世界坐标与本地坐标
你在物体组件上看到的就是本地坐标,是相对于父物体的坐标。在代码中用transform.position获得的是世界坐标,所以不一定等于你在组件上看到的值。transform.rotation的旋转值范围为(-1~1),对应着(-180~180)transform.rotation值是float类型的,当你想要判断旋转是否为90度,180度等对应于1,-1,0的,最好将它转为int型,否...原创 2019-04-29 15:01:43 · 4016 阅读 · 0 评论 -
当滑动ScrollBar时,不触发item的点击响应函数
像阴阳师的选式神时的横向列表,滑动时不能触发选中某一项:在unity中应该不需要添加额外的代码,但是具体解说可以参考:https://blog.csdn.net/fx1ts/article/details/44569083总结来说就是父控件有一个方法,在发生down/move/up事件时,如果这个方法返回true,则父控件选择插手,子控件就不再响应,而把处理权交给父控件。这里的滑动就是...原创 2019-06-04 10:34:50 · 508 阅读 · 0 评论 -
杂记 Unity读取MySql遇到的问题
1. 只需要将这三个文件放入项目的插件文件夹中,在脚本中可以引用这三个.dll文件。2. 除了在脚本中通过using引用.dll文件,还可以在项目下的引用中添加引用,方法为:方法一:鼠标选中脚本,在vs的 项目-添加引用-程序集中选择填加系统自带的.dll文件方法二:选中解决方案资源管理器中项目下的引用,右键-添加引用。3. 当出现类似:未能解析主引用“MySql....原创 2019-07-29 19:26:03 · 787 阅读 · 0 评论 -
8. Unity3D中的协程Coroutine
主要介绍Unity中如何使用协程,协程是如何通过迭代器实现的,迭代器中的状态转换。一、Unity中如何使用协程因为Unity中在更新数据时,一定会在一帧内将相关函数运行完,再一次性展示出来,如果你希望在游戏中显示数据改变的过程,那么就需要用到协程。一个比较典型的例子是加载界面时的进度条,如果不用协程,那么上一帧进度条显示0%,然后开始加载场景,下一帧进度直接跳到100%,不会显示中间的数据...原创 2019-03-26 22:11:27 · 361 阅读 · 0 评论 -
5. C#中的泛型
泛型主要的思想是逻辑复用,你不需要为所有的数据结构都写一遍该逻辑,如元素的比较、排序等,不同的类可以调用一个泛型函数。主要介绍泛型机制的优点、泛型类型与泛型函数、类型约束与类型推断1. 泛型的优点a. 安全,因为指定了类型,所以不再存在因为类型转换而出现的类型不安全。b. 高效,因为不同类型之间的转换,有时还涉及到值类型与引用类型之间的装箱与拆箱,会很大的降低效率,有了泛型就不需要...原创 2019-03-13 17:02:42 · 817 阅读 · 0 评论 -
Unity响应鼠标进出事件
1. 如果是UI界面需要响应鼠标进出事件,因为是通过EventSystem实现的,则需using UnityEngine.EventSystems;实现IPointerEnterHandler, IPointerExitHandler接口在void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) ...原创 2019-02-27 21:11:48 · 2513 阅读 · 0 评论 -
Unity 直接给物体赋角度值
(想知道方法就直接看最后一行代码吧,下面开始碎碎念)在项目中需要实现一个第一人称的游戏,其中相机与人物的水平旋转角度要一致。因为一开始,我做的是第三人称视角,结果要改为第一人称,在第三人称中,我的相机有自己的角度定位方法,就是根据鼠标移动的角度计算出相机位置,然后让相机对准角色,而角色的角度是由键盘控制的。这是两个不同的角度计算方法,导致两者移动的角度不一样,相机已经旋转了90度了,人物才...原创 2019-03-01 22:22:39 · 6532 阅读 · 0 评论 -
在Unity中用GL库实现一个测量显示空间距离的功能
最后实现的效果如下: 这个功能分三个部分:1.绘制三角面片;2.绘制线段;3.绘制距离文字; 下面细讲1.获得鼠标点击的三角面片并绘制这里要求鼠标点击的物体必须有mesh Collider组件,不能是box collider等几何碰撞体组件,才能获得该碰撞体组件的三角面片(查了一下,据说因为Box Collider等碰撞体是基于算法的,没有面的概念。当然...原创 2019-02-26 13:30:14 · 2011 阅读 · 8 评论 -
Mono简介、Unity的跨平台、Unity程序从编辑到运行。
一、Mono简介mono其实是微软的.net的另一个实现,但是mono它跨平台。mono包括 c#编译器、mono运行时,mono类库、基础类库。c#编译器,目前使用的是mcs,主要将c#代码编译成CIL的byte code(一般以.exe或者.dll的形式存在)。mono运行时中也有编译器(转译),将byte code转译成运行平台上的原生码(可能是0101...之类的?),分为...原创 2019-03-05 20:44:28 · 2775 阅读 · 1 评论 -
2.4Unity三大语言,UnityScript/Boo/C#
一、UnityScript(为了方便与javaScript区别,下面简称为US)1. 现在大家都以为是JS,其实两者只是后缀名相同2. UnityScript之于Unity,相当于C#之于.NET3. 它脱胎于Boo,与Boo有相同的语义,只是语法不同,编译器只需要解析语法,再交给Boo编译器就行了,事实上确实是这么做的。4. 是静态语言,需要编译,不是脚本语言二、Boo1...原创 2019-03-05 21:20:19 · 3739 阅读 · 0 评论 -
3.1 c#类型系统
C#的类型系统是静态的、安全的、大部分是显示的,C#所有的类都继承自System.Object(这一点和JAVA是一样的)1. C#语言是静态类型(编译时就确定变量类型)即在编译时,每个变量的类型就是确定的,如果不确定,则会报编译错误。一般对一个变量声明时的类型就是它的编译类型,也就是静态类型。如Singer a;但是一个变量的编译类型不一定等于该变量的运行类型,比如Singer ...原创 2019-03-06 21:55:56 · 300 阅读 · 0 评论 -
3.3 C#引用类型以及Unity 3D的一些基础类
C#引用类型C#中大部分的类型都是引用类型的,如类、数组、字符串。引用类型一般通过引用(指针)来获得引用类型对象的值。引用类型的对象是放在托管堆上的,然后与垃圾回收机制(GC)自动回收(猜测和java一样,当没有指针指向当前对象,就可以被回收了)。当我们new一个对象时,Singer a= new Singer("张三") 分为下面三个步骤:1. 计算所需内存空间,包括该对象及...原创 2019-03-06 22:32:54 · 299 阅读 · 0 评论 -
3.4 C#值类型、Unity 3D中的值类型
C#值类型值类型在C#中是存在与线程栈中的,不归垃圾回收机制管,一般的赋值都是复制数据。所有的值类型的基类是抽象类System.ValueType,而ValueType的基类是Object值类型包括结构和枚举类,结构类又分为三种:1. 数值类型,但是数组不是2. 布尔类型3. 结构体,比如DateTime有人会觉得结构体和类很像,都有成员变量甚至成员函数,而且觉得当一个类比...原创 2019-03-06 23:04:10 · 421 阅读 · 0 评论 -
3.5 C#值类型与引用类型的转换——装箱与拆箱
装箱表示值->引用,一般在ArrayList.Add(int a)时,会将a复制一份引用类型的数值,添加到ArrayList中。装箱分以下步骤:1. 在托管堆中分配内存(包括类型对象指针和同步索引块)2. 复制值3. 返回地址引用拆箱表示从引用->值,比如int a=ArrayList[Index],这行代码分两步:1. 拆箱,在托管堆中找到需要复制的字段地...原创 2019-03-06 23:13:49 · 336 阅读 · 0 评论 -
c#中的委托
主要介绍为什么要用委托,委托的一般形式,委托链,事件与观察者模型,委托的简写,Lambda表达式。1. 为什么要用委托Unity中的消息传递机制是通过SendMessage()和BroadcastMessage()函数的(我记得用C#写服务器端的代码,给客户端发送消息就用到过这两个函数,但是我用的应该是C#中socket相关的函数,这里不是,这里指的应该是之前开卷考试,我搜到的那两个函数)...原创 2019-03-14 20:29:18 · 877 阅读 · 0 评论 -
Unity定制特性
主要介绍什么是定制特性,常用的定制特性,如何自定义特性1. 定制特性刚开始看到这个定制特性,我以为是GUI定制皮肤之类的,但其实和这个半点关系都没有,而是指开发人员可以自定义Unity这个编辑器。如在编辑器的菜单栏里添加菜单项,当选中场景中的某物体时,在Scene中显示UI面板,还有之前用到的序列化与反序列化也属于特性。Unity的定制特性其实都是继承自System.Attibute类...原创 2019-03-15 16:32:20 · 693 阅读 · 0 评论 -
c#中的数据结构
主要介绍Array(数组)、ArrayList、List<T>、LinkedList<T>、Stack、Queue、HashTable、Dictionary<K,T>1. Array(数组)a. 数组不是“数字”组,而是“数据”组,任何类型的类或者结构体都可以是里面的一个元素。b. 数组是定长的,如果要扩容则需要从新定义一个数组,让后复制过去。c...原创 2019-03-11 20:25:50 · 558 阅读 · 0 评论 -
关于Unity刷新帧率低的问题
Unity新建的项目的刷新帧率一直在20左右徘徊。垂直同步已关,没有影响删掉所有东西,没有影响在贴吧提问,据说是Unity认为当前没有东西要刷新,20帧左右是引擎自动调整的,但我在代码中强制设置刷新帧率为100,没有影响。当前唯一能改变刷新帧率的就是将游戏窗口缩小,能略微提升刷新帧率最后发现其实是我的显卡问题,在设备管理器里面发现集显上显示这个设备异常,已经被停止了。更新驱动的...原创 2019-01-15 22:11:22 · 9239 阅读 · 3 评论