# Eyes ==From== [[DESIGNS/ToyWorldsAtlas/AtlasD_Doc|AtlasD_Doc]] *Reference*: - Reference: https://chrisakroyd.com/snippets/eyes/ - Code ref: https://qookie.games/eye-tracking/?utm_source=chatgpt.com ### Follow and Spin ```cs using UnityEngine; public class DPupil : MonoBehaviour { public float maxDistance = 0.1f; public float speed = 10f; public float spinSpeed = 360f; private bool spinning; private Transform pupilPos; private Camera mainCam; private Vector3 eyeCenter; void Start() { pupilPos = gameObject.transform; mainCam = Camera.main; eyeCenter = pupilPos.localPosition; } void Update() { if (!spinning) TrackMouse(); } void TrackMouse() { Vector3 mousePos = Input.mousePosition; Vector3 worldPoint = mainCam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 0)); Vector3 localMousePos = transform.InverseTransformPoint(worldPoint); Vector3 pupilDirection = localMousePos - eyeCenter; // To constrain the pupil within the eye if (pupilDirection.magnitude > maxDistance) pupilDirection = pupilDirection.normalized * maxDistance; Vector3 targetPos = eyeCenter + pupilDirection; // To smoothen the pupil's movement: pupilPos.localPosition = Vector3.Lerp(pupilPos.localPosition, targetPos, speed * Time.deltaTime); } // For victory animation public void SpinPupil() { if (!spinning) { StartCoroutine(SpinCoroutine()); } } private System.Collections.IEnumerator SpinCoroutine() { spinning = true; float duration = 2.5f; float elapsed = 0f; int direction = Random.Range(0, 2) == 0 ? -1 : 1; // -1 = против часовой, 1 = по часовой while (elapsed < duration) { transform.Rotate(Vector3.forward, direction * spinSpeed * Time.deltaTime); elapsed += Time.deltaTime; yield return null; } spinning = false; } } ```