实例化会不断在触发器上重复,而触发器会在发生冲突时删除自身

时间:2018-07-08 19:49:51

标签: c# unity3d c#-4.0 instantiation

我一直试图在C#中制作一个无限的颜色切换游戏副本。 我的计划是在旋转的圆圈内有一个绿点。与玩家发生碰撞时,这会给用户打分并删除绿色圆圈。以及激活触发器以生成一个新的圆,该圆的y值比消耗点的当前位置高14倍。起点始终已经有2个圆圈,因此当您向上移动时,您不会看到新的圆圈形式,因为它会在第二个圆圈中产生。 有一个销毁区,该区会删除玩家视线外的所有区,以减少滞后时间,因为老圈子会积累起来,或者在玩家死亡时重新开始游戏。 问题在于,如CurrentSpawnPoint的调试所见,在同一位置创建了多个圆,对于多个衍生对象或高度,它似乎保持不变,好像是在迅速增加或只是迅速增加一样,却迅速增加。 我只是一个团结的初学者,仍然不了解所有C#变量,并且肯定有解决我问题的简单方法。感谢您的帮助,感谢您的宝贵时间。     如果我的描述仍不清楚,这是指向实际游戏文件的GitHub链接。 https://github.com/Xotsu/Color-Switch-replica

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;
    }
  }
}  

1 个答案:

答案 0 :(得分:0)

问题是我在绿色圆点中独立生成,并在圆形预制件中生成了副本。很抱歉这个愚蠢的问题:/