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);
	}
}

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;

         }
 }

I already solved it ages ago thank you for the suggestion though