Advertisement
Guest User

EyeTrackBlink.cs

a guest
Jan 2nd, 2018
4,962
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class EyeTrackBlink : MonoBehaviour
  5. {
  6.  
  7. public float eyeMaxOffset = 0.3f; // max amount the eyes are clamped to
  8. public Renderer eyeRend; // eyeball renderer
  9. public Renderer lidRend; // eyelid renderer
  10. public float blinkingTextureAmount = 4f; // amount of frames of blinking animation
  11. public float blinkTimer = 4f; // timer for when to blink again
  12. public float blinkTransition = 0.05f;
  13. Vector2 eyeOffset;
  14. Vector2 eyelidOffset;
  15. float blinkOffset;
  16. float blinkTimerR;
  17.  
  18. void Start()
  19. {
  20. blinkTimerR = blinkTimer;
  21. blinkOffset = 1 / blinkingTextureAmount;
  22. eyelidOffset = new Vector2(0,0);
  23. lidRend.materials[1].SetTextureScale("_MainTex", new Vector2(blinkOffset, 1));
  24.  
  25. }
  26. void Update()
  27. {
  28. blinkTimerR -= Time.deltaTime;
  29. if (blinkTimerR <= 0.0f)
  30. {
  31. StartCoroutine(Blink());
  32.  
  33. }
  34.  
  35. eyeOffset = new Vector2(transform.localPosition.x, -transform.localPosition.y);
  36. // clamp so the eye doesnt disappear
  37. if(eyeOffset.x < -eyeMaxOffset || eyeOffset.x > eyeMaxOffset)
  38. {
  39. eyeOffset.x = Mathf.Clamp(eyeOffset.x, -eyeMaxOffset, eyeMaxOffset);
  40. }
  41. if(eyeOffset.y < -eyeMaxOffset || eyeOffset.y > eyeMaxOffset)
  42. {
  43. eyeOffset.y = Mathf.Clamp(eyeOffset.y, -eyeMaxOffset, eyeMaxOffset);
  44. }
  45. // send offset to shader
  46. eyeRend.material.SetTextureOffset("_MainTex", eyeOffset);
  47.  
  48. }
  49.  
  50. IEnumerator Blink()
  51. {
  52. // animating 1 - 2 - 3 - 4 - 3 - 1, if you have more or less blinking animation frames, add or delete them here
  53. blinkTimerR = blinkTimer + Random.Range(-1,1); // slight randomisation to the blinking
  54. lidRend.materials[1].SetTextureOffset("_MainTex", eyelidOffset); //1
  55. yield return new WaitForSeconds(blinkTransition);
  56. lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + blinkOffset, 0)); //2
  57. yield return new WaitForSeconds(blinkTransition);
  58. lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + (blinkOffset * 2), 0)); //3
  59. yield return new WaitForSeconds(blinkTransition);
  60. lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + (blinkOffset * 3), 0)); //4
  61. yield return new WaitForSeconds(blinkTransition);
  62. lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + (blinkOffset * 2), 0)); //3
  63. yield return new WaitForSeconds(blinkTransition);
  64. lidRend.materials[1].SetTextureOffset("_MainTex", eyelidOffset); //1
  65.  
  66.  
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement