¿Como hacer un mecanismo para abrir una puerta con unity?.

 

https://gamejolt.com/games/TESEO_FINAL/463497

https://paco415.gamejolt.io 

¿Como hacer un mecanismo para abrir una puerta con unity?.

En las imágenes del vídeo se puede ver como un personaje arrastra con los pies una piedra cubica y la introduce en un agujero donde encaja a la perfección, es el resorte que hace que se habrá una puerta de piedra que hay mas adelante para poder pasar.

¿Como esta echo esto?

Yo lo e echo principalmente gracias al script de c# ActivateTrigger.

Este script sustituye gameobjets del juego al ser colisionados.

La puerta de piedra esta fija.

Cuando encajo la piedra en el resorte, tiene este aplicado el script de c# ActivateTrigger.

Y la puerta de piedra fija, es sustituida por una copia identica, que tiene actibada la gravedad, para que caiga, y deje pasar al personaje, como se ve en el video.




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

}

}

}



No hay comentarios:

Publicar un comentario