ARKit, head turning, clamp

Hi, I am building an ARKit app and I need my character’s head to follow my camera. I got that part to work. However, I need to clamp the values so that his head doesn’t turn all the way back when I pan around him. In other words, i need to clamp those values to only get his head to turn like a normal head would. Any help is appreciated. Thanks

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAt : MonoBehaviour {

public Transform target;

void LateUpdate () {

	transform.LookAt (target);
}

}

I guess you could do it like this:

var enableturnleft = "true";
var enableturnright = "true";
var turnamount : float=40f;

Then, in your LateUpdate function,
work out the difference between rotation of the player’s head and how much it would need to rotate to face the camera. Store it in a variable like myheadlturn.

If it’s a negative movement, the head is turning left, if it’s positive, the head is turning right for example.

if the degrees in rotation would exceed whatever is set in turnamount, then you could use

enableturnleft = "false";
enableturnright = "true";

Then the head would have to turn right instead of turning all the way around. I assume it’s rotating like something out of the exorcist right now? lol.

// and enable/disable which way it is allowed to turn
if (myheadlturn <-turnamount) {enableturnleft = "false"; enableturnright = "true";}

Something like that perhaps? It’s the gist of an idea.

Thank you for your prompt response. Lol, it does look like something out of the Exorcist, very creepy. I tried something similar to your method, it all works, however, when camera is rotating around the character, the head would only move half of the axis. Meaning only negative values. When it is supposed to look to the right, it won’t work. My code looks like this now.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAt : MonoBehaviour {

public Transform target; // camera target

void LateUpdate () {

	transform.LookAt (target); // head follows target (camera.)

	float clampedY = Mathf.Clamp(transform.eulerAngles.y, -60f,60f); //clamp the Y axis rotation of the head (half circle)
	transform.eulerAngles = new Vector3(transform.eulerAngles.x, clampedY ,transform.eulerAngles.z); //rotates the head
	}
}