Unity中如何实现立方体底部的照亮效果?
嘿,我来给你分享几个在Unity里照亮立方体底部的实用方法,亲测靠谱:
方法一:定向光源精准打光
这是最直接的方式,适合需要模拟自然向下光照的场景:
- 在Hierarchy面板右键选择Light > Directional Light,添加一个定向光源
- 调整光源旋转:把X轴拉到90°左右(光线会垂直向下),或者直接在场景视图里拖动光源手柄,让光线对准立方体底部
- 要是只想让这个光源影响立方体,就在光源的Culling Mask里只勾选立方体所在的层,避免干扰其他物体
- 最后微调Intensity(强度)和Color(颜色),直到底部亮度符合你的预期
方法二:给底部加自发光材质
适合不需要外部光源,只想让底部自主发光的场景:
- 右键创建一个材质(
Create > Material),选个支持自发光的Shader,比如Standard或者URP的Lit - 在材质面板找到Emission选项,勾选启用,调整自发光的颜色和强度
- 给立方体加个覆盖底部的子物体(比如Plane或者单独拆分的Mesh),把这个自发光材质赋值给它就行
- 这样哪怕场景没其他光源,底部也能保持发光效果
方法三:点光源贴近底部
适合局部小范围的底部照明:
- 添加点光源(
Light > Point Light),把它移到立方体正下方,离底部稍微近一点 - 调整Range(范围),确保光线只覆盖底部,别扩散太远
- 同样可以用Culling Mask限制影响范围,再调强度和颜色到满意效果
方法四:自定义Shader精细控制
如果需要更灵活的效果,写个简单Shader就能搞定:
Shader "Custom/BottomLitCube" { Properties { _MainTex ("Texture", 2D) = "white" {} _BottomColor ("Bottom Light Color", Color) = (1,1,1,1) _BottomIntensity ("Bottom Light Intensity", Range(0, 5)) = 1.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; float3 normal : NORMAL; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; float3 worldNormal : TEXCOORD1; }; sampler2D _MainTex; float4 _MainTex_ST; float4 _BottomColor; float _BottomIntensity; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.worldNormal = UnityObjectToWorldNormal(v.normal); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // 检测法线是否指向下方(Y轴负方向) float bottomFactor = saturate(dot(i.worldNormal, float3(0, -1, 0))); col += _BottomColor * bottomFactor * _BottomIntensity; return col; } ENDCG } } }
- 把这段代码保存成
.shader文件,创建材质并选择这个Shader - 赋值给立方体后,就能在材质面板调节底部发光的颜色和强度,完全由Shader控制,不用额外光源
内容的提问来源于stack exchange,提问作者Don_Huan
相关产品推荐
相关产品推荐

