- Home /
Trouble with moving the camera.
Hey guys, I have a script I have been working on for the last 3 days. It catches a ray hit of a object and orbits around it. I am trying to figure out how to get a ease in and ease out and a slower transform from one object to the next, it's instantaneous right now when I click the right mouse button. and also when the left mouse is down it is also instant.
using UnityEngine;
using System.Collections;
public class MouseOrbit : MonoBehaviour {
public KeyCode UserOrbitButton;
public Transform target;
public float distance = 15.0f;
public float xSpeed = 250.0f;
public float ySpeed = 120.0f;
public float yMinLimit = -90;
public float yMaxLimit = 90;
private float x = 0.0f;
private float y = 0.0f;
public Ray ray;
Vector3 destination;
void Start()
{
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
void Update()
{
if (Input.GetMouseButton (0))
{
distance = -10;
}
else
{
distance = 15f;
}
x += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;
y -= Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;
y = ClampAngle(y, yMinLimit, yMaxLimit);
transform.rotation = Quaternion.Euler(y, x, 0);
transform.position = (Quaternion.Euler(y, x, 0)) * new Vector3(0.0f, 0.0f, -distance) + target.position;
if (target && Input.GetMouseButton(1))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 2000))
{
target = hit.transform;
destination = hit.point;
rigidbody.MovePosition(destination );
Debug.Log(hit.collider.name);
}
}
}
static float ClampAngle(float angle, float min, float max)
{
if (angle < -360)
{
angle += 360;
}
if (angle > 360)
{
angle -= 360;
}
return Mathf.Clamp(angle, min, max);
}
}
Any help would be appreciated! Thank you for your time!
Answer by IvovdMarel · Jun 27, 2014 at 06:50 PM
You can create easing by creating a speed variable and a speedReduction (friction) and speedIncrease (force) variable for the camera.
In order to rotate smooth;y to a next object you can use the Lerp-method
I really appreciate your answer, but I think I stated that I was looking for help with that...
Just doing lerping now, I have no idea how to use friction. :P
Okay so I have this.
Vector3 currentPos;
void awake()
{
currentPos = transform.position;
}
void JumpToCell()
{
target = hit.transform;
destination = hit.point;
transform.position = Vector3.Lerp(currentPos, destination, Time.deltaTime);
//rigidbody.$$anonymous$$ovePosition(destination );
Debug.Log(hit.collider.name);
}
Still not lerping :/
Answer by jmgek · Jun 27, 2014 at 08:08 PM
Okay so I figured it out kinda... SO I have my destination up top above the jump to cell.
transform.position = (Quaternion.Euler(y, x, 0)) * new Vector3(0.0f, 0.0f, -distance) + target.position;
How can I lerp that?! Thanks for any help.
Your answer
Follow this Question
Related Questions
Mouse Orbit - Change From Mouse, to Keys 1 Answer
Mouse Orbit snapping issues 0 Answers
Mouse raycast not working/not seeing line 0 Answers
Mouse orbit on click and drag/pan problem 3 Answers
How to move a player to a certain point? 0 Answers