- Home /
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
Answer by Bazsee · Mar 13, 2012 at 03:44 PM
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;
}
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
try:
static public Transform target;
"static var target" is javascript
i tried this variable it's gives an error ..
$$anonymous$$ identifier: 'Guikeys'. The type Guikeys' already contains a definition for
target'
i used this script on object
function On$$anonymous$$ouseDown () {
Guikeys.target = transform.transform; }
"Guikeys" is my camera orbit script name.
thanx
try changing:
static public Transform target;
to
public static Transform target;
(i wrote that down incorrectly before)
oh and make sure that the script on the object is not C# but JavaScript
Answer by Bazsee · Mar 14, 2012 at 12:22 PM
try:
static public Transform target;
(or without the public tag, but i suppose you should leave that there)
'static var target' is javascript
Your answer
Follow this Question
Related Questions
Player camera targeting/locking another object 0 Answers
Camera target on the GameObject which collision 1 Answer
Change the object the camera looks at? 1 Answer
Change 3D Camera to 2D 0 Answers
I need help with a model 0 Answers