unity

目前游戏行业内部主要几款游戏引擎的技术对比

爱⌒轻易说出口 提交于 2020-03-18 21:22:06
如果只有客户端的话,可以考虑用 gamebryo, 技术好一点,用 ogre 也可以,如果规模不大,用 unity3d ,如果很有钱,要效果很好的,用 unreal3,bigworld 是带服务器的,如果能力不够,最好不要自己写。 如果使用 Ogre 需要投入较多的人力和物力,因为 Ogre 是开源的,工具不齐全,使用其他流行的引擎需要购买授权,可以在 Ogre 的基础上做东西,并且可以宣称是自主研发的,没有人会追究,如果是小型游戏可以采用 Unity3D ,选择什么引擎具体要考虑项目想怎么做,准备投入多少钱,计划多长时间 Ogre 引擎的技术特征分析和横向对比 作者 :赵占夕 邮箱: 38858308@qq.com 日期 : 2010-12-4 目录 第一部分 目前行业内的主流游戏引擎 ... 1 第二部分 每款引擎的市场资料对比 ... 2 第三部分 每款引擎的技术资料对比 ... 3 3.1 Ogre . 3 3.2 Unreal 6 3.3 Unity . 7 3.4 Gamebryo . 8 3.5 Bigworld . 10 3.6 引擎综合评测表 ... 11 第四部分 总结 ... 14 第一部分 目前行业内的主流游戏引擎 免费的 收费的 Ogre Unreal Unity Gamebryo Bigworld 3D 游戏引擎有很多,以上只列出了 一

Unity与Android之间的交互之AndroidManifest

独自空忆成欢 提交于 2020-03-18 08:28:23
https://blog.csdn.net/qq_15003505/article/details/70231975 AndroidManifest,中文名一般称之为清单文件。它描述了应用程序的组件的活动、服务,广播接收机,内容提供商,应用程序组成、应用程序的Java包命名、权限、特性等。每个安卓应用程序必须有一个AndroidManifest.xml文件,基本内容如下: <?xml version="1.0" encoding="utf-8"?> <!-- <manifest> <manifest>AndroidManifest.xml配置文件的根元素, 必须包含一个<application>元素并且指定xlmns:android和package属性。 xlmns:android指定了Android的命名空间,默认情况下是“http://schemas.android.com/apk/res/android”; package是标准的应用包名,也是一个应用进程的默认名称,我们为了避免命名空间的冲突,一般会以应用的域名来作为包名。 android:versionCode是给设备程序识别版本用的,必须是一个整数值代表app更新过多少次; android:versionName则是给用户查看版本用的,需要具备一定的可读性, --> <manifest xmlns:android=

Unity中采用二进制存档与读档

允我心安 提交于 2020-03-17 20:59:08
在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的位置以及类型、游戏射击总数量、游戏得分等数据,Save脚本的代码如下(这个脚本是不能挂在在场景中的游戏物体上,因为这个类没有继承自MonoBehaviour行为类): using System . Collections ; using System . Collections . Generic ; using UnityEngine ; //串行化,串行化是指存储和获取磁盘文件、内存或其他地方中的对象。 [ System . Serializable ] public class Save { public List < int > livingTargetPosition = new List < int > ( ) ; public List < int > livingMonsterTypes = new List < int > ( ) ; public int shootNum = 0 ; public int score = 0 ; } 然后再创建一个脚本GameManager,并放置以下的方法: //创建Save对象并存储当前游戏状态信息 private Save CreateSaveGO ( ) { //新建Save对象 Save save = new Save ( )

unity 内存方面优化

