- Home /
Simple one-way teleport?
I want to make simple teleporters for my game. I want to teleport by standing on / in the teleporter and when I press the "Interact" button (I defined it in Input settings), teleport to destination transform.
It is already working, but it's not perfect.
I tried to use OnTriggerEnter first time. It was working until I wrote the other if statement :
if(Input.GetButtonDown ("Interact"))
II realised, OnTriggerEnter won't work as it's executed at entering (silly me). OnTriggerStay works, but it doesn't always get my input (Interact). I guess, that is because "OnTriggerStay function is on the physics timer so it wont necessary run every frame."
I was thinking what to do, but I'm out of ideas. What should I do? It's really annoying for a player if the teleporter doesn't always react. Is there other way than OnTriggerStay?
Full code (JS):
#pragma strict
var Destination : Transform;
var DestinationOffsetY : float = 0.0f;
var OnUse : boolean = false; //TO BE IMPLEMENTED
@script AddComponentMenu("Custom Scripts/Gameplay/Teleport")
function OnDrawGizmos () {
Gizmos.DrawIcon (transform.position, "teleport.tif", true);
}
function OnTriggerStay(other : Collider)
{
if(other.gameObject.tag=="Player")
{
Debug.Log("READY TO TELEPORT");
if(Input.GetButtonDown ("Interact"))
{
other.transform.position.x = Destination.transform.position.x;
other.transform.position.y = Destination.transform.position.y+DestinationOffsetY;
other.transform.position.z = Destination.transform.position.z;
Debug.Log("TELEPORT!");
}
}
}
Answer by APProjects · Dec 31, 2012 at 04:27 PM
Thank you for all the answers! They were useful! I decided to try to make it with Update.
Here it is:
#pragma strict
var Destination : Transform;
var DestinationOffsetY : float = 0.0f;
var OnUse : boolean = false;
var ChangeYPos : boolean = false;
private var CanTeleport : boolean = false;
private var OtherObject: GameObject;
@script AddComponentMenu("Custom Scripts/Gameplay/Teleport")
function OnDrawGizmos () {
Gizmos.DrawIcon (transform.position, "teleport.tif", true);
}
function OnDrawGizmosSelected () {
if(Destination != null) {
// Draws a blue line from this transform to the target
Gizmos.color = Color.blue;
Gizmos.DrawLine (transform.position, Vector3(Destination.position.x,Destination.position.y+DestinationOffsetY,Destination.position.z));
}
}
function OnTriggerEnter(other : Collider)
{
OtherObject = other.gameObject;
if(other.gameObject.tag=="Player")
{
CanTeleport = true;
}
}
function OnTriggerExit(other : Collider)
{
if(other.gameObject.tag=="Player")
{
CanTeleport = false;
}
}
function Update()
{
if(CanTeleport != true) return;
if(OnUse == false || Input.GetButtonDown("Interact"))
{
OtherObject.transform.position.x = Destination.transform.position.x;
if(ChangeYPos)
{
OtherObject.transform.position.y = Destination.transform.position.y+DestinationOffsetY;
}
OtherObject.transform.position.z = Destination.transform.position.z;
Debug.Log("TELEPORT!");
}
}
Answer by TomPendergrass · Dec 30, 2012 at 11:02 PM
you can use OnTriggerEnter to set a boolean. then in an update function in your script, if the input is down and the boolean is true, then you can teleport.
var usable : boolean = false;
var lastPlayer : Collider;
var Destination : Transform;
var DestinationOffsetY : float = 0.0f;
function OnTriggerEnter(other : Collider)
{
if(other.gameObject.tag == "Player")
{
usable = true;
lastPlayer = other;
}
}
function OnTriggerExit(other : Collider)
{
if(other.gameObject.tag == "Player")
{
usable = false;
}
}
function Update()
{
if(!usable)
return;
if(Input.GetButtonDown ("Interact"))
{
lastPlayer.transform.position.x = Destination.transform.position.x;
lastPlayer.transform.position.y = Destination.transform.position.y+DestinationOffsetY;
lastPlayer.transform.position.z = Destination.transform.position.z;
Debug.Log("TELEPORT!");
}
}
Your answer
Follow this Question
Related Questions
OnTriggerStay explanation? 1 Answer
OntriggerEnter / Stay with the same Gameobject tags 0 Answers
Problem with OnTriggerEnter 1 Answer
Teleport on trigger enter 2 Answers
OnTriggerStay/Enter/Exit 2 Answers