Skip to content

Instantly share code, notes, and snippets.

@WhiteNoise
Created January 26, 2019 19:44
Show Gist options
  • Save WhiteNoise/58ff757ac2741f9df343a73d41a5e2c9 to your computer and use it in GitHub Desktop.
Save WhiteNoise/58ff757ac2741f9df343a73d41a5e2c9 to your computer and use it in GitHub Desktop.
Basic script for more realistic eye movements. Eyes will snap to a set of targets.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EyeController : MonoBehaviour {
public GameObject eyeForward;
public GameObject[] eyes;
public GameObject mainTarget;
public GameObject[] otherTargets;
private float MaxAngle = 0.93f;
private float RVal = 0.0f;
// Update is called once per frame
void Update () {
if(Random.value < 0.025f)
RVal = (Random.value-0.5f) * 0.08f;
Vector3 targetPos = mainTarget.transform.position;
// Find the best target..
var offs = (targetPos - eyeForward.transform.position).normalized;
float bestAng = Vector3.Dot(eyeForward.transform.forward, offs) - RVal;
if(bestAng < MaxAngle) {
foreach(var targ in otherTargets) {
var offs1 = (targ.transform.position - eyeForward.transform.position).normalized;
var newAng = Vector3.Dot(eyeForward.transform.forward, offs1);
if(newAng > bestAng) {
bestAng = newAng;
targetPos = targ.transform.position;
}
}
}
// don't have eyes try to go too far..
if(bestAng < MaxAngle) {
targetPos = eyeForward.transform.position + eyeForward.transform.forward;
}
foreach(var eye in eyes) {
var targetOffs = (targetPos - eye.transform.position).normalized;
var rot = Quaternion.LookRotation(targetOffs, eye.transform.parent.up);
eye.transform.rotation = Quaternion.Slerp(eye.transform.rotation, rot, 50.0f * Time.deltaTime);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment