Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public class Proximity : MonoBehaviour
- {
- public GameObject Head;
- public Material DiffuseMaterial;
- public Material FadeMaterial;
- private Material localDiffuseMaterial;
- private Material localFadeMaterial;
- private float fadeStart = 0.45f;
- private float fadeEnd = 0.4f;
- private GameObject cam;
- private Colors colors;
- private SkinnedMeshRenderer meshRenderer;
- private enum MaterialType { Diffuse, Fade }
- private MaterialType lastMaterialType;
- private void Awake()
- {
- localDiffuseMaterial = Instantiate(DiffuseMaterial);
- localFadeMaterial = Instantiate(FadeMaterial);
- meshRenderer = GetComponent<SkinnedMeshRenderer>();
- meshRenderer.material.SetFloat("_Distance", 0f);
- meshRenderer.enabled = false;
- colors = GameObject.Find("Colors").GetComponent<Colors>();
- cam = GameObject.Find("CenterEyeAnchor");
- meshRenderer.material = localDiffuseMaterial;
- lastMaterialType = MaterialType.Diffuse;
- if (colors.ReplayColors.Count > 0)
- {
- int randomIndex = Random.Range(0, colors.ReplayColors.Count - 1);
- Color newColor = colors.ReplayColors[randomIndex];
- localDiffuseMaterial.color = newColor;
- localFadeMaterial.color = newColor;
- meshRenderer.material.color = newColor;
- colors.ReplayColors.RemoveAt(randomIndex);
- }
- }
- private void Update()
- {
- float distance = Vector3.Distance(cam.transform.position, Head.transform.position);
- // Handle fading case
- if (lastMaterialType == MaterialType.Fade)
- {
- meshRenderer.material.SetFloat("_Distance", distance);
- }
- // Changing state between fading and not
- if (distance > fadeStart && lastMaterialType == MaterialType.Fade)
- {
- meshRenderer.material = localDiffuseMaterial;
- lastMaterialType = MaterialType.Diffuse;
- }
- else if (distance <= fadeStart && lastMaterialType == MaterialType.Diffuse)
- {
- meshRenderer.material = localFadeMaterial;
- meshRenderer.material.SetFloat("_FadeStartDistance", fadeStart);
- meshRenderer.material.SetFloat("_FadeCompleteDistance", fadeEnd);
- lastMaterialType = MaterialType.Fade;
- }
- // Disable mesh renderer when it's at alpha 0
- if (lastMaterialType == MaterialType.Fade && distance < fadeEnd) {
- meshRenderer.enabled = false;
- } else {
- meshRenderer.enabled = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement