1
resposta

tentando regular a quantidade de zumbis

tentei criar um regulador de quantidade de zumbis chefes , igualzinho fizemos com os zumbis normais, mas ele dá o erro:

Assets\programasC\controlachefe.cs(73,29): error CS0122: 'spawn_chefe.diminuir_quantidade_de_chefe()' is inaccessible due to its protection level

(fiz um pouco diferente os scripts mas tudo funciona perfeitamente e a regulação esta idéntica)

ESTE É O SPAWN

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

public class spawn_chefe : MonoBehaviour
{

    public GameObject chefe_zumbi;
    float tempo_de_spawn = 0;
    public float spawnar = 5;
    public int numero_de_chefes_max = 3;
    public int numero_de_chefes_existentes = 0;
    void Update(){

        tempo_de_spawn = tempo_de_spawn + Time.deltaTime;
            if (tempo_de_spawn > spawnar){
                tempo_de_spawn = 0;
                if (numero_de_chefes_existentes < numero_de_chefes_max){
                    controlachefe zumbii =  Instantiate(chefe_zumbi, transform.position, transform.rotation).GetComponent<controlachefe>(); 
                    zumbii.meugeradorchefe = this; 
                    numero_de_chefes_existentes = numero_de_chefes_existentes + 1;
                }               
            }

    }

    void diminuir_quantidade_de_chefe(){
        numero_de_chefes_existentes = numero_de_chefes_existentes - 1;
    }

}

ESTE É O DO CHEFE

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

public class controlachefe : MonoBehaviour
{

    Transform jogador;
    NavMeshAgent agente;
    public int vida_chefao = 10;
    public float velocidade_chefao = 5;
    Vector3 direcao_chefe_jogador;
    testedaordem script_do_jogador;
    public int dano_chefe_max = 55;
    public int dano_chefe_min = 40;
    public float numero_que_define_a_porcentagem_do_drop = 0.4f;  
    public GameObject kit_medico;

    void Start(){
        jogador = GameObject.FindWithTag("gamer").transform; // aqui eu só acelerei, agora posso botar jogador.position direto
        agente = GetComponent<NavMeshAgent>();
        agente.speed = velocidade_chefao;
        script_do_jogador = GameObject.FindWithTag("gamer").GetComponent<testedaordem>(); 
        //kit_medico = GameObject.FindWithTag("kit_medico");
    }


    void FixedUpdate(){
            direcao_chefe_jogador = jogador.position - transform.position;
            Vector3 nova_direcao_chefe_jogador = Vector3.RotateTowards(transform.forward, direcao_chefe_jogador, 20 * Time.deltaTime, 0.0f);
            Quaternion rotacionar_chefe = Quaternion.LookRotation(nova_direcao_chefe_jogador);
            GetComponent<Rigidbody>().MoveRotation(rotacionar_chefe);
    }

    void Update(){
        agente.SetDestination(jogador.position);// o remainingDistance pega a distancia entre o objeto e seu destino e como já 
        bool distancia_chefe_jogador = agente.remainingDistance <= agente.stoppingDistance; // defini o destino o remainig funciona

        bool distancia_chefe_jogador_corrigir = Vector3.Distance(transform.position, jogador.position) <= 3;

        if (distancia_chefe_jogador_corrigir == true){ // o stopping.Distance é definido no componente e diz a que distancia do destino
            GetComponent<Animator>().SetBool("Zumbi_ataca", true); // o objeto deve parar              
        }

        else{
            GetComponent<Animator>().SetBool("Zumbi_ataca", false);
        }
    }

    void OnTriggerEnter(Collider bala){

        if (bala.tag == "bala"){
            diminuir_vida();
        }
    }

    void dropar_kit_medico_chefe(){

        if (Random.value < numero_que_define_a_porcentagem_do_drop){
            Instantiate(kit_medico, transform.position, transform.rotation);
        }
    }

    public spawn_chefe meugeradorchefe;
    void diminuir_vida(){
        vida_chefao = vida_chefao - 1;
        if (vida_chefao == 0){
            GetComponent<Animator>().SetTrigger("morrer_zumbi");
            this.enabled = false;
            agente.enabled = false;
            dropar_kit_medico_chefe();
            meugeradorchefe.diminuir_quantidade_de_chefe();
            Destroy(gameObject, 2);

            /* NÃO SEI O PORQUÊ DESSE JEITO NÃO FUNCIONAR
            float tempo_ate_morrer = 2;
            tempo_ate_morrer = tempo_ate_morrer - Time.deltaTime;
            if (tempo_ate_morrer <= 0){
                Destroy(gameObject);
            }
            */
        }
    }



    void Atacar_jog(){
        int dano_chefe = Random.Range(dano_chefe_min, dano_chefe_max);
        script_do_jogador.tomardano(dano_chefe);
        GameObject.FindWithTag("canvas").GetComponent<controlainterface>().barra_de_vida();
    }
}
1 resposta

Oi, Danielle, tudo bem? Pelo erro acho que seu método não é público e por isso não temos a capacidade de acessá-lo de outro script pela referência.