// 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); } } } } }
//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 } }
// 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++; } } }
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 } }