1. 最好的方法是使用一个列表来存储障碍物的位置,并在生成新障碍物之前检查列表中是否已经存在相近的位置。这里有一个简单的例子:
using System.Collections.Generic;
using UnityEngine;

public class ObstacleSpawner : MonoBehaviour
{
    public float minX = -10f;
    public float maxX = 10f;
    public float minY = -10f;
    public float maxY = 10f;
    public float obstacleSize = 1f;
    public float spawnInterval = 1f;
    private List<Vector2> obstaclePositions = new List<Vector2>();

    private void Update()
    {
        if (Random.value < spawnInterval)
        {
            Vector2 position = GenerateRandomPosition();
            if (IsPositionValid(position))
            {
                SpawnObstacle(position);
            }
        }
    }

    private Vector2 GenerateRandomPosition()
    {
        float x = Random.Range(minX, maxX);
        float y = Random.Range(minY, maxY);
        return new Vector2(x, y);
    }

    private bool IsPositionValid(Vector2 position)
    {
        foreach (Vector2 existingPosition in obstaclePositions)
        {
            if (Vector2.Distance(position, existingPosition) < obstacleSize)
            {
                return false;
            }
        }
        return true;
    }

    private void SpawnObstacle(Vector2 position)
    {
        GameObject obstacle = Instantiate(obstaclePrefab, position, Quaternion.identity);
        obstaclePositions.Add(position);
    }
}
  1. 你可能需要检查一下 obstaclePrefab 是否正确设置,并且在 SpawnObstacle 方法中是否正确添加了新障碍物的位置。

注意:这个代码只是一个简单的例子,可能需要根据你的实际需求进行调整。