#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:
Проблема в том, что вам нужно уничтожить() игровой объект, который вы бросили первым. Поскольку вы просто возвращаете объекты, когда снова нажимаете вниз, вот что вам следует сделать:
Сделайте так, чтобы он уничтожил старый объект. Потому что вы просто продолжаете создавать экземпляр объекта, а затем, когда вы бросаете его снова, он тоже бросает старый. Если вы понимаете, что я имею в виду, то, надеюсь, вы сможете превратить это в то, что хотите. (Было не совсем ясно, в чем заключалась ваша игра; это то, что я интерпретировал)