Is it possible to use a quaternion from a gameobjects position to another gameobjects position?


I would really like to be able to change the rotation of a game object to match that of another. Right now i have the following code (Pretty much from the Unity documentation)

public Transform endMarker;

public float speed = 25f;

private float startTime;
private float journeyLength;

private bool resettingPosition = false;

public void resetPosition() {
	startTime = Time.time;
	journeyLength = Vector3.Distance(transform.position, endMarker.position);
	resettingPosition = true;

void Update() {
	if (resettingPosition == true) {
		float distCovered = (Time.time - startTime) * speed;
		float fracJourney = distCovered / journeyLength;
		transform.position = Vector3.Lerp (transform.position, endMarker.position, fracJourney);

What this does is Lerping between the gameObject this script is attached to and a public Transform called endMarker, that I pulled another object into. This way my own object positions itself on the other object over time, copying it’s exact positioning values.

I would like to be able to do the same with rotation, but after messing up with transforms, vectors 3s, quaternions for ages I’m on the verge of giving up and i figured maybe asking here would be an idea.

Thanks so much in advance!

You’ll need a startMarker if you want a start-end travel.

transform.rotation = Quaternion.Slerp(startMarker.rotation, endMarker.rotation, fracJourney);

Haven’t tried it, but it should work.

You should also be using a starting position for your position, your lerp/slerp factor will define your position in your journey : 0 = start, 1 = end.

transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fracJourney);

Then you slowly change fracJourney form 0 to 1, and back again if you want.

EDIT : Maybe I did not understand your question quite correctly, and that’s not what you want, could you rephrase it if need be ?