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”

É 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.
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.
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.
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
}
```