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);
}
}
Answer by tperry1x · Sep 14, 2017 at 08:27 PM
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.
Answer by liamelias · Sep 15, 2017 at 02:31 PM
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
}
}
Your answer
Follow this Question
Related Questions
Preventing Quaternion.RotateTowards from using shortest distance 0 Answers
Clamping Wrapping Rotation to Fixed Angle 0 Answers
How do I aim a tank turret at a point? 0 Answers
Rotation Issues with compass markers not positioned correctly 0 Answers
Can someone please help me out? thank you in advance! 0 Answers