- Home /
Question by
smnerat · Nov 24, 2012 at 06:45 AM ·
gameobjectraycasttransformfunction
How to call and run a function from another script on a transform.
Hey everyone,
I've been having problems with this for a while. I am attempting to perform a rotation on an objects parent. To start I am raycasting and setting the object I raycast against equal to a variable (because I will be clicking on different objects in the scene, but I only want to select one at a time), and then trying to rotate the parent of the object I raycast against. I keep getting an error that "parent is not a member of unityengine.gameobject. I tried the same idea using just the transform but the error switched to "transform is not a member of unityengine.transform.
Here is my code, for some clarity. I'm hoping someone can spot where I went wrong.
var hit : RaycastHit;
function OnGUI(){
var someText = "Turn Left";
var otherText = "Turn Right";
var capsule : GameObject;
if(Input.GetMouseButtonDown(0) && collider.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit,Mathf.Infinity)){
capsule == hit.collider.gameObject.transform;
}
if (GUI.Button(new Rect(20, 50, 100, 20), someText)){
capsule.parent.TurnLeft();
}
else if (GUI.Button(new Rect(850, 50, 100, 20), otherText)){
capsule.parent.TurnLeft();
}
}
function TurnLeft(){
MoveObject.use.Rotation(transform, Vector3.forward * 45.0, 1);
}
AND THIS IS THE SCRIPT TurnLeft() calls:
enum MoveType {Time, Speed}
static var use : MoveObject;
function Awake () {
if (use) {
Debug.LogWarning("Only one instance of the MoveObject script in a scene is allowed");
return;
}
use = this;
}
function Rotation (thisTransform : Transform, degrees : Vector3, time : float) {
var startRotation = thisTransform.rotation;
var endRotation = thisTransform.rotation * Quaternion.Euler(degrees);
var rate = 1.0/time;
var t = 0.0;
while (t < 1.0) {
t += Time.deltaTime * rate;
thisTransform.rotation = Quaternion.Slerp(startRotation, endRotation, t);
yield;
}
}
Comment