Esse script é um complemento do Sistema de tiro com raycast portanto você terá que ter o script Atirar...
1° - Coloque o script Inimigo na cabeça do seu inimigo e marque a opção Cabeça,Coloque no Inim o corpo completo do inimigo e no Osso o esqueleto do inimigo...
2° - Faça um prefab com uma camera e coloque o script Bala nele.
3° - Ajuste o ConfigHS a sua necessidade..
4° - Configure o osso do modo q você quiser... no Vídeo o shader do osso é o GUI Text... se estiver com o standard e o osso do inimigo dentro do corpo não irá aparecer...
Obs:Não deixe a bala em cena,Dará um erro no console de um inimigo para o outro mas não bugará o sistema.... Pretendo arrumar mas não agora... ;-; por pura preguiça ;-;
Script Inimigo
Code
- using UnityEngine;
- using System.Collections;
- public class Inimigo : MonoBehaviour {
- public static GameObject CabecaReal, Cano, BalaD, Osso;
- public GameObject Inim, Esqueleto;
- public float vida = 100;
- public bool Cabeca;
- bool CabecaMorte,Ignore;
- bool chamouMorte = false;
- void Start (){
- Esqueleto.SetActive (false);
- if (Cabeca == true) {//
- vida = 1; // Remova essa linha caso não queira que seja apenas 1 tiro
- }//
- }
- void Update () {
- if (Cabeca == false) {
- if (vida <= 0) {
- vida = 0;
- if (chamouMorte == false) {
- chamouMorte = true;
- StartCoroutine ("Morrer");
- }
- }
- }
- if (Cabeca == true) {
- if (vida <= 0) {
- vida = 0;
- if (CabecaMorte == false) {
- CabecaMorte = true;
- Ignore = true;
- Instantiate (BalaD, new Vector3 (Cano.transform.position.x, Cano.transform.position.y, Cano.transform.position.z), Quaternion.identity);
- CabecaReal = (this.gameObject);
- Osso = Esqueleto;
- }
- }
- }
- if (Ignore == true) {
- if (Vector3.Distance (transform.position, Bala.ProJB.transform.position) < Bala.Distancia) {
- StartCoroutine ("Falecer");
- }
- }
- }
- IEnumerator Falecer(){
- yield return new WaitForSeconds (Bala.Distancia);
- Destroy (Inim);
- Ignore = false;
- }
- IEnumerator Morrer(){
- GetComponent<MeshRenderer> ().material.color = Color.red;
- yield return new WaitForSeconds (2);
- Destroy (Inim);
- }
- }
Script Bala
Code
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class Bala : MonoBehaviour {
- public static float Velocidade, Distancia;
- bool Perto;
- float VelocidadeSalva;
- public static GameObject ProJB;
- void Start (){
- ProJB = this.gameObject;
- VelocidadeSalva = Velocidade;
- }
- void Update () {
- transform.position = Vector3.Lerp (transform.position, Inimigo.CabecaReal.transform.position, Time.deltaTime * Velocidade);
- if (Vector3.Distance (transform.position, Inimigo.CabecaReal.transform.position) < Distancia) {
- StartCoroutine ("Destruir");
- Inimigo.Osso.SetActive (true);
- Velocidade = Velocidade - 10; // Você pode mudar o 10 para ficar + lento ao chegar no inimigo...
- } else {
- Inimigo.Osso.SetActive (false);
- }
- }
- IEnumerator Destruir (){
- yield return new WaitForSeconds (Distancia);
- Velocidade = VelocidadeSalva;
- Destroy (this.gameObject);
- }
- }
Script ConfigHS
Code
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class ConfigHS : MonoBehaviour {
- public GameObject LocalTiro, Projetil;
- public float VelTiro, DisEsqueleto;
- void Update () {
- Bala.Velocidade = VelTiro;
- Inimigo.BalaD = Projetil;
- Inimigo.Cano = LocalTiro;
- Bala.Distancia = DisEsqueleto;
- }
- }