como resolver esse bug em um script de troca de personagem?
2 participantes
Página 1 de 1
como resolver esse bug em um script de troca de personagem?
Eu estava querendo achar um script de troca de personagem, acabei encontrando aqui, porém, ele tem um bug que eu não estou conseguindo arrumar. Quando eu aperto o "play" no unity, apenas o jogador consegue se mexer, o personagem secundário não, e quando eu troco pro personagem secundário, o secundário se mexe mas o primário não. Não sei se é por isso, mas originalmente, esse script foi feito usando o NavMesh, e os personagens não tem o navmesh
esse é o script da troca de personagem:
esse é o script da troca de personagem:
- Código:
public class TrocaPersonagem : MonoBehaviour
{
public bool jogadorControlando;
private void Start()
{
AlternarPersonagem();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
AlternarPersonagem();
}
}
private void AlternarPersonagem()
{
if (jogadorControlando)
{
GetComponent<PlayerController>().enabled = true;
GetComponent<Pet>().enabled = false;
}
else
{
GetComponent<PlayerController>().enabled = false;
GetComponent<Pet>().enabled = true;
}
jogadorControlando = !jogadorControlando;
Note- Iniciante
- PONTOS : 1346
REPUTAÇÃO : 0
Respeito as regras :
Re: como resolver esse bug em um script de troca de personagem?
Conheço esse script... kkk
Bom, não é um bug, quando você não controla o personagem, a navmesh assume. No seu caso, você nem tá usando a navmesh nem fazendo uma IA manualmente pra controlar o pet, se em nenhum lugar diz pra ele se mexer, ele não se mexe...
Poderia postar o script do pet e dar mais detalhes do projeto? existe alguma razão específica pra não usar o navmesh?
Bom, não é um bug, quando você não controla o personagem, a navmesh assume. No seu caso, você nem tá usando a navmesh nem fazendo uma IA manualmente pra controlar o pet, se em nenhum lugar diz pra ele se mexer, ele não se mexe...
Poderia postar o script do pet e dar mais detalhes do projeto? existe alguma razão específica pra não usar o navmesh?
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: como resolver esse bug em um script de troca de personagem?
Opa, então, eu não consegui usar esse navmesh pela quantidade de bugs que estava tendo
O personagem que o navmesh deveria controlar não obedecia as animações corretamente, então, quando ele tentava seguir o personagem que estava indo para a esquerda, ele ia para a esquerda, porém, reproduzia as animações de ir para baixo, ou para a direita, parecia que o personagem estava sendo arrastado pela IA, não controlado, tentei concertar isso, porém, não consegui
o script do pet seria esse aqui:
O personagem que o navmesh deveria controlar não obedecia as animações corretamente, então, quando ele tentava seguir o personagem que estava indo para a esquerda, ele ia para a esquerda, porém, reproduzia as animações de ir para baixo, ou para a direita, parecia que o personagem estava sendo arrastado pela IA, não controlado, tentei concertar isso, porém, não consegui
o script do pet seria esse aqui:
- Código:
[RequireComponent(typeof(Animator))]
public class Pet : MonoBehaviour
{
public GameObject player;
public Animator petAnimator;
float speed = 2;
public float keepDistance = 2f;
bool isWalking;
float input_x;
float input_y;
float lastDirectionX;
float lastDirectionY;
Vector2 petPos;
Vector2 playerPos;
private void Start()
{
petAnimator = GetComponent<Animator>();
player = GameObject.FindGameObjectWithTag("Player");
petPos = transform.position;
playerPos = SetDirection(1, 1, player.transform.position);
transform.position = Vector2.MoveTowards(petPos, playerPos, speed * Time.deltaTime);
}
private void Update()
{
input_x = Input.GetAxisRaw("Horizontal");
input_y = Input.GetAxisRaw("Vertical");
isWalking = (input_x != 0 || input_y != 0);
if (isWalking)
{
petAnimator.SetFloat("input_x", input_x);
petAnimator.SetFloat("input_y", input_y);
}
if (input_x > 0 || input_x < 0)
lastDirectionX = input_x;
if (input_y > 0 || input_y < 0)
lastDirectionY = input_y;
petAnimator.SetBool("isWalking", isWalking);
petPos = transform.position;
playerPos = SetDirection(lastDirectionX, lastDirectionY, player.transform.position);
transform.position = Vector2.MoveTowards(petPos, playerPos, speed * Time.deltaTime);
}
Vector2 SetDirection(float input_x, float input_y, Vector2 playerPos)
{
if(input_x < 0)
{
playerPos.x += keepDistance;
}
else if(input_x > 0)
{
playerPos.x -= keepDistance;
}
if (input_y < 0)
{
playerPos.y += keepDistance;
}
else if (input_y > 0)
{
playerPos.y -= keepDistance;
}
return playerPos;
}
Note- Iniciante
- PONTOS : 1346
REPUTAÇÃO : 0
Respeito as regras :
Re: como resolver esse bug em um script de troca de personagem?
Seu pet se move em direções aleatórias porque esse script não é controlado pela navmesh, ali na Update você tá pegando o input do jogador e tocando a animação correspondente, só que a animação pode estar indo pra um lado e a navmesh tentando ir pro outro..
A solução seria mudar o input pra usar a velocidade do navmesh agent, infelizmente, no momento não posso fazer isso pra você, recomendo que dê uma olhada no YouTube como usar o navmesh agent junto com as animações, qualquer tutorial básico vai fazer o gerenciamento da animação com base na velocidade, é só essa parte que você precisa adaptar ao seu script pra fazer seu pet se comportar direito.
A solução seria mudar o input pra usar a velocidade do navmesh agent, infelizmente, no momento não posso fazer isso pra você, recomendo que dê uma olhada no YouTube como usar o navmesh agent junto com as animações, qualquer tutorial básico vai fazer o gerenciamento da animação com base na velocidade, é só essa parte que você precisa adaptar ao seu script pra fazer seu pet se comportar direito.
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: como resolver esse bug em um script de troca de personagem?
Certo, vou tentar achar algum tutorial explicando como usar a velocidade do navmesh agent, qualquer vídeo sobre o navmesh pode ser utilizado, ou eu tenho que encontrar um que fala especificamente do NavMesh pra jogos 2D?
Note- Iniciante
- PONTOS : 1346
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» ALGUÉM SABER COMO RESOLVER ESSE BUG???
» Como fazer um sistema em que o personagem troca de roupa
» Unity 2017 congelando Como resolver esse bug?
» Como resolver esse erro? Me impede de compilar o app...
» Alguem sabe como resolver esse problema? AI nao procurar ela mesma
» Como fazer um sistema em que o personagem troca de roupa
» Unity 2017 congelando Como resolver esse bug?
» Como resolver esse erro? Me impede de compilar o app...
» Alguem sabe como resolver esse problema? AI nao procurar ela mesma
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos