C# 实例化在触发器上不断重复自身,该触发器在冲突时删除自身

C# 实例化在触发器上不断重复自身,该触发器在冲突时删除自身,c#,unity3d,c#-4.0,instantiation,C#,Unity3d,C# 4.0,Instantiation,我一直在尝试用C#制作一个无限色彩切换游戏复制品。 我的计划是在旋转圈内设置一个绿点。当与玩家发生碰撞时,这将给用户一个分数并删除绿色圆圈。以及激活一个触发器以生成一个y值比消耗点的当前位置高14的新圆。起点总是有两个圆圈,因此当你向上移动时,你不会看到新的圆圈形成,因为它在前面的第二个圆圈中生成。 有一个破坏块,它会删除玩家视野范围之外的所有块,以减少旧圆圈形成时的延迟,或者在玩家死亡时重新启动游戏。 问题是在调试CurrentSpawnPoint时看到的相同位置创建了多个圆,多个繁殖时保持不

我一直在尝试用C#制作一个无限色彩切换游戏复制品。 我的计划是在旋转圈内设置一个绿点。当与玩家发生碰撞时,这将给用户一个分数并删除绿色圆圈。以及激活一个触发器以生成一个y值比消耗点的当前位置高14的新圆。起点总是有两个圆圈,因此当你向上移动时,你不会看到新的圆圈形成,因为它在前面的第二个圆圈中生成。 有一个破坏块,它会删除玩家视野范围之外的所有块,以减少旧圆圈形成时的延迟,或者在玩家死亡时重新启动游戏。 问题是在调试CurrentSpawnPoint时看到的相同位置创建了多个圆,多个繁殖时保持不变,或者高度似乎在快速增加,好像它在繁殖或只是非常快速地添加。 我只是unity的初学者,仍然不知道所有的C#变量,当然我的问题有一个简单的解决方案。非常感谢您的帮助,谢谢您抽出时间。 如果我的描述还不清楚,这里有一个GitHub链接到实际的游戏文件


问题是,我是在绿点中独立产卵的,而在圆形预制中产卵的是复制品。很抱歉问了这个愚蠢的问题://

请你编辑你的问题并提供一张图片,这样我就可以完全理解你想做什么了。这样做会有帮助吗?与其删除绿点并创建另一个绿点,不如简单地给玩家一个分数并将其向上移动?这避免了任何实例化问题,至少在短期内是如此。@pseudoabdul我删除了当前点以避免实例化的重复。创建一个新的绿点的全部意义在于,它会创建一个新的圆圈,因此移动绿点只会移动圆圈,从而消除游戏的随机性。@Ginxxx我已将游戏添加到GitHub,您可以在那里下载它并自己查看问题(有多个圆在同一点上生成,但它们不应该在同一点上生成)。
using UnityEngine;
using UnityEngine.SceneManagement;

public class Player : MonoBehaviour {

  public float jumpForce = 7f; 
  public Rigidbody2D rb;
  public SpriteRenderer sr;
  public string currentColor;
  public GameObject Green;
  public GameObject[] obj;
  public float SpawnAmount = 1f;
  public Color ColorBlue;
  public Color ColorPurple;
  public Color ColorYellow;
  public Color ColorPink;
  public int Score = 0;
  public int Height = 0;
  Vector3 CurrentSpawnPoint;

  private void Start()
  {
    SetRandomColor();
  }

  void Update() 
  {
    if (Input.GetButtonDown("Jump") || Input.GetMouseButtonDown(0))
    {
      rb.velocity = Vector2.up * jumpForce;
    }
  }

  void OnTriggerEnter2D(Collider2D col)
  {
    if (col.tag == "Change")
    {
      SetRandomColor();
      Destroy(col.gameObject);
      return;
    }
    else if (col.tag == "Point")
    {
      Debug.Log("Point gained");
      Destroy(col.gameObject);
      Score += 1;
      Height += 7;
      CurrentSpawnPoint = col.transform.position;
      CurrentSpawnPoint.y += 7;
      Instantiate(Green, CurrentSpawnPoint, Quaternion.identity);
      Instantiate(obj[Random.Range(0, obj.GetLength(0))], CurrentSpawnPoint,  Quaternion.identity);

      Debug.Log(Height);
      Debug.Log(CurrentSpawnPoint);
      return;
    }
    else if (col.tag != currentColor)
    {
      Debug.Log("GAME OVER");
      SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
  }

  void SetRandomColor()
  {
    int index = Random.Range(0, 4);
    switch (index)
    {
      case 0:
        currentColor = "Blue";
        sr.color = ColorBlue;
        break;
     case 1:
        currentColor = "Yellow";
        sr.color = ColorYellow;
        break;
     case 2:
        currentColor = "Purple";
        sr.color = ColorPurple;
        break;
     case 3:
        currentColor = "Pink";
        sr.color = ColorPink;
        break;
    }
  }
}