大城市里の小女人 提交于 2020-03-17 12:29:58
作者写的很好,看了他的书收获很大。以下内容摘自: https://www.cnblogs.com/murongxiaopifu/p/4284988.html 既然要聊Unity3D运行时候的内存优化,那我们自然首先要知道Unity3D游戏引擎是如何分配内存的。大概可以分成三大部分: Unity3D内部的内存 Mono的托管内存 若干我们自己引入的DLL或者第三方DLL所需要的内存。 第3类不是我们关注的重点,所以接下来我们会分别来看一下 Unity3D内部内存 和 Mono托管内存 ,最后还将分析一个官网上 Assetbundle的案例 来说明内存的管理。 Unity3D内部内存 Unity3D的内部内存都会存放一些什么呢?各位想一想,除了用代码来驱动逻辑,一个游戏还需要什么呢?对,各种资源。所以简单总结一下Unity3D内部内存存放的东西吧: 资源:纹理、网格、音频等等 GameObject和各种组件。 引擎内部逻辑需要的内存:渲染器,物理系统,粒子系统等等 Mono托管内存 因为我们的游戏脚本是用C#写的,同时还要跨平台,所以带着一个Mono的托管环境显然必须的。那么Mono的托管内存自然就不得不放到内存的优化范畴中进行考虑。那么我们所说的Mono托管内存中存放的东西和Unity3D内部内存中存放的东西究竟有何不同呢?其实Mono的内存分配就是很传统的运行时内存的分配了:

Unity Mono脚本 加密

混江龙づ霸主 提交于 2020-03-17 08:11:12
加密环境 引擎版本:Unity3D 5.3.4 及更高版本 ( 使用Mono而并非IL2CPP ) 操作系统:CentOS 6.2(Final) 加密环境:Android、IOS(暂定) 加密对象:C#源代码(dll文件) 解密方法:libmono.so (重点:加入解密算法并重编译此文件) 加密的目地 .NET Reflector等反编译工具 无法通过对dll反编译得到源码 注意事项 dll的加密算法和libmono.so解密算法一致 思路分析 重点:我们需要对libmono.so重编译,加入我们的解密算法。 准备环境 编译系统:linux或mac os 我的编译环境:centos 6.2 Final,建议在linux或mac os中编译 libmono.so linux安装运行库 git 在编译过程中,可能需要通过git获取某些运行库。 查看是否安装git: git –version CentOS7 yum 安装git https://git-scm.com/book/en/v2/Getting-Started-Installing-Git 其它package autoconf automake bison gcc gettext glib >= 2.0 libtool make perl glib >= 2.0 这个一直安装失败 centos安装软件 在root权限下

Unity手游汉化笔记④:UABE+AssetStudio替换TMPro字体

廉价感情. 提交于 2020-03-17 08:10:12
总的笔记: https://www.cnblogs.com/guobaoxu/p/12055930.html   TMPro,完整的叫TextMeshPro,原本是个插件,后来Unity逐渐做成了内置,主要特点是在放大之后不会模糊,逐渐成为主流,但是他的字库是需要自己制作的,而不是直接用的字体文件,随之而来的缺点就是字库没办法做得足够完整,也失去了动态字体。关于TMPro的汉化,分成两个部分,文字和字体,本文讲字体替换,文字的修改请看这篇: Unity手游汉化笔记①:UABE+AssetStudio编辑MonoBehavior类型Asset 一、使用工具:   Unity版本:2018.4.5f1   AssetStudio(地址: https://www.perfare.net/tag/assetstudio )   UABE(地址: https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor ) 二、字体替换 1.用Unity做一个简单的Demo   效果如下:   做Demo的过程中你应该会发现,一个TMPro的字体以一个SDF结尾的Asset文件呈现,展开后如下:   实际上还有一个MonoBehaviour,整体类似于BMFont,所以我在替换的时候和BMFont思路类似

Unity手游汉化笔记⑤:图片和TextAsset替换

