К основному контенту

Unity3d Fade and Trigger



Как сделать чтобы при попадании в триггер объект затухал?
Зеленый квадрат - игрок,
белый - триггер, который затухает/расцветает.



Замечания:
- на триггере стоит Transperent Shader
- на герое стоит Rigidbody + isKinematic
- на обоих Collider.isTrigger = true
- закомментирован код для использования с твинером LeanTween


 using UnityEngine;  
 using System;  
 using System.Collections;  
 public class TestFade : MonoBehaviour  
 {  
   public enum PaperState : int  
   {  
     On = 0,  
     FadeOut = 1,  
     Off = 2,  
     FadeIn = 3  
   }  
   public PaperState state = PaperState.On;  
   public int insideCount = 0;  
   public GameObject myGameObject;  
   public Renderer myRenderer;  
   void OnTriggerEnter(Collider other)  
   {  
     insideCount++;  
     if (state == PaperState.On)  
     {  
       FadeOut();  
     }  
   }  
   void OnTriggerExit(Collider other)  
   {  
     insideCount--;  
     if (insideCount == 0 && state != PaperState.On)  
     {  
       FadeIn();  
     }  
   }  
   void FadeOut()  
   {  
     state = PaperState.FadeOut;  
     StartCoroutine(CorFadeOut(myRenderer, new Color(1f, 1f, 1f, 0f), 0.5f, WhenFadeOutEnd));  
     //LeanTween.color(myGameObject, new Color(1f, 1f, 1f, 0f), 0.5f)  
     //  .setOnComplete(WhenFadeOutEnd);  
   }  
   void WhenFadeOutEnd()  
   {  
     state = PaperState.Off;  
   }  
   void FadeIn()  
   {  
     state = PaperState.FadeIn;  
     StartCoroutine(CorFadeOut(myRenderer, new Color(1f, 1f, 1f, 1f), 0.5f, WhenFadeInEnd));  
     //LeanTween.color(myGameObject, new Color(1f, 1f, 1f, 1f), 0.5f)  
     //  .setOnComplete(WhenFadeInEnd);  
   }  
   void WhenFadeInEnd()  
   {  
     state = PaperState.On;  
   }  
   IEnumerator CorFadeOut(Renderer r, Color color, float time, Action onComplete)  
   {  
     float curTime = 0f;  
     Color startColor = r.material.color;  
     while (curTime < time)  
     {  
       r.material.color = Color.Lerp(startColor, color, curTime / time);  
       curTime += Time.deltaTime;  
       yield return null;  
     }  
     if (onComplete != null)  
       onComplete();  
   }  
   IEnumerator CorFadeIn(Renderer r, Color color, float time, Action onComplete)  
   {  
     float curTime = 0f;  
     Color startColor = r.material.color;  
     while (curTime < time)  
     {  
       r.material.color = Color.Lerp(startColor, color, curTime / time);  
       curTime += Time.deltaTime;  
       yield return null;  
     }  
     if (onComplete != null)  
       onComplete();  
   }  
 }  

Комментарии