This question was
closed Oct 06, 2017 at 10:43 AM by
unity_bcUiA2t7GqTPBA for the following reason:
The question is answered, right answer was accepted
Question by
unity_bcUiA2t7GqTPBA · Oct 04, 2017 at 09:44 AM ·
scripting problem
What part of my camera script is increasing my cameras X rotation?
Something in my script is increasing my cameras X rotation and it's pretty damn annoying, can anyone please tell me what part it is and how to stop it from doing that?
using UnityEngine; using System.Collections;
public class CameraMotor : MonoBehaviour {
public Transform lookAt;
private Vector3 desiredPosition;
private Vector3 offset;
private Vector2 touchPos;
private float swipeResistance = 200.0f;
private float smoothSpeed = 7.5f;
void Start ()
{
offset = transform.position - lookAt.transform.position;
}
void Update()
{
if (Input.GetKeyDown (KeyCode.LeftArrow))
SlideCamera (true);
else if (Input.GetKeyDown (KeyCode.RightArrow))
SlideCamera (false);
if (Input.GetMouseButtonDown (0) || Input.GetMouseButtonDown (1))
{
touchPos = Input.mousePosition;
}
if (Input.GetMouseButtonUp (0) || Input.GetMouseButtonUp (1))
{
float swipeForce = touchPos.x - Input.mousePosition.x;
if (Mathf.Abs (swipeForce) > swipeResistance)
{
if (swipeForce < 0)
SlideCamera (true);
else
SlideCamera (false);
}
}
}
void FixedUpdate()
{
desiredPosition = lookAt.position + offset;
transform.position = Vector3.Lerp (transform.position, desiredPosition, smoothSpeed * Time.deltaTime);
transform.LookAt (lookAt);
}
public void SlideCamera (bool left)
{
if (left)
offset = Quaternion.Euler (0, 90f, 0) * offset;
else
offset = Quaternion.Euler (0, -90f, 0) * offset;
}
}
I'm pretty it's do with my offset but even if I knew for sure I'd no idea how to fix it.
Comment
Best Answer
Answer by Bilelmnasser · Oct 04, 2017 at 12:38 PM
Hi, what rotating your camera on X,Y,Z axis is :
transform.LookAt( lookAt );
so you need only Y axis , the solution :
using UnityEngine;
using System.Collections;
public class CameraMotor : MonoBehaviour
{
public Transform lookAt;
private Vector3 desiredPosition;
private Vector3 offset;
private Vector2 touchPos;
private float swipeResistance = 200.0f;
private float smoothSpeed = 7.5f;
void Start()
{
offset = transform.position - lookAt.transform.position;
}
void Update()
{
if ( Input.GetKeyDown( KeyCode.LeftArrow ) )
SlideCamera( true );
else if ( Input.GetKeyDown( KeyCode.RightArrow ) )
SlideCamera( false );
if ( Input.GetMouseButtonDown( 0 ) || Input.GetMouseButtonDown( 1 ) )
{
touchPos = Input.mousePosition;
}
if ( Input.GetMouseButtonUp( 0 ) || Input.GetMouseButtonUp( 1 ) )
{
float swipeForce = touchPos.x - Input.mousePosition.x;
if ( Mathf.Abs( swipeForce ) > swipeResistance )
{
if ( swipeForce < 0 )
SlideCamera( true );
else
SlideCamera( false );
}
}
}
void FixedUpdate()
{
desiredPosition = lookAt.position + offset;
transform.position = Vector3.Lerp( transform.position , desiredPosition , smoothSpeed * Time.deltaTime );
// transform.LookAt( lookAt );
// replace the look At with this :
Vector3 relativePos = lookAt.position - transform.position;
Quaternion LookAtRotation = Quaternion.LookRotation( relativePos );
Quaternion LookAtRotationOnly_Y = Quaternion.Euler(transform.rotation.eulerAngles.x, LookAtRotation.eulerAngles.y, transform.rotation.eulerAngles.z);
transform.rotation = LookAtRotationOnly_Y;
}
public void SlideCamera( bool left )
{
if ( left )
offset = Quaternion.Euler( 0 , 90f , 0 ) * offset;
else
offset = Quaternion.Euler( 0 , -90f , 0 ) * offset;
}
}
Follow this Question
Related Questions
How to create a plot system 0 Answers
How do I ignore input when player object has reached a certain point? 1 Answer
How to tilt NavMeshAgent? 0 Answers