SmoothLookFrame

From Unify Community Wiki
Jump to: navigation, search

Author: David O'Donoghue (a.k.a Trooper from ODD Games)

Contents

Description

Looks at a target whilst keeping another target in view.

C# Script

using UnityEngine;
 
public class SmoothLookFrame : MonoBehaviour {
 
	public Transform lookAtTarget;
	public Transform frameTarget;
	public float distance = 10.0f;
	public float height = 5.0f;
	public float damping = 2.0f;
 
	private Vector3 direction;
	private Vector3 wantedPosition;
 
	void FixedUpdate () {
 
		if (!lookAtTarget || !frameTarget)
			return;
 
		direction = (frameTarget.position - lookAtTarget.position);
 
		wantedPosition = frameTarget.position + (direction.normalized * distance);
		wantedPosition.y = wantedPosition.y + height;
 
		transform.position = Vector3.Lerp(transform.position, wantedPosition, damping * Time.deltaTime);
 
		transform.LookAt (lookAtTarget);
 
	}
 
}

C# Script (Smooth Rotate)

using UnityEngine;
public class SmoothLookFrame : MonoBehaviour {
 
    public Transform lookAtTarget;
    public Transform frameTarget;
    public float distance = 10.0f;
    public float height = 5.0f;
    public float damping = 2.0f;
 
    private Vector3 direction;
    private Vector3 wantedPosition;
 
    void Update () {
        if (!lookAtTarget || !frameTarget)
            return;
 
        direction = (frameTarget.position - lookAtTarget.position);
        wantedPosition = frameTarget.position + (direction.normalized * distance);
 
        wantedPosition.y = wantedPosition.y + height;
        transform.position = Vector3.Lerp(transform.position, wantedPosition, damping * Time.deltaTime);
 
        Quaternion rotate = Quaternion.LookRotation(lookAtTarget.position - transform.position);
	    transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * damping);
    }
}

Javascript

var lookAtTarget : Transform;
var frameTarget : Transform;
var distance : float = 10.0;
var height : float = 10.0;
var damping : float = 2.0;
 
private var direction : Vector3;
private var wantedPosition : Vector3;
 
function FixedUpdate () {
 
	if (!lookAtTarget || !frameTarget)
			return;
 
		direction = (frameTarget.position - lookAtTarget.position);
 
		wantedPosition = frameTarget.position + (direction.normalized * distance);
		wantedPosition.y = wantedPosition.y + height;
 
		transform.position = Vector3.Lerp(transform.position, wantedPosition, damping * Time.deltaTime);
 
		transform.LookAt (lookAtTarget);
}
Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox