Question by
acceptableaxe · Sep 03, 2016 at 05:26 AM ·
referenceobject reference
C# How to change a variable in another script when looking at the object but not a duplicate of it?
public class DetectionObject : MonoBehaviour {
public float Reach = 5f;
public GameObject Tree;
private TreeController TC;
// Use this for initialization
void Start() {
TC = Tree.GetComponent<TreeController> ();
}
// Update is called once per frame
void Update () {
RaycastHit hit;
Vector3 fwd = transform.TransformDirection (Vector3.forward);
Debug.DrawRay (transform.position, fwd * Reach, Color.red);
if (Physics.Raycast (transform.position, fwd, out hit, Reach) && hit.transform.CompareTag ("Item") && Input.GetMouseButtonDown (0))
TC.treeHealth -= 100f;
}
}
This is the Code for the Detection component which uses raycast to see what it's looking at. The problem is that I want to cut down a tree. I can cut down one but when i try to cut down the other it cuts down the original? how can I fix this
Heres the code of the tree:
using UnityEngine;
using System.Collections;
public class TreeController : MonoBehaviour {
public GameObject Log;
public float treeMaxHealth = 100f;
public float treeHealth;
// Use this for initialization
void Start () {
treeHealth = treeMaxHealth;
}
// Update is called once per frame
void Update () {
if (treeHealth < 1) {
OnTreeDestroy ();
}
}
void OnTreeDestroy(){
Instantiate (Log, transform.position, Random.rotation);
Instantiate (Log, transform.position, Random.rotation);
Instantiate (Log, transform.position, Random.rotation);
gameObject.SetActive (false);
}
}
Comment
Answer by Metilli · Sep 03, 2016 at 06:14 AM
Hello @acceptableaxe, i guess you select Tree from inspector with drag GameObject but you should find Tree which you hit by Raycast. I don't try this code but this should work.
public class DetectionObject : MonoBehaviour {
public float Reach = 5f;
public GameObject Tree;
private TreeController TC;
// Use this for initialization
void Start() {
// Still don't know which GameObject is my Tree. That's why delete this line.
// TC = Tree.GetComponent<TreeController> ();
}
// Update is called once per frame
void Update () {
RaycastHit hit;
Vector3 fwd = transform.TransformDirection (Vector3.forward);
Debug.DrawRay (transform.position, fwd * Reach, Color.red);
if (Physics.Raycast (transform.position, fwd, out hit, Reach) && hit.transform.CompareTag ("Item") && Input.GetMouseButtonDown (0))
//Gameobject which is hit by Raycast, is our Tree
Tree = hit.transform.gameObject;
TC = Tree.GetComponent<TreeController> ();
TC.treeHealth -= 100f;
}
}
Answer by acceptableaxe · Sep 05, 2016 at 09:24 AM
I already solved it ages ago thank you for the suggestion though