大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧。
TextArea 特性可以让我们更加方便的在 Inspector 中编辑字符串文本.
Photon Unity Networking(首字母缩写PUN)是一个Unity多人游戏插件包。它提供了身份验证选项、匹配,以及快速、可靠的通过我们的Photon后端实现的游戏内通信。
最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现。原本在C#中很方便地就可以完成的一个小场景,使用Unity3D的设计思想(即一切游戏对象皆空对象,拖拽组件才使其具有了活力)来实现却需要花费大量时间与精力,究竟它神奇在什么地方?本文通过实现这个小例子来看看。
unity3d_script_c#/FindOtherGameobjects.cs
1、解释 游戏对象(GameObjects)和 资源(Assets)的区别与联系。
Distinction betwwen Assets and UnityEngine.Objects. An Asset is a file on disk,stored in the Assets folder of a Unity project. Texture,3D models , or audio clips are common types of Assets. A UnityEngine.Object, or Object is a set of serialized data collectively describing a specific instance of a resource.All objects are subclasses of the UnityEngine.Object base class.
谷歌决定对开发者开放Google Maps的API,鼓励开发者打造更多基于地理位置的AR游戏。 谷歌为全球游戏开发者开放了针对游戏应用的谷歌地图游戏API(GoogleMaps APIs Gaming
纹理是图片或者影视文件覆盖在GameObjects上面来给予他们可视化的效果 Unity支持任何类型的image 和 movie文件在3D项目资产文件中作为纹理。在资源导入的时候,Unity对资源进行优化专门针对游戏,对游戏的容量没有负担,这个过程在Unity内部实现,并不是直接修改文件。
•Skinned Mesh Renderer - 蒙皮网格•Material - 材质球•Avatar Bone - 骨架
由CPU收集美术的资源信息,传递给GPU,通知GPU进行一次渲染过程叫DrawCall
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
翻译自https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/
MenuCommand CONTEXT : 哪个类型东西进行编译 用例:改变一个脚本中的一些字段 此脚本放在Editor文件夹下
面板中Scale Multiplier填入倍数,例如0.5即是缩小一倍,大于1即是放大
小时候,老人常说:在我们身边其实有很多奇怪的生灵,只不过我们看不到而已。这听起来很恐怖,但如果我们身边存在的未知生灵,是有趣的动画小宠物,或是电影中的经典角色,你是害怕还是忍不住想和它们互动呢? 《
https://blog.csdn.net/qq_39640124/article/details/88284191
如图所示,假如一个模型被大量的规整的摆放在场景中,当我们修改了这个模型需要替换时,需要将新模型按照如上位置进行逐个替换比较麻烦,下面介绍的工具Replacer可以很方便的进行批量替换:
模型的Import Settings中Materials部分是不支持多选进行编辑的,如图所示,如果我们选中多个模型,编辑器中会提示Material Editing is not supported on multiple selection.
Dialogue System是一个分支式的统一会话系统。它不需要任何脚本,但它是设计为易于由程序员扩展。
Unity AssetDatabase类中提供了获取资产依赖项的API,如果我们想要获取某一资产被哪些资产引用,可以通过如下思路去实现:
在现场查看和游戏视图都有一个小玩意儿菜单。点击小玩意儿场景视图或游戏视图访问工具栏中的按钮,小玩意儿菜单。
public SerializedProperty GetIterator(); 返回SerializedProperty类 objectReferenceValue 参数:Object索引的相关obj
AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合,它可以存储任何一种Unity可以识别的资源,如模型,纹理图,音频,场景等资源。也可以加载开发者自定义的二进制文件。他们的文件类型是.assetbundle/.unity3d,他们先前被设计好,很容易就下载到我们的游戏或者场景当中。
Photon Unity Networking (PUN)是一种用于多人游戏的Unity软件包。 灵活的匹配可以让玩家进入房间,可以通过网络同步对象。 快速和可靠的通信是通过专用的Photon 服务器完成的,因此客户端连接不需要1对1。
Unity Shader定义了渲染所需的各种代码、属性和指令;材质则允许我们调整这些属性,并将其最终赋给相应的模型。 通俗讲就是:Shader制定了渲染的规则,材质是让这个物体在这个规则下调整渲染效果。
Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。 降低DrawCall的方法:
前言 上一篇《Unity引擎资源管理代码分析 ( 1 ) 》讲解了Unity引擎资源管理代码的类型设计架构和Resources.Load接口的实现。感兴趣的同学推荐先点击链接阅读上一篇文章。本文将继续
流水线 1.应用阶段:(CPU)输出渲染图元,粗粒度剔除等 比如完全不在相机范围内的需要剔除,文件系统的粒子系统实现就用到粗粒度剔除。 2.几何阶段:(GPU)把顶点坐标转换到屏幕空间,包含了模型空间 到世界空间 到观察空间(相机视角view) 到齐次裁剪空间(投影project2维空间,四维矩阵,通过-w<x<w判断是否在裁剪空间) 到归一化设备坐标NDC(四维矩阵通过齐次除法,齐次坐标的w除以xyz实现归一化) 到屏幕空间(通过屏幕宽高和归一化坐标计算)。 a.顶点着色器:坐标变换和逐顶点光照,将顶点空间转换到齐次裁剪空间。 b.曲面细分着色器:可选 c.几何着色器:可选 d.裁剪:通过齐次裁剪坐标的-w<x<w判断不在视野范围内的部分或者全部裁剪,归一化。 e.屏幕映射:把NDC坐标转换为屏幕坐标 3.光栅化阶段:(GPU)把几何阶段传来的数据来产生屏幕上的像素,计算每个图元覆盖了哪些像素,计算他们的颜色、 a.三角形设置:计算网格的三角形表达式 b.三角形遍历:检查每个像素是否被网格覆盖,被覆盖就生成一个片元。 c.片元着色器:对片元进行渲染操作 d.逐片元操作:模板测试,深度测试 混合等 e.屏幕图像 ------------------------------------------------------- 矩阵: M*A=A*M的转置(M是矩阵,A是向量,该公式不适合矩阵与矩阵) 坐标转换: o.pos = mul(UNITY_MATRIX_MVP, v.vertex);顶点位置模型空间到齐次空间 o.worldNormal = mul((float3x3)_Object2World,v.normal);//游戏中正常的法向量转换,转换后法向量可能不与原切线垂直,但是不影响游戏显示,而且大部分显示也是差不多的。一般用这个就行了。 o.worldNormal = mul(v.normal, (float3x3)_World2Object);顶点法向量从模型空间转换到世界空间的精确算法,公式是用_Object2World该矩阵的逆转置矩阵去转换法线。然后通过换算得到该行。 ------------------------------------------------------- API: UNITY_MATRIX_MVP 将顶点方向矢量从模型空间变换到裁剪空间 UNITY_MATRIX_MV 将顶点方向矢量从模型空间变换到观察空间 UNITY_MATRIX_V 将顶点方向矢量从世界空间变换到观察空间 UNITY_MATRIX_P 将顶点方向矢量从观察空间变换到裁剪空间 UNITY_MATRIX_VP 将顶点方向矢量从世界空间变换到裁剪空间 UNITY_MATRIX_T_MV UNITY_MATRIX_MV的转置矩阵 UNITY_MATRIX_IT_MV UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间转换到观察空间 _Object2World将顶点方向矢量从模型空间变换到世界空间,矩阵。 _World2Object将顶点方向矢量从世界空间变换到模型空间,矩阵。 模型空间到世界空间的矩阵简称M矩阵,世界空间到View空间的矩阵简称V矩阵,View到Project空间的矩阵简称P矩阵。 --------------------------------------------- _WorldSpaceCameraPos该摄像机在世界空间中的坐标 _ProjectionParams _ScreenParams _ZBufferParams unity_OrthoParams unity_Cameraprojection unity_CameraInvProjection unity_CameraWorldClipPlanes[6]摄像机在世界坐标下的6个裁剪面,分别是左右上下近远、 ---------------------------- 1.表面着色器 void surf (Input IN, inout SurfaceOutput o) {}表面着色器,unity特殊封装的着色器 Input IN:可以引用外部定义输入参数 inout SurfaceOutput o:输出参数 struct SurfaceOutput//普通光照 { half3 Albedo;//纹理,反射率,是漫反射的颜色值 half3 Normal;//法线坐标 half3 Emission;//自发光颜色 half Specular;//高光,镜面反射系数 half Gloss;//光泽度 half Alpha;//alpha通道 } 基于物理的光照模型:金属工作流Surfa
vscode直接加载文件夹,不要使用unity右键打开项目,unity2019bug导致vscode打开后没有界面,后才占用项目,不能右键打开。
这段时间也是发生了不少事情,借疫情的机会我也杂糅着学了不少Unity的东西,越是保持着我之前的“用到不懂再查”的心态,就越是感受到知识缺乏体系的局限性。于是这里把最近的一些小笔记总结起来,然后我一方面是我要来搞论文的事情,另一方面也是希望自己尽量系统点学习这些东西,所以这篇以后可能又要安静一段吧。
在游戏开发中,我们少不了和数据打交道,数据的存储格式可谓是百花齐放,xml、json、csv、bin等等应有尽有。在这其中Json以其小巧轻便、可读性强、兼容性好等优点受到广大程序员的喜爱。目前市面上有许多针对Json类型数据的序列化与反序列化库,比如Newtonsoft.Json、LitJson、SimpleJson、MiniJson等等,在这之中马三比较钟意于LitJson,其源码规模适中、代码规范可读性好、跨平台能力强、解析速度快,但是美中不足的是LitJson对float(官方最新Release已经支持float)、以及Unity的Vector2、Vector3、Rect、AnimationCurve等类型不支持,譬如在解析float的时候会报 Max allowed object depth reached while trying to export from type System.Single 的错误,这就比较蛋疼了。
最近我们的项目由Unity2018升级到了Unity2019.4,但是突然间发现FBX资源导入时的后处理不生效了。经过一系列的实验,发现了升级到Unity2019以后,资源管线后处理中的一些坑,今天马三来和大家分享一下这个过程。
本文略难,系转载,原文出自,http://python.jobbole.com/83557/
Unity中的数据持久化,可以使用excel、文件、yaml、xml、json等方式。
在本章教程中,我们将使用游戏对象来构建一个图形,这样我们就可以把数学公式用图像展示出来。然后再把函数和时间关联起来,从而产生一个运动的图像。
1、rigidbody.addforce(Vector3 * speed) (见roll-a-ball)
0.前言 这些简单的shader程序都是写于2015年的暑假。当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目。这些文章闲置在我个人博客中,一年将过,师弟也到了学shader的时候,这些例程虽然很简单,刚接触shader时却可以练练手,所以从个人博客中中搬了出来。而对于有一个月以上shaderLab编程经验的同学来说,这篇文章可以不用看了:-) 1.表面着色器概述 表面着色器只存在于Unity中,算是Unity微创新自创的一套着色器标准。它使得shader的书写门槛降
描边效果是游戏里面非常常用的一种效果,一般是为了凸显游戏中的某个对象,会给对象增加一个描边效果。最近又跑回去玩了玩《剑灵》,虽然出了三年了,感觉在现在的网游里面画面仍然算很好的了,剑灵里面走近或者选中NPC的一瞬间,NPC就会出现描边效果,不过这个描边效果是渐变的,会很快减弱最后消失(抓了好久才抓住一张图….)
本文将整理的面试题大致分为以下几个模块,方便针对性学习和背题! 由于大部分常用的面试题在网上基本上已经有比较标准的答案了,所以说面试题类的文章基本上大同小异。 所以本篇文章中的部分内容也是直接从网上摘选来的 如果有不对的地方也欢迎指正(尽力不会出现这种情况),某个模块的内容不够也欢迎在评论区指出,我去重新添加上。
Unity开发中,常常会用到一些第三方组件。本文以实例介绍如何在热更新脚本中使用这些第三方组件。 首先说明几个基本步骤: 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更。 我们在脚本中使用第三方组件之前,需要将它们也导出一份可供脚本使用的API 这个步骤可以通过脚本工程提供的一个配置文件和批处理完成。 本文以DOTween为例,说明如何在工程中使用DOTween。 首先,先创建一个Unity工程,并且创建热更新工程。如果您不会创建,请参考这里: 去DOTween的官网下载Unity插件包。
领取专属 10元无门槛券
手把手带您无忧上云