19.5 C
Brasília
quarta-feira, junho 4, 2025

Participant de colisão e unidade Tilemap


Eu sou um estudante na Áustria. Estou trabalhando em um projeto para a escola, onde temos que fazer nosso próprio primeiro jogo com a Unity. Por ser a primeira vez que usa a unidade, eu corro constantemente contra os problemas. A maioria deles já consertei. Mas esse problema me deixou preso por alguns dias agora. Lamento muito, usei tantas fotos. Talvez na foto haja algumas informações que eu não lhe dei. O nome do mapa de colisão é “FirstLayer_Col”

Participant de colisão e unidade Tilemap

É isso que tenho até agora. Meu mapa é muito grande. Eu usei a paleta de ladrilhos, para pintá -los. Também usei diferentes tipos de camadas. A camada terrestre é principalmente gras ou água. Além disso, coloquei as árvores, que são vistas na próxima foto. Criei um novo Tilemap para torná -lo uma colisão tilemap. Peguei um azulejo aleatório e o coloquei em tudo o que quero ter uma colisão.

Digite a descrição da imagem aqui

Eu mudei para ordem de camada para 10 para a colisão tilemap, para que eu pudesse ver de onde tenho que colocar o ladrilho para impedir o jogador, para que ele não possa caminhar por cima ou através dele. Depois de colocar o ladrilho no meu native desejado, mudei a ordem da camada de volta para 0 para que não conseguisse mais ver. Não sei se isso é um problema ou não. Não encontrei nenhuma outra solução que funcionasse para mim. O colisão Tilemap possui um colisor Tilemap e o jogador chamado “South_0”, por causa do sprite que eu usei, tem um colisor de caixa e um corpo rígido. Todo colisor é 2D.
Digite a descrição da imagem aqui

Depois de iniciar o aplicativo com a camada de colisão em 10. Posso passar por ele, ficar no native, onde a colisão deve estar, pois não há colisão. Quando altero a ordem da camada para 0, para que não seja visível, posso caminhar até a árvore, mas meu jogo começa a tremer e o jogador gira. Depois, há algum tipo de colisão, mas quando tento passar por isso, meu jogo começa a sacudir muito forte e, em seguida, meu jogador pode ficar no meio da árvore, pois não há colisão. Parece muito “buggy” e o jogador gira em qualquer direção. Não consigo descobrir como posso fazer a colisão para impedir que o jogador entre no campo da minha colisão do Tilemap sem fazer o jogador enlouquecer e fazer a tela inteira agitar. Eu só quero que o jogador pare na frente dele, para que não haja como atravessá -lo. Espero ter explicado meu problema para que você possa entender. Talvez seja apenas uma pequena e pequena correção, mas não consegui encontrar nenhuma solução. A última foto é como o meu jogador cuida depois de eu correr contra a árvore com o mapa de colisão na camada 0. O jogador não deve girar e simplesmente ir, para cima, para baixo, à esquerda, à direita.
Digite a descrição da imagem aqui

Meu código para meu jogador:

utilizing UnityEngine;
utilizing System.Collections;

public class PlayerMovement : MonoBehaviour {

    Route currentDir;
    Vector2 enter;
    bool isMoving = false;
    Vector3 startPos;
    Vector3 endPos;
    public float t;

    public Sprite northSprite;
    public Sprite eastSprite;
    public Sprite southSprite;
    public Sprite westSprite;

    public float walkSpeed = 0.5f;

    public bool isAllowedToMove = true;

    void Begin()
    {
        isAllowedToMove = true;
    }

    void Replace () { 

        if(!isMoving && isAllowedToMove)
        {
            enter = new Vector2(Enter.GetAxis("Horizontal"), Enter.GetAxis("Vertical"));
            if (Mathf.Abs(enter.x) > Mathf.Abs(enter.y))
                enter.y = 0;
            else
                enter.x = 0;

            if(enter != Vector2.zero)
            {

                if(enter.x < 0)
                {
                    currentDir = Route.West;
                }
                if(enter.x > 0)
                {
                    currentDir = Route.East;
                }
                if(enter.y < 0)
                {
                    currentDir = Route.South;
                }
                if (enter.y > 0)
                {
                    currentDir = Route.North;
                }

                change(currentDir)
                {
                    case Route.North:
                        gameObject.GetComponent<SpriteRenderer>().sprite = northSprite;
                        break;
                    case Route.East:
                        gameObject.GetComponent<SpriteRenderer>().sprite = eastSprite;
                        break;
                    case Route.South:
                        gameObject.GetComponent<SpriteRenderer>().sprite = southSprite;
                        break;
                    case Route.West:
                        gameObject.GetComponent<SpriteRenderer>().sprite = westSprite;
                        break;
                }

                StartCoroutine(Transfer(rework));
            }

        }

    }

    public IEnumerator Transfer(Remodel entity)
    {
        isMoving = true;
        startPos = entity.place;
        t = 0f;

        endPos = new Vector3(startPos.x + System.Math.Signal(enter.x), startPos.y + System.Math.Signal(enter.y), startPos.z);

        whereas (t < walkSpeed)
        {
            t += Time.deltaTime * walkSpeed * walkSpeed;
            entity.place = Vector3.Lerp(startPos, endPos, t);
            yield return null;
        };

        isMoving = false;
        yield return 0;
    }
}

enum Route
{
    North,
    East,
    South,
    West
}
```

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
- Advertisement -spot_img

Latest Articles