Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.48 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5.  
  6. public class Proximity : MonoBehaviour
  7. {
  8.   public GameObject Head;
  9.  
  10.   public Material DiffuseMaterial;
  11.   public Material FadeMaterial;
  12.  
  13.   private Material localDiffuseMaterial;
  14.   private Material localFadeMaterial;
  15.  
  16.   private float fadeStart = 0.45f;
  17.   private float fadeEnd = 0.4f;
  18.   private GameObject cam;
  19.   private Colors colors;
  20.   private SkinnedMeshRenderer meshRenderer;
  21.  
  22.   private enum MaterialType { Diffuse, Fade }
  23.   private MaterialType lastMaterialType;
  24.  
  25.   private void Awake()
  26.   {
  27.     localDiffuseMaterial = Instantiate(DiffuseMaterial);
  28.     localFadeMaterial = Instantiate(FadeMaterial);
  29.  
  30.     meshRenderer = GetComponent<SkinnedMeshRenderer>();
  31.     meshRenderer.material.SetFloat("_Distance", 0f);
  32.     meshRenderer.enabled = false;
  33.  
  34.     colors = GameObject.Find("Colors").GetComponent<Colors>();
  35.     cam = GameObject.Find("CenterEyeAnchor");
  36.  
  37.     meshRenderer.material = localDiffuseMaterial;
  38.     lastMaterialType = MaterialType.Diffuse;
  39.  
  40.     if (colors.ReplayColors.Count > 0)
  41.     {
  42.       int randomIndex = Random.Range(0, colors.ReplayColors.Count - 1);
  43.       Color newColor = colors.ReplayColors[randomIndex];
  44.       localDiffuseMaterial.color = newColor;
  45.       localFadeMaterial.color = newColor;
  46.       meshRenderer.material.color = newColor;
  47.       colors.ReplayColors.RemoveAt(randomIndex);
  48.     }
  49.   }
  50.  
  51.   private void Update()
  52.   {
  53.     float distance = Vector3.Distance(cam.transform.position, Head.transform.position);
  54.  
  55.     // Handle fading case
  56.     if (lastMaterialType == MaterialType.Fade)
  57.     {
  58.       meshRenderer.material.SetFloat("_Distance", distance);
  59.     }
  60.  
  61.     // Changing state between fading and not
  62.     if (distance > fadeStart && lastMaterialType == MaterialType.Fade)
  63.     {
  64.       meshRenderer.material = localDiffuseMaterial;
  65.       lastMaterialType = MaterialType.Diffuse;
  66.     }
  67.     else if (distance <= fadeStart && lastMaterialType == MaterialType.Diffuse)
  68.     {
  69.       meshRenderer.material = localFadeMaterial;
  70.       meshRenderer.material.SetFloat("_FadeStartDistance", fadeStart);
  71.       meshRenderer.material.SetFloat("_FadeCompleteDistance", fadeEnd);
  72.       lastMaterialType = MaterialType.Fade;
  73.     }
  74.  
  75.     // Disable mesh renderer when it's at alpha 0
  76.     if (lastMaterialType == MaterialType.Fade && distance < fadeEnd) {
  77.       meshRenderer.enabled = false;
  78.     } else {
  79.       meshRenderer.enabled = true;
  80.     }
  81.   }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement