在Unity上实例化预制件时出现问题

问题描述 投票:0回答:1

我不确定我可以在哪里发布这个帖子,因为问题可能与脚本有关,或者可能与图块地图建模有关,或者可能与预制件配置有关。

我在每个瓦片地图的右边缘都有一个瓦片地图生成器。该图块地图生成一个预制件,它是另一个图块地图,其中包含大量收集的物品,如硬币和苹果。有时,生成器会以错误的方式生成预制件,因为一些硬币消失了,或者出现了该收集项目的子对象(它是一个收集的动画)。其中一些错误仅与硬币有关,因为我有五个、四个、三个或两个硬币一组的预制件(我猜可能存在一些问题)。

为什么有时实例化会导致我的预制件的实例化很糟糕?

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

我想说的另一个问题是,在我在左边缘有一个析构函数来销毁我创建的实例之前,但我已经断开了这个游戏对象的连接,并且我遇到了同样的问题。

玩家一直跑到右侧位置,真正的玩家只是跳跃,我不认为问题在于玩家的速度,而是我有其他想法。

c# unity-game-engine instance prefab tilemaker
1个回答
0
投票

Random.Range 包含最大范围。您应该使用

tilemapComienzo.Length
,而不是使用 
tilemapComienzo.Length - 1

作为最大值
© www.soinside.com 2019 - 2024. All rights reserved.