x


Camera re-target

Hi, everyone

Is there a script that when I click a certain object, the object should become new target of camera each time i click.

i am using this code for camera.

//WASD to orbit, left Ctrl/Alt to zoom
using UnityEngine;
using System.Collections;

[AddComponentMenu("Camera-Control/Keyboard Orbit")]

public class Guikeys : MonoBehaviour {
    public Transform target;
    public float distance = 20.0f;
    public float zoomSpd = 2.0f;

    public float xSpeed = 240.0f;
    public float ySpeed = 123.0f;

    public int yMinLimit = -723;
    public int yMaxLimit = 877;

    private float x = 0.0f;
    private float y = 0.0f;

    private float GUIHorizontal = 0;
    private float GUIVertical = 0;

    public Texture uptexture;
    public Texture lefttexture;
    public Texture righttexture;
    public Texture downtexture;

    public void Start () {
        Vector3 angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;

        // Make the rigid body not change rotation
        if (rigidbody)
            rigidbody.freezeRotation = true;
    }



void OnGUI()
{
    if(Event.current.type == EventType.Repaint)
    {
        GUIHorizontal = 0;
        GUIVertical = 0;
    }
    GUILayout.BeginVertical();
    if(GUI.RepeatButton(new Rect(70,600,30,30), uptexture))
    {
        GUIVertical = 1;
    }
    GUILayout.BeginHorizontal();
    if(GUI.RepeatButton(new Rect(35, 630, 30, 30), lefttexture))
    {
        GUIHorizontal = -1;
    }
    if(GUI.RepeatButton(new Rect(103, 630, 30, 30), righttexture))
    {
        GUIHorizontal = 1;
    }
    GUILayout.EndHorizontal();
    if(GUI.RepeatButton(new Rect(70, 658, 30, 30), downtexture))
    {
        GUIVertical = -1;
    }
    GUILayout.EndVertical();
}


    public void LateUpdate () {
        if (target) {


         x -= Input.GetAxis("Horizontal") * xSpeed * 0.02f;
         y += Input.GetAxis("Vertical") * ySpeed * 0.02f;


            x -= GUIHorizontal * xSpeed * 0.02f;
            y += GUIVertical * ySpeed * 0.02f;

            y = ClampAngle(y, yMinLimit, yMaxLimit);

        distance -= Input.GetAxis("Fire1") *zoomSpd* 0.02f;
            distance += Input.GetAxis("Fire2") *zoomSpd* 0.02f;

            Quaternion rotation = Quaternion.Euler(y, x, 0.0f);
            Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

            transform.rotation = rotation;
            transform.position = position;
        }
    }

    public static float ClampAngle (float angle, float min, float max) {
        if (angle < -360.0f)
            angle += 360.0f;
        if (angle > 360.0f)
            angle -= 360.0f;
        return Mathf.Clamp (angle, min, max);


    }
}

Thanx

more ▼

asked Mar 13 '12 at 11:43 AM

mandeep gravatar image

mandeep
16 2 2 3

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

I'm a bit new to Unity but i think I know a solution. (Sorry if it's not good)

You should make the 'target' variable static in the orbit script, then put a script on the objects that are clickable:

function OnMouseDown () { 

 //Supposed your orbit script's name is MouseOrbit.js or MouseOrbit.cs  
 MouseOrbit.target = transform.transform;

}
more ▼

answered Mar 13 '12 at 03:44 PM

Bazsee gravatar image

Bazsee
72 3 6 8

Hi, @Bazsee

thanx for replay,

i m also new to unity and c# and java.

i understood second part but i don't know how to make static variable.

in my camera orbit script. i need to make static variable, my camera orbit script is c# so, i m trying this,

static var target;

am i anywhere near to ans ?

thnax

Mar 14 '12 at 09:22 AM mandeep

try:

static public Transform target;

"static var target" is javascript

Mar 14 '12 at 09:29 AM Bazsee

i tried this variable it's gives an error ..

Unknown identifier: 'Guikeys'. The type Guikeys' already contains a definition fortarget'

i used this script on object

function OnMouseDown () {

Guikeys.target = transform.transform; }

"Guikeys" is my camera orbit script name.

thanx

Mar 14 '12 at 09:41 AM mandeep

try changing:

static public Transform target;

to

public static Transform target;

(i wrote that down incorrectly before)

Mar 14 '12 at 09:51 AM Bazsee

oh and make sure that the script on the object is not C# but JavaScript

Mar 14 '12 at 09:52 AM Bazsee
(comments are locked)
10|3000 characters needed characters left

try:

static public Transform target;

(or without the public tag, but i suppose you should leave that there)

'static var target' is javascript

more ▼

answered Mar 14 '12 at 12:22 PM

Bazsee gravatar image

Bazsee
72 3 6 8

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3012
x243
x76
x65
x2

asked: Mar 13 '12 at 11:43 AM

Seen: 515 times

Last Updated: Mar 14 '12 at 12:22 PM