Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

meu movendo fica com valores muito grandes

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class controlez : MonoBehaviour,Imatavel
{
    //pega um gameobj que e uma coisa no jogo, e com o n de jogador
    public GameObject jogador;

    private movimentapersona movipersona;

    private animacaopersona minhaanimacao;

    private status statuszunbi;

    public AudioClip sommortez;

    private Vector3 posicaoAleatoria;

    private Vector3 direcao;

    private float contadorVagar;

    private float tempoposizaoaleatoria = 5;


    void Start()
    {

        jogador = GameObject.FindWithTag("jogador");


        int geratipoz = Random.Range(1,28);


        transform.GetChild(geratipoz).gameObject.SetActive(true);

        gerazaleatorio();

        minhaanimacao = GetComponent<animacaopersona>();

        //recebe o script de movimentapersona
        movipersona = GetComponent<movimentapersona>();

        statuszunbi = GetComponent<status>();
    }

    void FixedUpdate()
    {   
        //o distance pega 2 dire e calcula a distancia entre elas 
        float distancia = Vector3.Distance(transform.position,jogador.transform.position);

        //pega a posicao do jg e o do zumb
        direcao = jogador.transform.position - transform.position;

        movipersona.rotaciona(direcao);

        //magnitude significa o tamanho dele pega o tamanho e soma eles ex 1x 0y 0z o valor fica 1
        minhaanimacao.movimentarjg(direcao.magnitude);

        if(distancia > 15)
        {
            vagar();
        }

        else if(distancia > 2.5)
        {
            //pega a posicao do jg e o do zumb
            direcao = jogador.transform.position - transform.position;


            //pega a var do movimentapersona
            movipersona.movimenta(direcao,statuszunbi.velocidade);

            minhaanimacao.atacar(false);
        }

        else
        {
            minhaanimacao.atacar(true);
        }

    }

    void vagar()
    {
        //ira contar no modo DECRESENTE
        contadorVagar -= Time.deltaTime;

        //ou seja se o contador for 0 ele ira fazer uma posizao aleatoria
        if(contadorVagar <=0)
        {
            posicaoAleatoria = aleatorizaposicao();

            contadorVagar += tempoposizaoaleatoria;
        }

        bool ficouperto = Vector3.Distance(transform.position,posicaoAleatoria) <= 0.05;
        if(ficouperto == false)
        {
            direcao = posicaoAleatoria - transform.position;

            //pega a var do movimentapersona
            movipersona.movimenta(direcao,statuszunbi.velocidade);
        }
    }

    //void n e sempre usado como def
    //para ser return uma pos prezisa ser um vec
    Vector3 aleatorizaposicao()
    {
        //insideunitysphere gera uma posicao num raio de 10
        Vector3 posicao = Random.insideUnitSphere *10;


        posicao += transform.position;

        //a posicao dele sera a que ele esta em y
        posicao.y = transform.position.y;

        return posicao;
    }

    //atacajogador e um evento do animacao do zumbi
    void atacajogador()
    {
        int dano = Random.Range(20,30);

        jogador.GetComponent<controledojp>().tiravida(dano);
    }

    void gerazaleatorio()
    {
        //gera um n 
        int geratipoz = Random.Range(1,28);

        //vai no obj que o script esta com o transform
        //getchild pega um filho dele pasa o n do filho
        //pega ele c o gameobj e ativa ele com setac
        transform.GetChild(geratipoz).gameObject.SetActive(true);
    }

    public void tiravida(int dano)
    {
        statuszunbi.vida -= dano;

        if(statuszunbi.vida <= 0)
        {
            morer();
        }
    }

    public void morer()
    {
        //destroy para destruir
        Destroy(gameObject);

        controlaaudio.instancia.PlayOneShot(sommortez);
    }

}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class animacaopersona : MonoBehaviour
{
    private Animator animatordopersona;

    void Awake()
    {
        animatordopersona = GetComponent<Animator>();
    }

    public void atacar (bool estado)
    {
        //entra no component animator,setbool para trocar um valor boleano pra o estado
        animatordopersona.SetBool("ataca",estado);
    }

    public void movimentarjg(float valormovimento)
    {
        animatordopersona.SetFloat("movendo",valormovimento);
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

erro encontrado no fixedupdate tinha um cadigo erado

 direcao = jogador.transform.position - transform.position;