Unity Time详解 作者: rontian 时间: 2018-08-06 分类: Unity3D 评论 #### Time.time 表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。 #### Time.timeSinceLevelLoad 表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止。 #### Time.deltaTime 表示从上一帧到当前帧时间,以秒为单位。 #### Time.fixedTime 表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。 #### Time.fixedDeltaTime 表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。 #### Time.maximumDeltaTime 一帧能获得的最长时间。物理和其他固定帧速率更新(类似MonoBehaviour FixedUpdate)。 #### Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前N帧的时间加权平均的值。 #### Time.timeScale 时间缩放,默认值为1。若设置<1,表示时间减慢;若设置>1,表示时间加快;若设置=0,则游戏暂停。可以用来加速、减速和暂停游戏,非常有用。 #### Time.frameCount 总帧数 #### Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加。 #### Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。 #### Time.unscaledDeltaTime 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。 #### Time.unscaledTime 不考虑timescale时候与time相同,若timescale被设置,则无效。
unity中判断iphone设备型号的方法 作者: rontian 时间: 2018-03-26 分类: Unity3D 评论 #### 在unity开发iphone app,特别是最近适配iphone x时,需要知道app目前运行的设备型号。可以通过SystemInfo.deviceModel获取设备型号,但是,获取的值是形如:iPhone8,1这种。这里有个表: | Model | Name | | :-----: | :------ | | iPhone7,1 | iPhone 6 Plus | | iPhone7,2 | iPhone 6 | | iPhone8,1 | iPhone 6s | | iPhone8,2 | iPhone 6s Plus | | iPhone8,4 | iPhone SE | | iPhone9,1 | 国行、日版、港行iPhone 7 (A1660/A1779/A1780) | | iPhone9,2 | 港行、国行iPhone 7 Plus (A1661/A1785/A1786) | | iPhone9,3 | 美版、台版iPhone 7 (A1778) | | iPhone9,4 | 美版、台版iPhone 7 Plus (A1784) | | iPhone10,1 | 国行(A1863)、日行(A1906)iPhone 8 | | iPhone10,4 | 美版(Global/A1905)iPhone 8 | | iPhone10,2 | 国行(A1864)、日行(A1898)iPhone 8 Plus | | iPhone10,5 | 美版(Global/A1897)iPhone 8 Plus | | iPhone10,3 | 国行(A1865)、日行(A1902)iPhone X | | iPhone10,6 | 美版(Global/A1901)iPhone X | > 转载来源:http://www.unitycn.cn/?p=342 ### SystemInfo 详解 ``` Rendering.CopyTextureSupport copyTextureSupport:(只读)支持多种复制纹理功能的情况。 string deviceModel:(只读)设备的模型或模式。 string deviceName:(只读)用户定义的设备名称。 DeviceType deviceType:(只读)返回程序运行所在的设备类型(PC电脑、掌上型等)。 string deviceUniqueIdentifier:(只读)设备的唯一标识符。每一台设备都有唯一的标识符。 int graphicsDeviceID:(只读)显卡的唯一标识符ID。 string graphicsDeviceName:(只读)显卡的名称。 Rending.GraphicsDeviceType graphicsDeviceType:(只读)显卡的类型。 string graphicsDeviceVendor:(只读)显卡的供应商。 int graphicsDeviceVendorID:(只读)显卡供应商的唯一识别码ID。 string graphicsDeviceVersion:(只读)显卡的类型和版本。 int graphicsMemorySize:(只读)显存大小。 bool graphicsMultiThreaded:(只读)是否支持多线程渲染? int graphicsShaderLevel:(只读)显卡着色器的级别。 int maxTextureSize:(只读)支持的最大纹理大小。 NPOTSupport npotSupport:(只读)GPU支持的NPOT纹理。 string operatingSystem:(只读)操作系统的版本名称。 int processorCount:(只读)当前处理器的数量。 int processorFrequency:(只读)处理器的频率。 string processorType:(只读)处理器的名称。 int supportedRenderTargetCount:(只读)支持渲染多少目标纹理。 bool supports2DArrayTextures:(只读)是否支持2D数组纹理。 bool supports3DTextures:(只读)是否支持3D(体积)纹理。 bool supportsAccelerometer:(只读)是否支持获取加速度计。 bool supportsAudio:(只读)是否支持获取用于回放的音频设备。 bool supportsComputeShaders:(只读)是否支持计算着色器。 bool supportsGyroscope:是否支持获取陀螺仪。 bool supportsImageEffects:(只读)是否支持图形特效。 bool supportsInstancing:(只读)是否支持实例化GPU的Draw Call。 bool supportsLocationService:是否支持定位功能。 bool supportsMotionVectors:是否支持运动向量。 bool supportsRawShadowDepthSampling:(只读)是否支持阴影深度。 bool supportsRenderTextures:(只读)是否支持渲染纹理。 bool supportsRenderToCubemap:(只读)是否支持立方体纹理。 bool supportsShadows:(只读)是否支持内置阴影。 bool supportsSparseTextures:(只读)是否支持稀疏纹理。 bool supportsStencil:(只读)是否支持模版缓存。 bool supportsVibration:是否支持用户触摸震动反馈。 int systemMemorySize:(只读)系统内存大小。 string unsupportedIdentifier:不支持运行在当前设备的SystemInfo属性值。 ```
Unity模型变灰Shader 作者: rontian 时间: 2017-12-22 分类: Unity3D 评论 #### 使用方法 ```csharp Renderer tryRenderer = gameObject.GetComponent(); if (value) { tryRenderer.material.SetInt("_Desaturate", 1); } else { tryRenderer.material.SetInt("_Desaturate", 0); } ``` #### 代码 ``` // Shader created with Shader Forge v1.38 Shader "Shader Forge/Model gray" { Properties { _Diffuse ("Diffuse", 2D) = "white" {} _Color ("Color", Color) = (0.5,0.5,0.5,1) [MaterialToggle] _Desaturate ("Desaturate", Float ) = 0 [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 } SubShader { Tags { "Queue"="AlphaTest" "RenderType"="TransparentCutout" } Pass { Name "FORWARD" Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_FORWARDBASE #include "UnityCG.cginc" #include "AutoLight.cginc" #include "Lighting.cginc" #pragma multi_compile_fwdbase_fullshadows #pragma multi_compile_fog #pragma only_renderers d3d9 d3d11 glcore gles metal #pragma target 3.0 uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST; uniform float4 _Color; uniform fixed _Desaturate; struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float2 texcoord0 : TEXCOORD0; }; struct VertexOutput { float4 pos : SV_POSITION; float2 uv0 : TEXCOORD0; float4 posWorld : TEXCOORD1; float3 normalDir : TEXCOORD2; LIGHTING_COORDS(3,4) UNITY_FOG_COORDS(5) }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.uv0 = v.texcoord0; o.normalDir = UnityObjectToWorldNormal(v.normal); o.posWorld = mul(unity_ObjectToWorld, v.vertex); float3 lightColor = _LightColor0.rgb; o.pos = UnityObjectToClipPos( v.vertex ); UNITY_TRANSFER_FOG(o,o.pos); TRANSFER_VERTEX_TO_FRAGMENT(o) return o; } float4 frag(VertexOutput i) : COLOR { i.normalDir = normalize(i.normalDir); float3 normalDirection = i.normalDir; float4 _Diffuse_var = tex2D(_Diffuse,TRANSFORM_TEX(i.uv0, _Diffuse)); clip(_Diffuse_var.a - 0.5); float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz); float3 lightColor = _LightColor0.rgb; ////// Lighting: float attenuation = LIGHT_ATTENUATION(i); ////// Emissive: float3 node_544 = (lerp( _Diffuse_var.rgb, (float3(0.6,0.6,0.6)*lerp(_Diffuse_var.rgb,dot(_Diffuse_var.rgb,float3(0.3,0.59,0.11)),1.0)), _Desaturate )*_Color.rgb); // Diffuse Color float3 emissive = (node_544*_LightColor0.rgb*UNITY_LIGHTMODEL_AMBIENT.rgb); float node_7731 = 0.5; float node_5683 = ((max(0,dot(lightDirection,normalDirection))+node_7731)*node_7731); float3 finalColor = emissive + ((node_544*(node_5683*node_5683))*_LightColor0.rgb*attenuation); fixed4 finalRGBA = fixed4(finalColor,1); UNITY_APPLY_FOG(i.fogCoord, finalRGBA); return finalRGBA; } ENDCG } Pass { Name "FORWARD_DELTA" Tags { "LightMode"="ForwardAdd" } Blend One One CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_FORWARDADD #include "UnityCG.cginc" #include "AutoLight.cginc" #include "Lighting.cginc" #pragma multi_compile_fwdadd_fullshadows #pragma multi_compile_fog #pragma only_renderers d3d9 d3d11 glcore gles metal #pragma target 3.0 uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST; uniform float4 _Color; uniform fixed _Desaturate; struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float2 texcoord0 : TEXCOORD0; }; struct VertexOutput { float4 pos : SV_POSITION; float2 uv0 : TEXCOORD0; float4 posWorld : TEXCOORD1; float3 normalDir : TEXCOORD2; LIGHTING_COORDS(3,4) UNITY_FOG_COORDS(5) }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.uv0 = v.texcoord0; o.normalDir = UnityObjectToWorldNormal(v.normal); o.posWorld = mul(unity_ObjectToWorld, v.vertex); float3 lightColor = _LightColor0.rgb; o.pos = UnityObjectToClipPos( v.vertex ); UNITY_TRANSFER_FOG(o,o.pos); TRANSFER_VERTEX_TO_FRAGMENT(o) return o; } float4 frag(VertexOutput i) : COLOR { i.normalDir = normalize(i.normalDir); float3 normalDirection = i.normalDir; float4 _Diffuse_var = tex2D(_Diffuse,TRANSFORM_TEX(i.uv0, _Diffuse)); clip(_Diffuse_var.a - 0.5); float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w)); float3 lightColor = _LightColor0.rgb; ////// Lighting: float attenuation = LIGHT_ATTENUATION(i); float3 node_544 = (lerp( _Diffuse_var.rgb, (float3(0.6,0.6,0.6)*lerp(_Diffuse_var.rgb,dot(_Diffuse_var.rgb,float3(0.3,0.59,0.11)),1.0)), _Desaturate )*_Color.rgb); // Diffuse Color float node_7731 = 0.5; float node_5683 = ((max(0,dot(lightDirection,normalDirection))+node_7731)*node_7731); float3 finalColor = ((node_544*(node_5683*node_5683))*_LightColor0.rgb*attenuation); fixed4 finalRGBA = fixed4(finalColor * 1,0); UNITY_APPLY_FOG(i.fogCoord, finalRGBA); return finalRGBA; } ENDCG } Pass { Name "ShadowCaster" Tags { "LightMode"="ShadowCaster" } Offset 1, 1 Cull Back CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_SHADOWCASTER #include "UnityCG.cginc" #include "Lighting.cginc" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_shadowcaster #pragma multi_compile_fog #pragma only_renderers d3d9 d3d11 glcore gles metal #pragma target 3.0 uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST; struct VertexInput { float4 vertex : POSITION; float2 texcoord0 : TEXCOORD0; }; struct VertexOutput { V2F_SHADOW_CASTER; float2 uv0 : TEXCOORD1; }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.uv0 = v.texcoord0; o.pos = UnityObjectToClipPos( v.vertex ); TRANSFER_SHADOW_CASTER(o) return o; } float4 frag(VertexOutput i) : COLOR { float4 _Diffuse_var = tex2D(_Diffuse,TRANSFORM_TEX(i.uv0, _Diffuse)); clip(_Diffuse_var.a - 0.5); SHADOW_CASTER_FRAGMENT(i) } ENDCG } } FallBack "Diffuse" CustomEditor "ShaderForgeMaterialInspector" } ```