Unity3D
文章平均质量分 80
FreedomRoad~
专注于app底层/架构/算法/业务工作流程,记录进步的足迹和感悟。
展开
-
Unity3D中的JavaScript语言基础
Unity中的JS,也称UnityScript,和基于浏览器的JS有比较大的区别:基本概念:Unity3d中的脚本可以与游戏对象链接,变量数值的修改以及实时预览脚本修改后的游戏效果,节省了很多脚本调整和调试的时间,提高了开发效率。简单的项目和Unity中的大量例子和脚本资源包都是用JS。商业项目基本都用C#,因为C#和C/C++交互方便,丰富的数据结构和面向对象的架构利于大型程序的编写原创 2014-11-05 00:40:15 · 29242 阅读 · 0 评论 -
U3D粒子系统
粒子系统可以对任何物体,添加粒子组件。1)老粒子粒子由发射器,运动器,渲染器组成。当设置粒子的velocity时候,设置x,z值可以得到风吹走的效果。simulate in world space在是世界坐标系中更新粒子,关闭后可以跟随物体运动,技能特效效果需要该设置。粒子性能比较消耗性能,要尽量使用少量,少层的粒子达到效果,且粒子要及时关闭和销毁。老式的粒子动画器勾选原创 2017-10-05 17:54:05 · 1293 阅读 · 0 评论 -
U3D后期全屏幕渲染特效
Image Effects图像特效主要应用在Camera对象上,可以让游戏画面带来丰富的视觉效果,使得游戏画面更具艺术感和个性。U3D的大部分特效可以混合使用,U3D的图像特效都在OnRenderImage()函数中在图像到达颜色缓存进行显示交换前进行的图像处理,任何附加在摄像机上的Image Effects脚本都可以通过编辑其代码来修改特效的效果。所有的后期屏幕特效只有pro版本才支持。原创 2017-10-05 17:54:55 · 3774 阅读 · 0 评论 -
U3D场景遮挡剔除技术
Occlusion Culing遮挡剔除,在场景中将不会看到或隐藏的对象进行剔除,从而减少每帧提交给渲染管线的数据量。U3D提供了三种不同的剔除技术来供用户选择。遮挡剔除步骤:1)将场景中需要剔除的静态物体动勾选Static标志,可以进行光照烘培。也可以在occlusion culling窗口中的object页签中设置,无法裁剪动态的数据,因此如果游戏对象是运动的需要勾选occlude原创 2017-10-05 17:55:34 · 2814 阅读 · 0 评论 -
U3D寻路导航网格
需要寻路导航的物体增加导航组件,场景中的物件(地块)设置为带有一定路径信息(联通障碍等)的网格,设置寻路物体的目标点,寻路物体会在地图场景中根据网格路径信息找到最短的路径到达目标点。使用导航网格寻路的步骤:1)创建地图场景的游戏对象标记为navigation static类型,以参与导航网格的烘培。对场景中的起始点物体添加navigation->Off Mesh Link组件 可以设置原创 2017-10-05 17:56:08 · 1254 阅读 · 0 评论 -
U3D数学图形基础
向量和矩阵,四元数,欧拉角:U3D使用的是左手坐标系。基础数学类有:Vector3类,Vector4类等。在世界坐标系中叉乘是按照左手坐标系进行的。旋转方向也是按照左手定则规定的。Slerp插值函数:transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, fracComplete);//Slerp插值U原创 2017-10-05 17:56:51 · 834 阅读 · 0 评论 -
U3D脚本
js脚本:对于unity js没有修饰符的变量是public修饰符,在Inspector中可调节。变量和函数的声明都是as语言标准的形式。unity js会自动添加和文件名同名的类,会自动继承MonoBehaviour类。C#脚本:C#默认参数访问类型是private的。C#脚本, 文件名要和类名相同;继承自MonoBehaviour类,需要Awake(),Star原创 2017-10-05 17:57:21 · 836 阅读 · 0 评论 -
U3D角色动画
1.角色导入角色控制器资源,有第一人称和第三人称prefab及移动组件。1)基本的CharacterController3D角色的旋转跟着鼠标轴旋转。CharacterController move移动,tr.Rotate旋转和OnControllerColliderHit 碰撞处理。Input.GetAxis("Mouse X") 屏幕上从左往右是正值,从右往左是负值。I原创 2017-10-05 17:49:30 · 1503 阅读 · 0 评论 -
U3D基础教程重读 基础编辑和导入文件
编辑器,主要是asset->project; gameobject(prefab)->scene; component->inspector的使用。file/edit是设置;windows是不同的编辑视图,动画,烘培,纹理打包,性能分析等:1.基本使用:习惯开菜单上的快捷键,提高操作能力;ctrl+1;鼠标滚轮,选中F;按下Q拖动场景或鼠标滚轮可缩放场景;alt鼠标右键旋转;鼠标左原创 2017-10-05 17:48:14 · 1304 阅读 · 0 评论 -
Unity3D 自定义光照模型实现
// Use BlinnPhongShader "U1/Obj/U1ObjNoAmbient" {Properties{_Color("Diffuse Material Color", Color) = (1,1,1,1)_SpecColor("Specular Material Color", Color) = (1,1,1,1)_MainTex("Base (RGB原创 2017-05-02 15:22:40 · 2294 阅读 · 0 评论 -
U3D Shader
Shader实现各种材质和光照效果,镜头景深,动态模糊,卡通渲染等。U3D是简单的游戏引擎,提供了尽量多的内建功能,丰富全面的Shader就是其中之一。要善于使用U3D内建的Shader和自己编写的Shader实现效果。一.内建Shader有简单光效,高光,法线,反射等,分类有:1)普通,用于不透明的物体。2)透明,用于透明物体。3)透明镂空效果,用于包含完全透明部分的半透明对原创 2017-10-06 14:28:32 · 1308 阅读 · 0 评论 -
U3D的Shader数据的来源
1.所有Unity的Shader数据的来源先获取MaterialPropertyBlock设置的数据,再获取Render物体(Render关联的Mesh Filter中获取)的材质球设置的数据,然后从全局内建或通过程序设置的数据,最后使用默认数据。材质对象可以获取编辑器上序列化的数据,或通过app动态改变属性(矩阵和数组只能动态写入,不能序列化)。How property values原创 2017-10-06 14:40:20 · 1142 阅读 · 0 评论 -
U3D Shader去掉全局雾和使用自定义环境光
去掉环境光照和全局雾,添加自己的环境光又利用surface的shader光照和阴影全局雾用nofog去掉,noambient去掉,注掉UNITY_LIGHT_FUNCTION_APPLY_INDIRECT添加自己的环境光inline fixed4 LightingU1BlinnPhong (SurfaceOutput s, fixed3 viewDir, UnityGI gi){f原创 2017-10-06 14:41:28 · 3509 阅读 · 0 评论 -
Unity Shader渲染顺序 坐标系 和光照模型
1.Shader中的渲染顺序是按照Queue"="Geometry" "RenderType"="Opaque,Queue是一般渲染时候的顺序,RenderType是后处理特效使用的渲染顺序。Background, Geometry, AlphaTest,Transparent和Overlay,分别对应数值1000,2000,2450,3000和4000。Shader中,如果要C#访问的u原创 2017-11-08 21:59:35 · 1260 阅读 · 0 评论 -
U3D Shader Vertex Path光源存储信息和自定义shader实现
在Editor\Data\CGIncludes\UnityCG.cginc中有响应的说明。1) 光源float4 _WorldSpaceLightPos0; // 表示光源的位置,_WorldSpaceLightPos0.w == 0是平行光。否则是点光源。float4 _LightColor0; // 表示光源的颜色。2)点光源存储,三个float4向量,表示4个点光源的原创 2017-11-09 00:17:17 · 1077 阅读 · 0 评论 -
U3D光源烘培光照贴图和light probes
光源:方向光源是最不消耗GPU资源的。点光源的阴影较消耗GPU资源。聚光灯是较消耗GPU资源的。Area light区域光源无法用于实时光照,只适用于光照贴图烘培。Cookie如果是平行光或聚光灯 那么可以是2D的纹理遮罩贴图,如果是点光源那么cookie要是cubemap texture立方体纹理。在forward渲染模式下只有平行光支持阴影,其它光源类型在player原创 2017-10-05 17:51:39 · 7227 阅读 · 0 评论 -
U3D物理引擎
物理效果,布料,碰撞检测都需要rigibody刚体组件。使用物理引擎,引入力大小和速度的(最终会通过物理引擎改变transform参数),不能同时操作transform的参数,否则对transform的计算将会出现错误。rigibody:mass是刚体的质量, drag是空气阻力,angular drag是角阻力。is kinematic是否开启动力学,不再受物理引擎的影响tr原创 2017-10-05 17:50:52 · 1759 阅读 · 0 评论 -
U3D 发布相关
设置项目名称,项目启动图像,分辨率设置,添加需要发布的场景。注意预定义宏,.net 版本设置,渲染路径,Bundle Identify,资源版本,图形API设置。web主要是js和unity之间的相互通信,设置离线是否可播放的选择。android主要是安装好java sdk, android sdk,直接发布apk,也可以发布google android project。ios主要原创 2017-10-07 18:12:27 · 831 阅读 · 0 评论 -
Unity3D基本
<br />一、基本概念:scene:texture RGB 模式设置<br />game:maximize on play<br />window:layout tall模式<br />scene:object move rotate scute部分摆动<br />project:list every thing to use<br />hierarchy:list every object you use in this scene<br />inspector:every de原创 2011-04-12 13:42:00 · 2781 阅读 · 0 评论 -
异步事件回调机制原理探索
自定义的异步事件回调机制:可以在自己的应用程序中,先注册事件和事件对应的回调函数(回调函数可以是函数指针法,虚函数方法的方式);自己程序中每帧检测事件是否发生或者条件是否满足,满足的时候就进入回调函数。如果这样的检查是在同一个线程中那么就是同步的延迟调用,如果是在子线程中就是异步调用,但是这样的性能还是比较差的,除非不得以,否则还是用OS的异步回调机制性能高。OS层面的异步事件回调机制原创 2015-03-15 12:58:02 · 7516 阅读 · 2 评论 -
Unity中js语言使用注意
1.Unity中js语言尽量不用少用全局变量,局部变量一定要var声明。2.善于利用数组持有内存及时释放。3.js基于对象基于文档上下文模型善于相互获取调用和注册。Unity中的js也是基于mono .net框架的,也就是所有内置文档对象都是基于mono和unity对象,而且数据类型会映射为.net的IL CTS中间语言类型。unity中的js与其说是js,不如说是Un原创 2015-09-28 07:42:25 · 2983 阅读 · 0 评论 -
Unity3D中js与C#之间相互调用的解决办法
转载自:http://www.manew.com/3102.htmlUnity3D中一些脚本的方法只能用在JS中,在C#中是无效的,而C#可以与服务器端通讯,JS本身却不行。而且,如果需要用到js调用c#的问题,js会比c#先编译,所以在mac里编译ios的时候会出错,提示为无法找到那个C#类。所以势必会遇到这两种语言脚本中方法的互相调用。解决方法:1.首先在你的Unity3D程序里建转载 2015-09-28 07:47:16 · 6640 阅读 · 0 评论 -
unity3d中的欧拉角
1.欧拉角Vector3(x,y,z)代表的是旋转物体(标准旋转坐标轴x,y,z若旋转物体则取反),且是将物体从物体坐标系旋转到惯性坐标系,旋转顺序为 z, y, x也就是roll pitch yaw。2.欧拉角有别名和万向锁问题,不要随便增长欧拉角的值,也不要单独改变欧拉角的一个旋转角度值,而是用一个Vector3全部一起改变。3.欧拉角来自于Transform.eulerAngles,原创 2015-11-09 08:55:24 · 13589 阅读 · 0 评论 -
U3D shader基础
1.底层的VertexShader和Pixel ShaderShader中的顶点着色器只是代替了模型到投影之间的顶点变换和动画移动缩放旋转,和uv,法向量,切线,颜色,光照的设置, 但不能生成新的顶点。而最新的geometry shaders和tessellation shaders却可以在顶点着色后进行顶点生成和减少的强大功能。图形api将顶点变换到ndc坐标系和原创 2016-01-17 21:24:07 · 1547 阅读 · 0 评论 -
Unity资源管理汇总
资源管理原理:制作:1.创建AssetBundle,用BuildAssetBundleExplicitAssetsName(可以根据Asset名称来加载资源,优先),BuildAssetBundle,BuildStreamScenexxx.记得需要指明Assets资源名称,地址,创建所在的平台。2.创建资源依赖关系,可以用Push/Pop AssetDependencies来减少资转载 2016-01-06 09:35:32 · 4584 阅读 · 0 评论 -
u3d坐标系详解
1.unity3d中的坐标系1)World Space(世界坐标):标准的D3D左手坐标系,旋转方向是左手法则包括法向量方向,背面剔除逆时针的。我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在transform.position可以获得该位置坐标。例如:MainCamera的坐标系是(0,0,-10);注意模型中的嵌套父子坐标系,连续的变换,和变换的累计(骨骼动画中的缩放旋转原创 2015-10-09 23:30:06 · 10553 阅读 · 0 评论 -
U3D UI坐标换算和屏幕适配计算方法
目前最成熟的移动UI适配方案,还是基于按照高度等比适配或者是按照宽度等比适配(如果宽高都要完全适配那么可能要多套资源),结合锚点定位的方式来进行适配。其它的方法,实时改变设计分辨率,改变摄像机aspect角度都是徒劳的。下面是按照宽度,和高度适配下的一些偏移计算方法。缩放比例问题按照宽度适配: public void ApplyAdjustParticleSize( flo原创 2016-05-24 11:05:07 · 4622 阅读 · 0 评论 -
Unity3D中的Coroutine详解
Unity中的Coroutine原理猜测:虚拟机分段执行机制, 同类型嵌套用栈存放实现串行执行.Unity中使用yield Coroutine需要注意的问题原创 2014-11-09 23:29:33 · 57684 阅读 · 0 评论 -
用好Lua+Unity,让性能飞起来——Lua与C#交互篇
用好Lua+Unity,让性能飞起来——Lua与C#交互篇张鑫6 个月前转载自:https://zhuanlan.zhihu.com/p/23559893原文地址:用好Lua+Unity,让性能飞起来——Lua与C#交互篇整合Lua是目前最强大的Unity热更新方案,毕竟这是唯一可以支持iOS热更新的办法。然而作为一个重度uLua用户,我们踩过了很多坑才将u转载 2017-05-02 22:19:02 · 21513 阅读 · 1 评论 -
U3D网格解决方案
U3D对的网络功能是尽可能可靠,灵活为设计原则。两种成熟的网络方案是 授权服务器和非授权服务器。1.授权服务器其实也叫状态同步,由服务器处理所有的游戏状态,客户端只是处理输入请求和表现,不维护具体的游戏状态逻辑。主角的移动,技能的释放需要服务器作出反应,这些状态才能真正有效。可以避免外挂,但是问题是操作有网络延迟,需要做前摇处理。2.非授权服务器也叫帧同步,由客户端进行游戏的交互和本地进行原创 2017-10-06 18:19:07 · 846 阅读 · 0 评论 -
U3D编辑器拓展
U3D除了提供Runtime class,还提供了Editor class用于编辑器的拓展开发,包括编辑器环境下的GUI类,编辑器工具类,编辑器操作类等。自定义编辑窗口:using UnityEditor;public class MyWindow : EditorWindow {static MyWindow myWindow;[MenuItem("Window/MyWind原创 2017-10-06 21:14:13 · 952 阅读 · 0 评论 -
U3D资源加载
Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的。开发时候用Resources.Load较简单(放在Resources目录下),主要看发布原创 2017-10-06 23:35:40 · 2010 阅读 · 0 评论 -
U3D 优化技术
一、Batching技术:在拥有网格并携带一种不同的材质时候才会形成一个独立的drawcall, 在通知GPU和切换材质shader纹理时候也是比较耗时的(特别是第一次CPU->GPU传递纹理数据)。Batching 的主要目标是 合并物体的材质,只要他们使用相同的材质(纹理和shader),GPU就可以按完全相同的方式进行处理(批处理合并drawcall)。Batching处理技原创 2017-10-07 14:28:30 · 1176 阅读 · 0 评论 -
U3D Shader Forward Path光源存储信息
1.Forward Add要和Forward Base一起使用。Tags{ "LightMode"="ForwardBase"}Tags{ "LightMode"="ForwardAdd"}否则Forward Add在任何渲染路径下都不被渲染。2.Vertex list渲染路径下,Forward的Shader,都不会被渲染出来。在向前或延后渲染路径下,Forward 的Shad原创 2017-11-11 13:40:28 · 1033 阅读 · 1 评论