2021年1月22日星期五

Unity (C#) - How do I single out GameObject being detected by Raycast in a destroy / respawn system

I'm trying to make a Destroy gameobject, wait x seconds, respawn gameobject system. I have 2 scripts and I'm destorying then instantiating it again. I want to use multiples of the same prefab called "Breakable" but have only the one I'm aiming at being destroyed. Similar to games like Minecraft, aim and only the aimed at the block is destroyed.

BlockBreakItem script:

using System.Collections;  using System.Collections.Generic;  using UnityEngine;    public class BlockBreakItem : MonoBehaviour  {      RaycastHit hit;      int layerMask = 1;      public GameObject breakableObject;      public bool isObjectDestoryed = false;        public int score = 0;        // Update is called once per frame      void Update()      {          breakableDetection();      }        void breakableDetection()      {          Ray rayLocation = Camera.main.ScreenPointToRay(Input.mousePosition);          if (Physics.Raycast(rayLocation, out hit, 1000, layerMask))          {              print("Detected");              if (Input.GetKey(KeyCode.Mouse0))              {                                    breakableObject = GameObject.Find("Breakable");                  Destroy(breakableObject);                  isObjectDestoryed = true;                                    score = score +1 ;              }          }      }  }  

RespawnBrokenObject script:

using System.Collections;  using System.Collections.Generic;  using UnityEngine;    public class RespawnBrokenObject : MonoBehaviour  {      private BlockBreakItem BlockBreakItem;      public GameObject breakablePrefab;        // Start is called before the first frame update      void Start()      {          BlockBreakItem = GameObject.FindObjectOfType<BlockBreakItem>();      }        // Update is called once per frame      void Update()      {          if (BlockBreakItem.isObjectDestoryed == true)          {              Invoke("respawnObject", 5.0f);              BlockBreakItem.isObjectDestoryed = false;          }      }        void respawnObject()      {          GameObject tempObjName = Instantiate(breakablePrefab);                    tempObjName.name = breakablePrefab.name;          BlockBreakItem.breakableObject = tempObjName;      }  }  

I hope the code isn't too messy! Always worried it won't be understood xD

https://stackoverflow.com/questions/65855280/unity-c-how-do-i-single-out-gameobject-being-detected-by-raycast-in-a-destr January 23, 2021 at 10:57AM

没有评论:

发表评论