【问题标题】:Why more balls are instantiating?为什么更多的球被实例化?
【发布时间】:2021-04-18 01:52:28
【问题描述】:

我正在统一制作一个游戏,其中用户拖动以向远处的某些物体射击球。到目前为止,我有这个 DragAndShoot 脚本:

 //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() 以便在游戏对象 SpawnPoint 的位置重新生成一个球预制件。当我运行游戏时,第一个球射得很好。另一个球重生了。

问题:当我射出第二个球并且它移动时,第二个球似乎又出现了一个球,并且它也移动了。不知道为什么会发生这种情况以及如何解决它 - 有人可以帮忙吗?谢谢。

【问题讨论】:

  • 此脚本附加在哪里以及如何将 isShoot 设置为 false?

标签: unity3d instantiation prefab


【解决方案1】:

问题是你需要 Destroy() 你先扔的游戏对象。由于再次单击时您只是将对象带回来,因此您应该这样做:

让它破坏旧对象。因为你只是不断地实例化对象,然后当你再次抛出它时,它也会抛出旧的。如果你明白我的意思,那么希望你能把它变成你想要的。 (不清楚你的游戏是什么;这是我的解释)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多