- Home /
updating variable of one script in other
Hello guys! Well, i did a mouse-click movement and teleport scripts. Then I used mouse click movement to do the teleport script, separeted it works as well. But when i try use both in one object it was shakin how the object trying go to the destination walk point staying in the teleport destination position. i know that i need to update the detinantion position in mouse-click movement to the same destination position of teleport script. I saw some topics, so i think i have to use GetComponent, right? Srry but i'm a newbe in unity. There are my scripts:
void Start () {
myTransform1 = transform; // sets myTransform to this GameObject.transform
destinationPosition1 = myTransform1.position; // prevents myTransform reset
}
void Update () {
// keep track of the distance between this gameObject and destinationPosition
destinationDistance1 = Vector3.Distance(destinationPosition1, myTransform1.position);
// Moves the Player if the Left Mouse Button was clicked
if (Input.GetMouseButtonDown(0)) {
Plane playerPlane = new Plane(Vector3.up, myTransform1.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist)) {
destinationPosition1 = ray.GetPoint(hitdist);
}
}
// To prevent code from running if not needed
if(destinationDistance1 > .5f){
myTransform1.position = destinationPosition1;
}
}
void Start () {
myTransform = transform; // sets myTransform to this GameObject.transform
destinationPosition = myTransform.position; prevents myTransform reset
}
void Update () {
// keep track of the distance between this gameObject and destinationPosition
destinationDistance = Vector3.Distance(destinationPosition, myTransform.position);
if(destinationDistance < .5f){ // To prevent shakin behavior when near destination
moveSpeed = 0;
}
else if(destinationDistance > .5f){ // To Reset Speed to default
moveSpeed = 3;
}
// Moves the Player if the Left Mouse Button was clicked
if (Input.GetMouseButtonDown(1)) {
Plane playerPlane = new Plane(Vector3.up, myTransform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist)) {
Vector3 targetPoint = ray.GetPoint(hitdist);
destinationPosition = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
myTransform.rotation = targetRotation;
}
}
// To prevent code from running if not needed
if(destinationDistance > .5f){
myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
}
Answer by Tomer-Barkan · Oct 09, 2013 at 10:36 AM
You're right, you have to use GetComponent to access the variables of the other script.
So say the variable destination is located in MouseClick
, in order to access it from the other script use the following line (and make sure the variable you want to access is public):
MouseClick mouseClick = GetComponent<MouseClick>();
mouseClick.destination = someDestination;
Your answer
Follow this Question
Related Questions
Does a reference to a script have up-to-date info ? 1 Answer
Reset script variable values automatically? 2 Answers
How to pass variables from one object in one scene to another object in another scene? 3 Answers
How to access scripts other than by name. 1 Answer
Public variable in script doesn't update in Unity inspector when saved 1 Answer