FollowTrackingCamera

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Code)
Line 18: Line 18:
  
 
     // Exposed vars for the camera position from the target.
 
     // Exposed vars for the camera position from the target.
     public float height;
+
     public float height = 20f;
     public float distance;
+
     public float distance = 20f;
  
  
 
     // Camera limits.
 
     // Camera limits.
     public float min;
+
     public float min = 10f;
     public float max;
+
     public float max = 60;
  
 
     // Rotation.
 
     // Rotation.
     public float rotateSpeed;
+
     public float rotateSpeed = 1f;
  
 
     // Options.
 
     // Options.
Line 34: Line 34:
  
 
     // The movement amount when zooming.
 
     // The movement amount when zooming.
     public float zoomStep;
+
     public float zoomStep = 30f;
     public float zoomSpeed;
+
     public float zoomSpeed = 5f;
 
     private float heightWanted;
 
     private float heightWanted;
 
     private float distanceWanted;
 
     private float distanceWanted;

Revision as of 02:13, 10 July 2009


Author: --Digitalos 18:57, 9 July 2009 (PDT)[Digitalos]

Description

A pretty basic C# camera that allows you to turn on/of zoom or rotation as you desire. I plan to add to this to include mousetracking and a few other options, feel free to contribute too. This was a rewrite of the included orbit cam as to allow some toggles and generally make it more readable.

Code

<csharp> using UnityEngine;

public class FollowTrackingCamera : MonoBehaviour {

   // Camera target to look at.
   public Transform target;
   // Exposed vars for the camera position from the target.
   public float height = 20f;
   public float distance = 20f;


   // Camera limits.
   public float min = 10f;
   public float max = 60;
   // Rotation.
   public float rotateSpeed = 1f;
   // Options.
   public bool doRotate;
   public bool doZoom;
   // The movement amount when zooming.
   public float zoomStep = 30f;
   public float zoomSpeed = 5f;
   private float heightWanted;
   private float distanceWanted;
   // Result vectors.
   private Vector3 zoomResult;
   private Quaternion rotationResult;
   private Vector3 targetAdjustedPosition;
   void Start(){
       // Initialise default zoom vals.
       heightWanted = height;
       distanceWanted = distance;
       // Setup our default camera.  We set the zoom result to be our default position.
       zoomResult = new Vector3(0f, height, -distance);
   }
   void LateUpdate(){
       // Check target.
       if( !target ){
           Debug.LogError("This camera has no target, you need to assign a target in the inspector.");
           return;
       }
       if( doZoom ){
           // Record our mouse input.  If we zoom add this to our height and distance.
           float mouseInput = Input.GetAxis("Mouse ScrollWheel");
           heightWanted -= zoomStep * mouseInput;
           distanceWanted -= zoomStep * mouseInput;
           // Make sure they meet our min/max values.
           heightWanted = Mathf.Clamp(heightWanted, min, max);
           distanceWanted = Mathf.Clamp(distanceWanted, min, max);
           height = Mathf.Lerp(height, heightWanted, Time.deltaTime * zoomSpeed);
           distance = Mathf.Lerp(distance, distanceWanted, Time.deltaTime * zoomSpeed);
           // Post our result.
           zoomResult = new Vector3(0f, height, -distance);
       }
       if( doRotate ){
           // Work out the current and wanted rots.
           float currentRotationAngle = transform.eulerAngles.y;
           float wantedRotationAngle = target.eulerAngles.y;
           // Smooth the rotation.
           currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotateSpeed * Time.deltaTime);
           // Convert the angle into a rotation.
           rotationResult = Quaternion.Euler(0f, currentRotationAngle, 0f);
       }
       // Set the camera position reference.
       targetAdjustedPosition = rotationResult * zoomResult;
       transform.position = target.position + targetAdjustedPosition;
       // Face the desired position.
       transform.LookAt(target);
   }

} </csharp>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox