之前学习做游戏一直找不到如何生成物品,今天才用AI加持下完成了这段C#代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class shenchen : MonoBehaviour
{
public GameObject itemPrefab; // 你要生成的物品的预设
public float spawnRadius = 10f; // 生成物品的半径
public LayerMask groundLayer; // 地面层,确保物品生成在地面上
public float minSpawnHeight = 1f; // 生成物品的最小高度
public float maxSpawnHeight = 5f; // 生成物品的最大高度
public float spawnInterval = 5f; // 生成物品的间隔时间(秒)
private Dictionary<Vector3Int, GameObject> itemDictionary = new Dictionary<Vector3Int, GameObject>(); // 物品字典,用以记录物品位置
void Start()
{
// 启动物品生成协程
StartCoroutine(SpawnItemsCoroutine());
}
IEnumerator SpawnItemsCoroutine()
{
while (true)
{
// 等待指定的时间间隔
yield return new WaitForSeconds(spawnInterval);
// 随机生成物品
SpawnItem();
}
}
void SpawnItem()
{
Vector3 randomPos;
Vector3Int gridPos;
// 在指定半径和高度范围内随机选取一个位置,并确保生成的物品在地面上
do
{
randomPos = transform.position + Random.insideUnitSphere * spawnRadius;
randomPos.y = Random.Range(minSpawnHeight, maxSpawnHeight); // 设置生成物品的高度
gridPos = Vector3Int.RoundToInt(randomPos);
} while (!IsValidPosition(gridPos) || IsItemAtPosition(gridPos));
// 创建一个新的物品
GameObject item = Instantiate(itemPrefab, randomPos, Quaternion.identity);
// 将物品添加到字典中
itemDictionary[gridPos] = item;
}
bool IsValidPosition(Vector3Int position)
{
// 这里可以添加额外的检查,例如确保位置在地图边界之内等
return true;
}
bool IsItemAtPosition(Vector3Int position)
{
// 检查字典中是否已经有这个位置的物品
return itemDictionary.ContainsKey(position);
}
}