Tutorial hacer efecto de explosion y habrir una caja .





Tutorial hacer efecto de explosion y habrir una caja fuerte.

Tenemos el gráfico de la caja fuerte cerrada.


Tenemos el gráfico de la caja fuerte abierta.

Tenemos un gráfico de un cubo que lo usaremos como detonador de la dinamita.


Tenemos otros tres cubos alejados de la escena que usaremos como una especie de enlace o circuito para desencadenar la escena final de la caja reventada y abierta.




Todo con formato fbx. Y necesitamos el script ActivateTrigger en C #.

El script ActivateTrigger, nos sirve para que al impactar con otro grafico el cubo mas cercano a la caja cerrada, borre, mejor dicho cambie de los tres cubos que emos puesto aparte alejados de la caja, nos cambie el del centro, por otro grafico que este vacio o con el triger marcado , el cubo que esta encima de el que tiene un rigid bodi con la gravedad se apoya en el que se borrara el del centro de la flecha roja, al no tener el apoyo del que hay en el centro, choca con el tercero avajo del todo que tiene otro script ActivateTrigger, con la orden de cambiar el grafico de la caja cerrada por el de la caja abierta, la caja abierta tiene como hijo el efecto de particulas que biene con el standar asset de unity de explosion fogonazo, bueno hay varios tipos se puede poner el que mejor efecto produzca para lo que se quiera hacer.....mirare de hacer también una explicacion con un video de youtube para complementar esta pagina.



EL SCRIPT

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(sourcetargetGameObject.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();
        }
    }
}






2 comentarios:

  1. Soy el propio autor del blog,con las prisas me deje un detalle de esta pagina, falta un script,Timer destruccion, se a de poner en el cubo que sustitulle al central, se pone un tiempo para que se borre y al caer dobre el ultimo aga funcionar por activate triger el cambio de caja por el de la caja abierta con efecto explosion....en breve pondre en la pagina y el video este detalle que descuide.

    ResponderEliminar
  2. Tambien se pude cambiar la velocidad de gravedad en el cubo que esta enzima de los otros dos, que tiene el rigidbody, y al caer mas lento hace efecto de tiempo y el cambio de la caja cerrada a la abierta es mas lento....

    ResponderEliminar