- 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