我不确定我可以在哪里发布这个帖子,因为问题可能与脚本有关,或者可能与图块地图建模有关,或者可能与预制件配置有关。
我在每个瓦片地图的右边缘都有一个瓦片地图生成器。该图块地图生成一个预制件,它是另一个图块地图,其中包含大量收集的物品,如硬币和苹果。有时,生成器会以错误的方式生成预制件,因为一些硬币消失了,或者出现了该收集项目的子对象(它是一个收集的动画)。其中一些错误仅与硬币有关,因为我有五个、四个、三个或两个硬币一组的预制件(我猜可能存在一些问题)。
为什么有时实例化会导致我的预制件的实例化很糟糕?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* Script para generar Tilemaps dependiendo del objeto padre.
* Por ejemplo: Tutorial -> Comienzo, Comienzo -> Aleatorio y Aleatorio -> Aleatorio
*
*
*
**/
public class GeneratorTimelap : MonoBehaviour
{
[SerializeField] private GameObject[] tilemapAleatorios;
[SerializeField] private GameObject[] tilemapTutorial;
[SerializeField] private GameObject[] tilemapComienzo;
[SerializeField] private Transform localizacionGenerar;
[SerializeField] private GameObject gridObject;
private Transform objetoPadre;
private void Start()
{
objetoPadre = transform.parent;
gridObject = GameObject.FindGameObjectWithTag("Grid");
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Horizonte"))
{
if (objetoPadre.CompareTag("TilemapTutorial"))
{
int numAleatorio = Random.Range(0, tilemapComienzo.Length);
GameObject tilemapGenerado = Instantiate(tilemapComienzo[numAleatorio], gridObject.transform);
tilemapGenerado.transform.position = localizacionGenerar.transform.position;
}
if (objetoPadre.CompareTag("TilemapComienzo") || objetoPadre.CompareTag("TilemapAleatorio"))
{
int numAleatorio = Random.Range(0, tilemapAleatorios.Length);
GameObject tilemapGenerado = Instantiate(tilemapAleatorios[numAleatorio], gridObject.transform);
tilemapGenerado.transform.position = localizacionGenerar.transform.position;
}
}
}
}
我想说的另一个问题是,在我在左边缘有一个析构函数来销毁我创建的实例之前,但我已经断开了这个游戏对象的连接,并且我遇到了同样的问题。
玩家一直跑到右侧位置,真正的玩家只是跳跃,我不认为问题在于玩家的速度,而是我有其他想法。
Random.Range 包含最大范围。您应该使用
tilemapComienzo.Length
,而不是使用
tilemapComienzo.Length - 1
作为最大值