jueves, 19 de agosto de 2021

Explicacion y capturas de pantalla de los cambios de enfoque, cambios de camara, en el videojuego;

 

Aquí sigo explicando con capturas de pantalla para facilitar el entendimiento de como hice estos cambios de enfoque del “hombre lobo” desde su espalda un cambio a su rostro unos segundos y luego vuelta a su espalda….en la captura de pantalla numero 1...

 

 


 

 

si os fijáis el hombre lobo tiene varios elementos que hacen de hijos ,están asociados al personaje fijaos en lo recalcado en el lazo amarillo…..

Envolviendo al personaje sale también una luz que es una bombilla que ilumina el rostro del personaje, si no se vería oscuro al hacer el cambio de plano con la cámara, bien hay un gameobject que se llama pruebadecamara(2), lo veréis recalcado en amarillo, y que mediante un script llamado

ActivateTrigger” lo cambiara por otra cámara que tenemos aparte y que lo veréis en otra captura de pantalla, es una cámara prefabricada, que a su vez tiene otro script “TimedObjectDestructor” con un temporizador de tiempo para que al aparecer, al cambio de unos segundos se borre del programa desaparezca.

La cámara esta prefabricada tiene una configuración de valores para que al aparecer en la escena la original que “detrás” y no se vea su enfoque, entonces se ve al “hombre lobo” de frente su rostro.


Para realizar ese cambio el hombre lobo a de tocar un cubo que contiene el script “ActivateTrigger” este cubo “CameraESPECIAL QUE SE DESTRUIRAPORTIEMPO”( captura de pantalla 2) manda la orden de hacer el cambio del 

 

 

 


 

gameobject que se llama pruebadecamara(2),a CameraESPECIAL QUE SE DESTRUIRAPORTIEMPO.


No me se explicar con mejor claridad, pero resumiendo intento explicar

1- el “hombre lobo” tiene un objeto hijo que le sigue constantemente en focandole la cara.

2- al tocar el “hombre lobo” un cubo invisible cercano a una de las victimas, este cubo tiene un script que provoca el cambio del objeto hijo a la cámara prefabricada.

3- se ve al “hombre lobo” de frente por que a aparecido la dicha cámara, esta asu vez tiene un script para que le enfoque un tiempo determinado unos segundos, luego desaparece se borra del programa y se vuelve a ver al “hombre lobo de espaldas”.



Y ya esta. Espero que poniendo las capturas de pantalla y los scripts si alguien quiere probar este sistema pueda hacerlo…..

seguiré explicando mas cosas del videojuego ...quiero explicarlo todo y seguramente quizás lo prepare para que se pueda descargar y lo toquéis con Unity para aprender el que lo desee...practicar me refiero.

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









using System;
using UnityEngine;

namespace UnityStandardAssets.Utility
{
    public class TimedObjectDestructor : MonoBehaviour
    {
        [SerializeField] private float m_TimeOut = 1.0f;
        [SerializeField] private bool m_DetachChildren = false;


        private void Awake()
        {
            Invoke("DestroyNow", m_TimeOut);
        }


        private void DestroyNow()
        {
            if (m_DetachChildren)
            {
                transform.DetachChildren();
            }
            DestroyObject(gameObject);
        }
    }
}




(continuara-…..19-8-21….