플레이어가 해당 지역 안팎으로 갈 때 어떻게 퇴장 할 수 있습니까?


17

그가 그 지역을 벗어날 때 플레이어를 페이드하고 싶습니다.

예를 들어, 사람이 건물에 들어갔다고 가정합니다. 건물 밖에있는 사람은 보이지 않아야하지만 들어가면 점차 사라집니다 (페이딩 효과 사용).

코끼리가 녹지 안에있을 때 알파는 1이어야합니다

photo_2019-04-15_07-21-39

코끼리가 녹지 바깥에있을 때 알파는 0이어야합니다

photo_2019-04-15_07-21-35

답변:


34

월드 공간을 사용하여 캐릭터를 희미하게 할 수 있습니다.

오브젝트 공간 (또는 오브젝트 좌표계)은 각 게임 오브젝트에 따라 다릅니다. 그러나 모든 게임 오브젝트는 하나의 공통 좌표계 인 월드 공간으로 변환됩니다.

게임 오브젝트를 월드 스페이스에 직접 넣는 경우 오브젝트 간 변환은 게임 오브젝트의 Transform 구성 요소에 의해 지정됩니다.

https://ko.wikibooks.org/wiki/Cg_Programming/Unity/Shading_in_World_Space

월드 공간에 의해 페이딩

Record_2019_04_15_07_13_25_154

Shader "Smkgames/worldSpaceFade" {
      Properties{
         _Size("Size",Vector) = (2,2,0,0)
      }
   SubShader {
      Pass {
         CGPROGRAM

         #pragma vertex vert  
         #pragma fragment frag 


         struct vertexInput {
            float4 vertex : POSITION;
         };
         struct vertexOutput {
            float4 pos : SV_POSITION;
            float4 position_in_world_space : TEXCOORD0;
         };

         vertexOutput vert(vertexInput input) 
         {
            vertexOutput output; 

            output.pos =  UnityObjectToClipPos(input.vertex);
            output.position_in_world_space = 
               mul(unity_ObjectToWorld, input.vertex);

            return output;
         }
         float2 _Size;

         float4 frag(vertexOutput input) : COLOR 
         {
             float3 world = input.position_in_world_space;

          float4 equation = pow(world.x/_Size.x,8) + pow(world.z/_Size.y,8);
          return smoothstep(1,0,equation);
         }

         ENDCG  
      }
   }
}

표면 쉐이더

월드 스페이스를 이해 한 후에는 서피스 셰이더에서 사용할 수 있습니다.

Record_2019_04_15_07_14_24_876

Shader "Smkgames/worldSpaceFade" {
    Properties {
         _Size("Size",Vector) = (2,2,0,0)
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
 Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
     Pass {
        ZWrite On
        ColorMask 0
    }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows alpha:fade

        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
            float3 worldPos: TEXCOORD2;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        float2 _Size;

        void vert (inout appdata_full v, out Input o){
            UNITY_INITIALIZE_OUTPUT(Input,o);
            o.worldPos = mul(unity_ObjectToWorld, v.vertex);
        }


        UNITY_INSTANCING_BUFFER_START(Props)
        UNITY_INSTANCING_BUFFER_END(Props)

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            float4 equation = pow(IN.worldPos.x/_Size.x,8) + pow(IN.worldPos.z/_Size.y,8);
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = smoothstep(1,0,equation);
        }
        ENDCG
    }
    FallBack "Diffuse"
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.