es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Por alguna razón, Unity se bloquea con esto.

Básicamente, tengo esta cosa en mi juego para cambiar el bioma de un fragmento determinado.
El problema con esto es que evita que el juego se ejecute (incluso en el inspector)

if(obj.name == "Dirt" && Atlas.Dirt != null)
{
    gen.MakeTile(Mathf.RoundToInt(trans.position.x), Mathf.RoundToInt(trans.position.y), Atlas.Dirt.placableVariant, trans.rotation.z, Atlas.Dirt.MapColor, true);
    Destroy(obj);
}

Esa es la parte que causa que todo se bloquee
y esto crea una baldosa:

public void MakeTile(int x, int y, GameObject Object, float RotationalChange, Color MapColor, bool AddToArray)
{
    float ChunkCoord = (Mathf.Round(x / chunkWidth) * chunkWidth);
    ChunkCoord /= chunkWidth;

    GameObject NewTile = Instantiate(Object, new Vector3Int(x, y, 0), Quaternion.identity, Chunks[(int)ChunkCoord].transform);
    NewTile.name = Object.name;

    FireBlockUpdate();

    if(AddToArray)
        Blocks[x, y] = NewTile;

    NewTile.transform.rotation = Quaternion.Euler(0, 0, RotationalChange);
    texture.SetPixel(x, y, MapColor);
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    A partir de los fragmentos de código dados, parece que hay un problema con la declaración “if” en el primer bloque de código que está provocando que el juego se bloquee. La condición en la declaración “if” verifica si el nombre del objeto es “Dirt” y si la propiedad Atlas.Dirt no es nula. Una posible razón para el bloqueo podría ser que la propiedad Atlas.Dirt no esté correctamente instanciada o asignada a un valor, lo que podría resultar en una excepción de referencia nula.

    Para solucionar este problema, se podría intentar depurar el código y verificar el valor de la propiedad Atlas.Dirt. Otra opción podría ser modificar el código para manejar elegante y adecuadamente los valores nulos, por ejemplo, agregando una comprobación de nulidad antes de acceder a la propiedad. Esto podría evitar que el juego se bloquee y permitir que se ejecute correctamente.

    En cuanto al método “MakeTile”, parece ser responsable de crear un nuevo objeto de baldosa y agregarlo a un array de bloques. El método toma varios parámetros como las coordenadas x e y, un objeto de juego para instanciar como la baldosa, un cambio de rotación, el color del mapa y una bandera para agregar la nueva baldosa al array de bloques. El método también actualiza la textura de la baldosa utilizando el método setPixel.

    En general, parece que los fragmentos de código dados forman parte de un proyecto más grande que implica generar baldosas y biomas en un entorno de juego utilizando C#, Visual Studio y Unity3D.

Comments are closed.