I’m trying to create a reset button for my camera, which is called from a different script which looks for the GUI Button being clicked?
I’ve currently got a script called: “screenHUD” and a camera script called “orbit_camera” (both in Java) i need some way for the Orbit_camera script to listen for the ScreenHud button.
Why have it listen for the other one? Why not just have the other one yell at the first when it's doing something?
Example :
//Orbit_Camera script
function MyFunction(){
//do stuff
}
//screenHUD script
var orbitScript : Orbit_CameraScriptName ;
function Start(){
//assuming these scripts are on the same object
orbitScript = gameObject.GetComponent(Orbit_CameraScriptName) as Orbit_CameraScriptName ;
}
function OnGUI(){
if(GUI.Button(Rect(5,5,50,50),"Whatever")){
orbitScript.MyFunction();
}
}
It’s because the orbit script uses Late update, and the only way i can effect the camera is if i call the function within the Late update:
Currently i can press “a” to achieve what i want but i want to allow the user to click on a GUI Button.
//i’ve commented around the line
var target : Transform;
var targetHeight = 2.0;
var distance = 25;
var maxDistance = 80;
var minDistance = 10;
var xSpeed = 250.0;
var ySpeed = 120.0;
var yMinLimit = -150;
var yMaxLimit = 100;
var zoomRate = 20;
private var x = 0.0;
private var y = 0.0;
private var initialPosition : Vector3;
private var initialRotation : Quaternion;
@script AddComponentMenu("Camera-Control/MouseOrbitZoom")
function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
initialPosition = transform.position;
initialRotation = transform.rotation;
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
function ResetCamera () {
transform.position = initialPosition;
transform.rotation = initialRotation;
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
print(transform.position.x);
}
function LateUpdate ()
{
if(!target)
return;
// If either mouse buttons are down, let them govern camera position
if (Input.GetMouseButton(0) || Input.GetMouseButton(1))
{
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
}
distance -= (Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime) * zoomRate * Mathf.Abs(distance);
distance = Mathf.Clamp(distance, minDistance, maxDistance);
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation:Quaternion = Quaternion.Euler(y, x, 0);
var position = target.position - (rotation * Vector3.forward * distance + Vector3(0,-targetHeight,0));
transform.rotation = rotation;
transform.position = position;
////////////////////////////////////////////////////////////////////
//// I want to use a gui button (in a different script) instead of “a”///////
///////////////////////////////////////////////////////////////////
if(Input.GetKey ("a"))
{
ResetCamera();
}
}
static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}