jueves, 6 de enero de 2022

¿Como destruir enemigos con Unity?;

 

¿Como destruir enemigos con Unity?

Pongo divertido video de YouTube explicando el tema, divertido para mi, por que me estoy de paso promocionando, en plan que estupendo soy lo estoy haciendo todo genial...¡¡¡¡ja ja ja ja ja !!!!

(Se escuchan unos rujidos de fondo, pertenecen al juego cuando se ejecuta, pero no molestan excesivamente para comprender el video, solo duran unos momentos... )



Explico un problema que tenia con colisiones y destrucción de enemigos.

Creo esta resuelto con el siguiente script en C#….

ESCALAR

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

public class ESCALAR : MonoBehaviour {

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {


        if (Input.GetKeyDown(KeyCode.M))// funciona pasito a pasito


        // En los 3 ejes estatico. 
        //transform.localScale = new Vector3 (0.5f * Time.deltaTime, 0.5f, 0.0f); 
        // En los 3 ejes Dinámico.
//    transform.localScale += new Vector3 (0.5f * Time.deltaTime, 0.0f, 0.0f); 
        // En un solo eje Dinámico.
        transform.localScale += Vector3.right * 77* Time.deltaTime;



        if (Input.GetKeyUp(KeyCode.M))// funciona pasito a pasito




            transform.localScale -= Vector3.right *77* Time.deltaTime;

        
    }
}



al apretar la tecla “m” la esfera que tiene el hombre lobo se escala y al tocar el Trigger activado de la victima produce su aniquilación, esta asu vez tiene el script de “activate Trigger” que hace el cambio de personajes de vivo a aniquilado.




using System;
using UnityEngine;
using Object = UnityEngine.Object;

namespace UnityStandardAssets.Utility
{
    public class ActivateTrigger : MonoBehaviour
    {
        // A multi-purpose script which causes an action to occur when
        // a trigger collider is entered.
        public enum Mode
        {
            Trigger = 0,    // Just broadcast the action on to the target
            Replace = 1,    // replace target with source
            Activate = 2,   // Activate the target GameObject
            Enable = 3,     // Enable a component
            Animate = 4,    // Start animation on target
            Deactivate = 5  // Decativate target GameObject
        }

        public Mode action = Mode.Activate;         // The action to accomplish
        public Object target;                       // The game object to affect. If none, the trigger work on this game object
        public GameObject source;
        public int triggerCount = 1;
        public bool repeatTrigger = false;


        private void DoActivateTrigger()
        {
            triggerCount--;

            if (triggerCount == 0 || repeatTrigger)
            {
                Object currentTarget = target ?? gameObject;
                Behaviour targetBehaviour = currentTarget as Behaviour;
                GameObject targetGameObject = currentTarget as GameObject;
                if (targetBehaviour != null)
                {
                    targetGameObject = targetBehaviour.gameObject;
                }

                switch (action)
                {
                    case Mode.Trigger:
                        if (targetGameObject != null)
                        {
                            targetGameObject.BroadcastMessage("DoActivateTrigger");
                        }
                        break;
                    case Mode.Replace:
                        if (source != null)
                        {
                            if (targetGameObject != null)
                            {
                                Instantiate(source, targetGameObject.transform.position,
                                            targetGameObject.transform.rotation);
                                DestroyObject(targetGameObject);
                            }
                        }
                        break;
                    case Mode.Activate:
                        if (targetGameObject != null)
                        {
                            targetGameObject.SetActive(true);
                        }
                        break;
                    case Mode.Enable:
                        if (targetBehaviour != null)
                        {
                            targetBehaviour.enabled = true;
                        }
                        break;
                    case Mode.Animate:
                        if (targetGameObject != null)
                        {
                            targetGameObject.GetComponent<Animation>().Play();
                        }
                        break;
                    case Mode.Deactivate:
                        if (targetGameObject != null)
                        {
                            targetGameObject.SetActive(false);
                        }
                        break;
                }
            }
        }


        private void OnTriggerEnter(Collider other)
        {
            DoActivateTrigger();
        }
    }
}