送分小仙女□ 提交于 2020-03-17 08:05:11
总的笔记: https://www.cnblogs.com/guobaoxu/p/12055930.html 用处:   TextAsset的最常见用途之一是多语言,所以汉化过程中有时候会改到这个东西   图片就不用说了,不是所有的文字都是用Text显示的,汉化过程中多少会有图片出现 工具:   AssetStudio(地址: https://www.perfare.net/tag/assetstudio )   UABE(地址: https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor ) 一、TextAsset Demo:用Unity做的简单例子,读取文本中的文字并直接显示 修改过程:   先用Asset Studio加载assets/bin/Data文件夹,菜单栏Filter Type-TextAsset,在右侧预览中可以看到内容,从而确定我们要改的TextAsset是哪一个   右键Show original File,得知在文件resources.asset中,用UABE打开这个文件,定位到该TextAsset,通过名字、类型、大小,很容易定位到的   在UABE右侧点击Plugins,弹出的窗口里两个选项,导入和导出,选择Export to .txt,导出为txt文件

Unity手游汉化笔记①:UABE+AssetStudio修改MonoBehavior

本秂侑毒 提交于 2020-03-17 08:04:49
总的笔记: https://www.cnblogs.com/guobaoxu/p/12055930.html 目录 一、使用工具 二、脚本在序列化文件中的表现形式 三、对MonoBehavior的参数进行修改 (1)寻找和定位 (2)修改之文本形式 (3)修改之二进制形式 MonoBehavior是开发过程中绑定在物体上的脚本被序列化后得到的,在汉化过程中,修改文字经常会需要修改这种类型的资源,字体的修改过程也会涉及到。 一、使用工具:   Unity版本:2018.4.5f1   AssetStudio(地址: https://www.perfare.net/tag/assetstudio )   UABE(地址: https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor )   il2cppdumper(地址: https://www.perfare.net/tag/il2cppdumper ) 二、脚本在序列化文件中的表现形式   正向开发中,类中的public字段会放进检查器Inspector中(不考虑属性的控制的话),而在序列化的时候,首先会将类的信息序列化为一个MonoScript,绑定在场景物体上的具体对象则是序列化为MonoBehavior,一个类可以多次实例化

Unity Shader (1)

a 夏天 提交于 2020-03-16 18:32:34
1、OpenGL的窗口坐标原点位于左下角,DirectX的窗口坐标原点位于左上角。 2、常见的着色器语言HLSL(High Level Shading Language)是微软在DirectX基础上提供的,着色器的编译器完全由微软提供,因此只要微软系统支持的硬件,使用相同的编译器编译出来的结果是一样的;GLSL(OpenGL Shading Language)是OpenGL提供的,它的编译器不由Khronos小组提供而是由各个实现OpenGL API的硬件厂商提供,因此不同机器编译后得到的结构可能不同;CG(C for Graphic)是NVIDIA提供的,意义上来说它是跨平台硬件无关的,但是因为微软硬件市场的占有率,它收到了HLSL的影响。 3、Unity可以使用 "CG/HLSL"或者"GLSL" 编写着色器,当然会有一些语法糖等内容的修改,因为较为繁琐但是这种方法较为少用,为此Unity提供了一种更为简便的使用方法。 4、Unity使用Shader的一般流程 1)创建一个材质(Material) 2)创建目标Shader 3)将Shader挂载到Material上 4)将Material挂载到目标渲染对象,并在Shader属性面板上调节效果知道满意为止 5、Unity 提供了几种shader的模板供使用者选择,通过Assets->Create->Shader可以看到这些模板

Unity异常捕获

安稳与你 提交于 2020-03-16 12:59:17
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using System.Diagnostics; public class ExceptionHandler : MonoBehaviour { //是否作为异常处理者 public bool IsHandler = false; //是否退出程序当异常发生时 public bool IsQuitWhenException = true; //异常日志保存路径(文件夹) private string LogPath; //Bug反馈程序的启动路径 private string BugExePath; void Awake() { LogPath = Application.dataPath.Substring( 0, Application.dataPath.LastIndexOf( "/" ) ); BugExePath = Application.dataPath.Substring( 0, Application.dataPath.LastIndexOf( "/" ) ) + "\\Bug.exe"; //注册异常处理委托 if( IsHandler ) {