Unityで近づくと見えるシェーダー
こんにちは。Kishiです。今回はUnityでマリオギャラクシーのどこかのステージにあったような、近づくと見えるシェーダーを作ってみました。影もちゃんとついています。
非常に簡単です。Surface Shaderでも色々できるんですね。
まずはshader
</p> <p>Shader "Custom/hole_shader_complete" {<br /> Properties{<br /> _MainColor("Color", Color) = (1,1,1)<br /> _MainTex("Texture", 2D) = "white" {}<br /> _BumpMap("Bumpmap", 2D) = "bump" {}<br /> _PlayerPos("Player Position", Vector) = (0.0, 0.0, 0.0, 1.0)<br /> }<br /> SubShader{<br /> Tags{ "RenderType" = "Opaque" }<br /> CGPROGRAM<br /> #pragma surface surf Lambert</p> <p> struct Input {<br /> float2 uv_MainTex;<br /> float2 uv_BumpMap;<br /> float4 color : COLOR;<br /> float3 worldPos;<br /> };<br /> float4 _MainColor;<br /> sampler2D _MainTex;<br /> sampler2D _BumpMap;<br /> float4 _PlayerPos;</p> <p> void surf(Input IN, inout SurfaceOutput o) {<br /> float4 c = tex2D(_MainTex, IN.uv_MainTex) * _MainColor;<br /> float dist = distance(IN.worldPos, _PlayerPos);</p> <p> if (dist < 5.0) {<br /> o.Albedo = c.rgb;<br /> o.Alpha = c.a;<br /> o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));<br /> }<br /> else {<br /> clip(-1);<br /> }</p> <p> }<br /> ENDCG<br /> }<br /> Fallback "Diffuse"<br /> }<br />
次は消したいものにつけるC#コード
<br /> using UnityEngine;<br /> using System.Collections;</p> <p>public class HoleOther : MonoBehaviour {<br /> [SerializeField]<br /> GameObject player_;</p> <p> // Use this for initialization<br /> void Start () {<br /> GetComponent<Renderer>().material.SetVector("_PlayerPos", player_.transform.position);<br /> }</p> <p> // Update is called once per frame<br /> void Update () {<br /> GetComponent<Renderer>().material.SetVector("_PlayerPos", player_.transform.position);</p> <p> }<br /> }<br />
以上です。
Posted on: 2016年2月29日, by : TRSasasusu