Почему создается больше шаров?

#unity3d #instantiation #prefab

Вопрос:

Я создаю игру в unity, в которой пользователь перетаскивает мяч, чтобы стрелять по некоторым объектам на расстоянии. До сих пор у меня есть этот сценарий перетаскивания:

  //using System.Collections;
 //using System.Collections.Generic;
 using UnityEngine;
 
 [RequireComponent(typeof(Rigidbody))]
 [RequireComponent(typeof(Collider))]
 public class DragAndShoot : MonoBehaviour
 {
     public Transform prefab;
     private Vector3 mousePressDownPos;
     private Vector3 mouseReleasePos;
 
     private Rigidbody rb;
 
     private bool isShoot;
     
     void Start()
     {
         rb = GetComponent<Rigidbody>();
     }
 
     private void OnMouseDown()
     {
         mousePressDownPos = Input.mousePosition;
     }
 
     private void OnMouseUp()
     {
         mouseReleasePos = Input.mousePosition;
         Shoot(mouseReleasePos-mousePressDownPos);
     }
 
     private float forceMultiplier = 3;
     void Shoot(Vector3 Force)
     {
         if(isShoot)    
             return;
         
         rb.AddForce(new Vector3(Force.y,Force.x,Force.z) * forceMultiplier);
         isShoot = true;
         createBall();
     }
 
     void createBall(){
         Instantiate(prefab, GameObject.Find("SpawnPoint").transform.position, Quaternion.identity);
     }
     
 }
 

Как вы можете видеть, я создал функцию createBall() для того, чтобы возродить сборный шар в положении точки появления игрового объекта. Когда я запускаю игру, первый мяч летит нормально. И еще один шар возрождается.

Проблема: когда я стреляю во второй шар, и он движется, кажется, что еще один шар каким-то образом появился на втором шаре, и он тоже движется. Не уверен, почему это происходит и как это исправить — может ли кто-нибудь помочь? Спасибо.

Комментарии:

1. Где прикреплен этот скрипт и как вы установили значение isShoot в значение false?

Ответ №1:

Проблема в том, что вам нужно уничтожить() игровой объект, который вы бросили первым. Поскольку вы просто возвращаете объекты, когда снова нажимаете вниз, вот что вам следует сделать:

Сделайте так, чтобы он уничтожил старый объект. Потому что вы просто продолжаете создавать экземпляр объекта, а затем, когда вы бросаете его снова, он тоже бросает старый. Если вы понимаете, что я имею в виду, то, надеюсь, вы сможете превратить это в то, что хотите. (Было не совсем ясно, в чем заключалась ваша игра; это то, что я интерпретировал)