Beispiel #1
0
	// Use this for initialization
	void Awake () {
        shoottableMask = LayerMask.GetMask("Shootable");
        gunLine = GetComponent<LineRenderer>();

        shootRay.origin = transform.position;
        shootRay.direction = transform.forward;
        gunLine.SetPosition(0, transform.position);

        if (Physics.Raycast(shootRay, out shootHit, range, shoottableMask))
        {
            if(shootHit.collider.tag == "Enemy")
            {
                enemyHealth theEnemyHealth = shootHit.collider.GetComponent<enemyHealth>();
                if(theEnemyHealth != null)
                {
                    theEnemyHealth.addDamage(damage);
                    theEnemyHealth.damageFX(shootHit.point, -shootRay.direction);
                }
            }
            //Hit an enemy goes here
            gunLine.SetPosition(1, shootHit.point);
        }

        else gunLine.SetPosition(1, shootRay.origin + shootRay.direction*range);
	}
    // Update is called once per frame
    void FixedUpdate()
    {
        float melee = Input.GetAxis("Fire2"); //Left Alt ou botão esquerdo mouse

        if (melee > 0 && nextMelee < Time.time && !(myPC.GetRunning()))
        {
            myAnim.SetTrigger("gunMelee");     //Já é automaticamente true por um momento gatilho
            nextMelee = Time.time + meleeRate; //Tempo em segundos desde o inicio até "agora" + rate

            //do Damage
            //Cria array de colider que salva tudo que tiver dentro dessa overlap sphere
            //Parametros --- Lugar onde ela é criada, tamanho dela e masks que ela afetara
            Collider[] attacked = Physics.OverlapSphere(transform.position, knockBackRadius, shootableMask);

            for (int i = 0; i < attacked.Length; i++)
            {
                if (attacked[i].GetComponent <Collider>().tag == "Enemy")
                {
                    enemyHealth theEnemyHealth = attacked[i].GetComponent <enemyHealth>(); //tenta achar o script de vida

                    if (theEnemyHealth != null)
                    {
                        theEnemyHealth.addDamage(damage);
                        theEnemyHealth.damageFX(transform.position, -transform.forward);
                    }
                }
            }
        }
    }
Beispiel #3
0
    //public int playerMoney = 0;
    //Text playerMoneyText;

    #endregion

    // Use this for initialization
    void Awake()
    {
        //playerMoneyText = GameObject.Find("moneyAmount").GetComponent<Text>();
        //playerMoneyText.text = playerMoney.ToString();
        money         = GameObject.Find("moneyPanel").GetComponent <moneyIncreaser>();
        shootableMask = LayerMask.GetMask("Shootable");                    //Shootable layers, in layers. Find the shootable layer.
        gunLine       = GetComponent <LineRenderer>();                     //line renderer reference

        shootRay.origin    = transform.position;                           //Ray is being shot from where instantiated
        shootRay.direction = transform.forward;                            //Shoot forward from position
        gunLine.SetPosition(0, transform.position);                        //where to start and finish drawing

        if (Physics.Raycast(shootRay, out shootHit, range, shootableMask)) //chose the ray, out value will bring information as to what we hit, range is how far it will shoot, layermask to determine what can be hit/shot (shootable)
        {
            if (shootHit.collider.tag == "zombie")                         //if we have shot an enemy
            {
                //playerMoney++;
                money.increaseMoney();
                SetMoneyText();
                enemyHealth theEnemyHealth = shootHit.collider.GetComponent <enemyHealth>(); //get enemy health
                if (theEnemyHealth != null)                                                  //if we find it, and its not null
                {
                    theEnemyHealth.addDamage(damage);                                        //make damage
                    theEnemyHealth.damageFX(shootHit.point, -shootRay.direction);
                }
            }
            //Hit an enemy will be entered here
            gunLine.SetPosition(1, shootHit.point); //endpoint of gunline, what did i hit, where did i hit it
        }
        else
        {
            gunLine.SetPosition(1, shootRay.origin + shootRay.direction * range); //if nothing is hit, shoot a ray within the range we set
        }
    }
Beispiel #4
0
    // Update is called once per frame
    void FixedUpdate()
    {
        float melee = Input.GetAxis("Fire2");

        if (melee > 0 && nextMelee < Time.time && !(myPC.getRunning()))
        {
            myAnim.SetTrigger("gunMelee");
            nextMelee = Time.time + meleeRate;

            //do damage
            Collider[] attacked = Physics.OverlapSphere(transform.position, knockBackRadius, shootableMask);

            int i = 0;
            while (i < attacked.Length)
            {
                if (attacked[i].tag == "Enemy")
                {
                    enemyHealth doDamage = attacked[i].GetComponent <enemyHealth>();
                    doDamage.addDamage(damage);
                    doDamage.damageFX(transform.position, transform.localEulerAngles);
                }
                i++;
            }
        }
    }
Beispiel #5
0
    LineRenderer gunLine;      //Instancia uma variavel que pode guardar um LineRenderer

    // Use this for initialization
    void Awake()
    {
        shootableMask = LayerMask.GetMask("Shootable"); //Procura qual posição esta o layer shootable
        gunLine       = GetComponent <LineRenderer>();  //Instancia o LineRenderer do bullet

        shootRay.origin    = transform.position;        //Instancia o raio do tiro a partir da onde ele está sendo chamado
        shootRay.direction = transform.forward;         //Vai castar o raio na direção do transform do objeto que esta chamando (gunMuzzle)
        gunLine.SetPosition(0, transform.position);     //Vai iniciar na posição de onde o tiro foi instanciado (gunMuzzle)

        //Vai pegar a informação shootRay e vai retornar a informação dele para o shootHit, a distancia (range) que podera ser atirado
        //e vai "acertar" apenas o shootableMask
        if (Physics.Raycast(shootRay, out shootHit, range, shootableMask))
        {
            //Vai usar essa informação do shoothit e ver se o collider que ele acertou tem tag "Enemy"
            if (shootHit.collider.tag == "Enemy")
            {
                //Se tiver ele instancia uma var do tipo enemyHealth que pega o componente EnemyHealt(script)
                //Do objeto que o ray acertou, nesse caso assumi-se que esta no top layer
                //Se não estiver teria que pesquisar no root do gameObject
                enemyHealth theEnemyHealth = shootHit.collider.GetComponent <enemyHealth>();
                //Se ele encontrar o script:
                if (theEnemyHealth != null)
                {
                    theEnemyHealth.addDamage(damage); //Chama a função dentro do inimigo que da dano nele
                    //Vai instancia o efetio de dano no ponto onde o shootHit acertou e na direção oposta do raio em si
                    //Pra ficar mais claro, revisa o script Enemy health e ve os parametros da função DamageFX
                    theEnemyHealth.damageFX(shootHit.point, -shootRay.direction);
                }
            }
            gunLine.SetPosition(1, shootHit.point); // Vai vir da posição inicial até aqui(a partir da arma até o alvo), shootHit.point no caso
        }
        else
        {
            gunLine.SetPosition(1, shootRay.origin + shootRay.direction * range); //Se não acertar nada ele vai atirar um raio até o alcance maximo que ele consegue
        }
    }