Last active
May 22, 2020 21:49
-
-
Save darbotron/8aba1b726632a937c06f956f4d0a03cb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
public class TargetingCamera : MonoBehaviour | |
{ | |
[SerializeField] Transform m_Horizontal = null; | |
[SerializeField] Transform m_Vertical = null; | |
[SerializeField] Transform m_Target = null; | |
void Start() | |
{} | |
void Update() | |
{ | |
// find vector to target | |
Vector3 v3RootToTarget = ( m_Target.position - transform.position ); | |
Vector3 v3DirectionToCameraTarget = v3RootToTarget.normalized; | |
// project onto current root plane (not orizontal pivot only rotates around Y so has same up vector | |
Vector3 v3CameraDirectionLocal = transform.InverseTransformDirection( v3DirectionToCameraTarget ); | |
Vector3 v3CameraDirectionLocalHorizontal = Vector3.ProjectOnPlane( v3CameraDirectionLocal, Vector3.up ); | |
float fSignedAngleAroundY = Vector3.SignedAngle ( Vector3.forward, v3CameraDirectionLocalHorizontal, Vector3.up ); | |
Quaternion qHorizontalRotation = Quaternion.AngleAxis ( fSignedAngleAroundY, Vector3.up ); | |
m_Horizontal.localRotation = qHorizontalRotation; | |
Debug.DrawRay( transform.position, v3RootToTarget, Color.yellow ); | |
Debug.DrawRay( transform.position, ( transform.TransformDirection( v3CameraDirectionLocalHorizontal ) * 1.5f ), Color.cyan ); | |
Debug.DrawRay( transform.position, m_Horizontal.right, Color.red ); | |
Debug.DrawRay( transform.position, m_Horizontal.up, Color.green ); | |
Debug.DrawRay( transform.position, m_Horizontal.forward, Color.blue ); | |
// | |
Vector3 v3CameraDirectionInHorizVerticalPlane = Vector3.ProjectOnPlane( v3DirectionToCameraTarget, m_Horizontal.right ).normalized; | |
Vector3 V3CameraInVerticalPlaneLocal = m_Horizontal.InverseTransformVector( v3CameraDirectionInHorizVerticalPlane ); | |
float fSignedAngleAroundHorizX = Vector3.SignedAngle( Vector3.forward, V3CameraInVerticalPlaneLocal, Vector3.right ); | |
Quaternion qVerticalRotationLocal = Quaternion.AngleAxis( fSignedAngleAroundHorizX, Vector3.right ); | |
m_Vertical.localRotation = qVerticalRotationLocal; | |
Debug.DrawRay( transform.position, ( v3CameraDirectionInHorizVerticalPlane * 2f ), Color.magenta ); | |
Debug.DrawRay( transform.position, ( m_Vertical.forward * 2.5f ), Color.cyan ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment