unity shader 人物走入草叢,草的晃動(dòng)特效特效怎么做?
在游戲中,草叢可以增加游戲的真實(shí)感,但是如果草叢沒(méi)有動(dòng)態(tài)效果,會(huì)使得游戲顯得很生硬。因此,在游戲中,我們需要給草叢添加動(dòng)態(tài)效果,讓草叢隨著人物的移動(dòng)而搖曳起來(lái)。本文將介紹如何使用Unity Shader來(lái)實(shí)現(xiàn)人物走入草叢,草的晃動(dòng)特效。
一、草叢模型的制作
首先,我們需要制作草叢的模型。在Unity中,我們可以使用Unity自帶的草叢模型,也可以使用第三方模型。如果使用Unity自帶的草叢模型,可以在菜單欄中選擇GameObject->3D Object->Grass進(jìn)行創(chuàng)建。如果使用第三方模型,需要將模型導(dǎo)入到Unity中。
二、草叢材質(zhì)的制作
接下來(lái),我們需要為草叢創(chuàng)建材質(zhì)。在Unity中,材質(zhì)是決定物體外觀的重要因素之一。我們可以使用Unity自帶的材質(zhì),也可以自己創(chuàng)建材質(zhì)。在本例中,我們將創(chuàng)建一個(gè)新的材質(zhì)。
創(chuàng)建新材質(zhì)
在Unity中,我們可以在Project面板中右鍵點(diǎn)擊空白處,選擇Create->Material來(lái)創(chuàng)建新材質(zhì)。
編輯材質(zhì)
在Inspector面板中,我們可以編輯材質(zhì)的屬性。在本例中,我們需要編輯以下屬性:
(1)Diffuse:設(shè)置草叢的顏色。
(2)Normal Map:設(shè)置草叢的法線貼圖,用于模擬草叢的凹凸感。
(3)Alpha Cutoff:設(shè)置草叢的透明度,用于控制草叢的密度。
(4)Transparency:設(shè)置草叢的透明度,用于控制草叢的透明度。
三、草叢的晃動(dòng)特效實(shí)現(xiàn)
在上面的兩個(gè)步驟中,我們已經(jīng)完成了草叢模型和材質(zhì)的制作。接下來(lái),我們需要使用Shader來(lái)實(shí)現(xiàn)草叢的晃動(dòng)特效。
編寫Shader
在Unity中,我們可以使用Shader來(lái)實(shí)現(xiàn)草叢的晃動(dòng)特效。Shader是一種用于渲染3D圖形的程序,它可以控制物體的外觀和動(dòng)態(tài)效果。在本例中,我們將使用Shader來(lái)實(shí)現(xiàn)草叢的晃動(dòng)特效。
首先,我們需要?jiǎng)?chuàng)建一個(gè)新的Shader。在Unity中,我們可以在Project面板中右鍵點(diǎn)擊空白處,選擇Create->Shader來(lái)創(chuàng)建新Shader。
然后,我們需要編輯Shader的代碼。在本例中,我們將使用Unity自帶的Standard Shader作為基礎(chǔ),然后在其基礎(chǔ)上添加草叢的晃動(dòng)特效。下面是Shader的代碼:
Shader "Custom/GrassShader"{
Properties{
_MainTex("Texture", 2D) = "white" {}
_BumpMap("Normal Map", 2D) = "bump" {}
_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
_Transparency("Transparency", Range(0.0, 1.0)) = 1.0
_WaveAmplitude("Wave Amplitude", Range(0.0, 1.0)) = 0.1
_WaveFrequency("Wave Frequency", Range(0.0, 10.0)) = 1.0
_WindDirection("Wind Direction", Vector) = (1, 1, 0)
_WindSpeed("Wind Speed", Range(0.0, 10.0)) = 1.0
}
SubShader{
Tags{ "RenderType"="Opaque" }
LOD 100
CGPROGRAM
#pragma surface surf Standard
#pragma target 3.0
.
sampler2D _MainTex;
? ?sampler2D _BumpMap;
? ?float _Cutoff;
? ?float _Transparency;
? ?float _WaveAmplitude;
? ?float _WaveFrequency;
? ?float3 _WindDirection;
? ?float _WindSpeed;
? ?struct Input{
? ? ? ?float2 uv_MainTex;
? ? ? ?float2 uv_BumpMap;
? ? ? ?float3 worldPos;
? ? ? ?float3 worldNormal;
? ? ? ?float3 worldTangent;
? ? ? ?float3 worldBinormal;
? ? ? ?float3 worldViewDir;
? ?};
? ?void surf(Input IN, inout SurfaceOutputStandard o){
? ? ? ?// Diffuse
? ? ? ?o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
? ? ? ?// Normal
? ? ? ?o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
? ? ? ?// Alpha
? ? ? ?clip(o.Albedo.a - _Cutoff);
? ? ? ?// Transparency
? ? ? ?o.Alpha = _Transparency;
? ? ? ?// Wave
? ? ? ?float3 windDir = normalize(_WindDirection);
? ? ? ?float3 windVec = windDir * _WindSpeed;
? ? ? ?float3 worldPos = IN.worldPos;
? ? ? ?float3 offset = worldPos.xz * _WaveFrequency;
? ? ? ?float wave = _WaveAmplitude * (sin(dot(offset, windVec)) + 1) / 2;
? ? ? ?worldPos.y += wave;
? ? ? ?IN.worldPos = worldPos;
? ? ? ?// Lighting
? ? ? ?o.Metallic = 0;
? ? ? ?o.Smoothness = 0.5;
? ? ? ?o.Emission = 0;
? ?}
? ?ENDCG
}
FallBack "Diffuse"
}
解析Shader
上面的Shader代碼中,我們定義了以下屬性:
(1)_MainTex:草叢的顏色貼圖。
(2)_BumpMap:草叢的法線貼圖。
(3)_Cutoff:草叢的透明度。
(4)_Transparency:草叢的透明度。
(5)_WaveAmplitude:草叢的晃動(dòng)幅度。
(6)_WaveFrequency:草叢的晃動(dòng)頻率。
(7)_WindDirection:草叢的風(fēng)向。
(8)_WindSpeed:草叢的風(fēng)速。
在surf函數(shù)中,我們實(shí)現(xiàn)了以下功能:
(1)Diffuse:設(shè)置草叢的顏色。
(2)Normal:設(shè)置草叢的法線貼圖。
(3)Alpha:控制草叢的透明度。
(4)Transparency:控制草叢的透明度。
(5)Wave:實(shí)現(xiàn)草叢的晃動(dòng)特效。
(6)Lighting:設(shè)置草叢的光照效果。
草叢的晃動(dòng)特效實(shí)現(xiàn)
在Shader中,我們使用了sin函數(shù)來(lái)實(shí)現(xiàn)草叢的晃動(dòng)特效。sin函數(shù)可以產(chǎn)生周期性的波形,我們可以通過(guò)改變參數(shù)來(lái)控制波形的幅度和頻率。
草叢的晃動(dòng)特效需要受到風(fēng)向和風(fēng)速的影響。我們可以通過(guò)改變_WindDirection和_WindSpeed來(lái)控制風(fēng)向和風(fēng)速。
四、示例
在本例中,我們將使用Unity自帶的草叢模型,創(chuàng)建一個(gè)新的材質(zhì),并使用上面的Shader來(lái)實(shí)現(xiàn)草叢的晃動(dòng)特效。
創(chuàng)建新材質(zhì)
在Unity中,我們可以在Project面板中右鍵點(diǎn)擊空白處,選擇Create->Material來(lái)創(chuàng)建新材質(zhì)。
編輯材質(zhì)
在Inspector面板中,我們可以編輯材質(zhì)的屬性。在本例中,我們需要編輯以下屬性:
(1)Diffuse:設(shè)置草叢的顏色。
(2)Normal Map:設(shè)置草叢的法線貼圖。
(3)Alpha Cutoff:設(shè)置草叢的透明度,用于控制草叢的密度。
(4)Transparency:設(shè)置草叢的透明度,用于控制草叢的透明度。
創(chuàng)建Shader
在Unity中,我們可以在Project面板中右鍵點(diǎn)擊空白處,選擇Create->Shader來(lái)創(chuàng)建新Shader。
然后,我們需要編輯Shader的代碼。在本例中,我們將使用上面的Shader代碼。
將Shader應(yīng)用到材質(zhì)中
將Shader應(yīng)用到材質(zhì)中,我們需要在材質(zhì)的Inspector面板中選擇Shader。在本例中,我們選擇Custom/GrassShader。
將材質(zhì)應(yīng)用到草叢模型中
將材質(zhì)應(yīng)用到草叢模型中,我們需要在Scene面板中選擇草叢模型,然后將材質(zhì)拖拽到Mesh Renderer組件的Material屬性中。
測(cè)試效果
在Scene視圖中,我們可以看到草叢已經(jīng)具有了晃動(dòng)特效。我們可以通過(guò)改變_WaveAmplitude和_WaveFrequency來(lái)控制草叢的晃動(dòng)幅度和頻率。我們也可以通過(guò)改變_WindDirection和_WindSpeed來(lái)控制風(fēng)向和風(fēng)速。
本文教程就到這里了,歡迎加入我的簡(jiǎn)介游戲開發(fā)學(xué)習(xí)交流群~