随笔分类 - Unity
摘要:最近在上线双语版本(一个包支持中文、英文二种语言)时,遇到一个坑点 if (ToolUtils.isAndroid()) { if (Application.systemLanguage == SystemLanguage.ChineseSimplified || Application.systemLanguage == SystemLanguage.Chinese || Applica...
阅读全文
摘要:在扩展Unity的时候,往往会用到一些属性,这里将常用的列一下。 1、属性只读; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; public class ReadOnlyAttribute : PropertyAttribute { } #if UNITY_EDITOR [CustomPropertyDrawe...
阅读全文
摘要:安装方式 1)通过命令行安装 brew install jenkins,可能会遇到先更新 brew 的情况 https://brew.sh/index_zh-cn; 2)通过 pkg 安装,官方网址:https://jenkins.io/ 安装完成后,会自动打开浏览器 http://localhost:8080 ,然后按照提示根据自己的需求 Next 下去(最新版本的界面是中文,不用担心看...
阅读全文
摘要:项目用的是Unity5.5版本,开发的时候将相关的图集、预制对象资源都放在 Resources 目录下,而真机使用的是 StreamingAssets 目录下的资源。 Resources(不分层级)在打包的时候,无论是否被使用,只要在里面会被打包进 apk 和 ipa 中,势必导致整个包体变大。 所以,我们需要做的事情就是。 Resources 目录改名为 xx –> 打包 –> xx 再...
阅读全文
摘要:要实现一个功能: 从 lua 文件中提取字符串放到 excel 中,再将 excel 给海外同事,翻译完成后,用翻译的文本替换相应中文。 整个功能并不复杂,要点有二点: 1、提取字符串,一行中文如“我是中文…”,中间可能会遇到”我是中文\”xx\”我是中文”,如果用正则\”[^\”]+\”则会匹配失败,思路就是先将\”替换,查找成功后再将其替换回来,excel中有三列,分别是:key、中文、待...
阅读全文
摘要:向量的平移,比较简单。 Xnew = Xold + Tx Ynew = Yold + Ty 缩放也较为简单 矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了。 稍微复杂一点的是旋转,如果只是二维也很简单(因为
阅读全文
摘要:翻阅了很多资料,也做了不少笔记,决定还是对渲染进行一个总结,以巩固所学的东西。 《Real-Time Rendering, Third Edition》 (PDF的配图链接)将一个渲染流程分为三个阶段: 即 应用阶段(PApplication Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage) 我借用《Unity Shader入门精...
阅读全文
摘要:最近一直在学习实时渲染,不免要接触线性代数。而渲染中,一定会用到矩阵,当我再次去复习我之前看的书时,发现《Unity3D 实战核心技术详解》关于矩阵就有几处错误 ,特标注出来。 书的第一章《3D数学与Unity》,1.3.2讲矩阵缩放、1.3.3讲矩阵的旋转。缩放是一个矩阵,后面旋转针对绕三个不同的轴的旋转矩阵(x、y、z),总共4个矩阵,其中3个是错误的,只有一个绕y轴旋转是正确的。我不确定...
阅读全文
摘要:这个问题是我第一次接触3D开发就有的疑问,最近在看《游戏引擎架构》(Game Engine Architecture),在书中找到了答案。 三角网格(Triangle Mesh),游戏开发者会使用三角形网格来建模。三角形是表面的分段线性逼近,如果用多条相连的线段分段逼近一个函数或曲线。 实时渲染之所以选用三角形,是因为三角形有以下的优点: 三角形是最简单的多边形,少于3个顶点就不能成为一个...
阅读全文
摘要:用Visual Studio写shader实在蛋疼,那可能就会有人要问了,为啥不用插件可视化制作shader呢?因为我是新手,新手还是老老实实敲代码,慢慢来… 所以试着在网上找找,有没有类似的插件或者编辑器,被我找到了,也基本符合我的要求。 我想实现的效果如下:双击xxx.shader打开Sublime Text,可在Sublime Text中对常用的函数进行提示,并支持函数的跳转。 这就分为...
阅读全文
摘要:Unity中的输入管理器由Input类进行操控。官方文档地址:https://docs.unity3d.com/ScriptReference/Input.html 中文翻译的话可以在这里:http://www.ceeger.com/Script/Input/Input.html 这里只说几个易混淆的点。 既然已经有GetKey、GetKeyDown、GetKeyUp 以及 GetMouseB...
阅读全文
摘要:一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本。鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字。但是我在使用中发现很致使的一个问题,当多人编辑一个Excel时,冲突了就很麻烦,解决起来的成本还蛮高的。 之后我想了一些办法,例如搭建一个web站点,将所有的字符串 Key、Value保存到数据库中,避免冲突,方便去查询。但感觉还是太...
阅读全文
摘要:JavaScript中的定时器与延时器,分别是 setInterval、setTimeout,对应的清理函数是:clearInterval、clearTimeout。 而在Unity中,则分别是:Invoke、InvokeRepeating和取消延迟调用 CancelInvoke 延迟调用 void Invoke(string methodName, float time); 重复延迟调...
阅读全文
摘要:最近为美术编写一个Unity编辑器的扩展,主要为了减轻美术在修改预制对象时的机械化操作的繁琐和出错。具体实现的几个功能: 1、删除指定组件; 2、复制、粘贴指定的组件; 3、重新关联新的属性; 4、重新保存预制对象; 一、删除指定类型的组件 public static void RemoveComponentHandler(GameObject gameObject, Type compone...
阅读全文
摘要:正常情况下都会显示的,如果没有显示,尝试以下几种方案: 1)缩小模型看一看 2)旋转灯光试试,看是否有阴影 3)检查阴影设置 菜单栏Edit –> Project Settings –> Quality 4)检查灯光自身的属性设置,包括强度和阴影类型
阅读全文
摘要:.asset一般用来存储一些配置,比如SDK初始化的相关参数。 using System.Collections.Generic; using UnityEngine; namespace XXX { [CreateAssetMenu(fileName="xxx", menuName="xxx")] public class CommonConfig : ScriptableOb...
阅读全文
摘要:Unity 5.0开始增加了RuntimeInitializeOnLoadMethodAttribute,这样就很方便在游戏初始化之前做一些额外的初始化工作,比如:Bulgy参数设置、SDK初始等工作。 先来看一下它的生命周期 sing UnityEngine; public class ExampleClass : MonoBehaviour { private void Awak...
阅读全文
摘要:InitializeOnLoad 属性应用的对象是 静态构造函数,它可以保证在编辑器启动的时候调用此函数。根据这个特性,可以在编辑器中设置定期的回调(帧更新),来实现类似watchFile的功能。这里借助了EditorApplication类中的 update 委托,在编辑器运行时,它将每秒调用多次。 using UnityEditor; using UnityEngine; [Initiali...
阅读全文
摘要:DLL —— Dynamic Link Library(动态链接库文件),这里以Window平台为例。 Unity支持的两种语言生成的DLL库(C++、C#),这里以C#为例,C++网上可以搜索很详细的资料。 1) 添加引用关系 如果有对UnityEngine、UnityEditor的引用,需要先添加引用关系。 路径通常位于Unity安装目录下的Editor/Data/Managed路径...
阅读全文
摘要:通过我们使用Unity开发游戏,是在PC/Mac上。而一个游戏通常也会有很多的场景,比如A、B、C、D三个场景,正常流程下的执行顺序是 A –> B –> C –> D。在具体一点,比如 A —— 启动场景、B —— 资源加载场景、C —— 登录场景、D —— 战斗场景。 游戏先启动 –> 加载资源
阅读全文