[RESOLVIDO] Teletransporte pelo cenario Unity2D
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Teletransporte pelo cenario Unity2D
Ola pessoas! To aprendendo ainda...Bom, eu to tentando fazer um trigger pra ir de um comodo pro outro com o apertar de um botão, por exemplo nessa foto ai, eu quero ir de uma porta do cenario de baixo pro de cima e vice versa, mas n to conseguindo fazer funcionar, tentei um spript com o pouco que sei ate agora mas com certeza ta faltando alguma coisa. Obrigado a quem puder me dar uma força!
- Código:
public Transform teleportTarget;
public GameObject player;
private void OnTriggerEnter2D(Collider2D collision)
{
player.transform.position = teleportTarget.transform.position;
}
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
Aqui tem 3 exemplos:
- Código:
private void OnTriggerEnter2D (Collider2D collision) {
//Por tag do objeto
if (collision.CompareTag ("Porta")) {
player.transform.position = teleportTarget.transform.position;
}
//Por nome do objeto
if (collision.name == "Porta") {
player.transform.position = teleportTarget.transform.position;
}
//Por layer do objeto
if (collision.gameObject.layer == 0) {
player.transform.position = teleportTarget.transform.position;
}
}
rafaelllsd- ProgramadorMaster
- PONTOS : 5242
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
rafaelllsd escreveu:Aqui tem 3 exemplos:No script que você fez não cita qual objeto especifico ele vai colidir, ou seja, qualquer objeto que você colidir e tiver OnTrigger ativado ele vai fazer o transporte, no caso deste que passei o player só vai teletransportar se ele colidir com objeto com o nome "Porta" ou a tag "Porta" ou a layer "0"(que no caso é a layer "Default"), você que escolhe.
- Código:
private void OnTriggerEnter2D (Collider2D collision) {
//Por tag do objeto
if (collision.CompareTag ("Porta")) {
player.transform.position = teleportTarget.transform.position;
}
//Por nome do objeto
if (collision.name == "Porta") {
player.transform.position = teleportTarget.transform.position;
}
//Por layer do objeto
if (collision.gameObject.layer == 0) {
player.transform.position = teleportTarget.transform.position;
}
}
E tem como eu usar input.GetKey ou algo assim pra botar a letra "e" por exemplo pra poder entras nas portas?
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
To tentando fazer o TP ao apertar um botaorafaelllsd escreveu:Aqui tem 3 exemplos:No script que você fez não cita qual objeto especifico ele vai colidir, ou seja, qualquer objeto que você colidir e tiver OnTrigger ativado ele vai fazer o transporte, no caso deste que passei o player só vai teletransportar se ele colidir com objeto com o nome "Porta" ou a tag "Porta" ou a layer "0"(que no caso é a layer "Default"), você que escolhe.
- Código:
private void OnTriggerEnter2D (Collider2D collision) {
//Por tag do objeto
if (collision.CompareTag ("Porta")) {
player.transform.position = teleportTarget.transform.position;
}
//Por nome do objeto
if (collision.name == "Porta") {
player.transform.position = teleportTarget.transform.position;
}
//Por layer do objeto
if (collision.gameObject.layer == 0) {
player.transform.position = teleportTarget.transform.position;
}
}
- Código:
private void Update()
{
if (player && Input.GetKeyDown("e"))
{
player.transform.position = teleportTarget.transform.position;
}
}
}
assim até que foi mas o teleporte ta acontecendo em qualquer parte do mapa e não quando eu estou na frente da porta e so ta me jogando pra porta de baixo e não me leva pra de cima
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
rafaelllsd escreveu:Aqui tem 3 exemplos:No script que você fez não cita qual objeto especifico ele vai colidir, ou seja, qualquer objeto que você colidir e tiver OnTrigger ativado ele vai fazer o transporte, no caso deste que passei o player só vai teletransportar se ele colidir com objeto com o nome "Porta" ou a tag "Porta" ou a layer "0"(que no caso é a layer "Default"), você que escolhe.
- Código:
private void OnTriggerEnter2D (Collider2D collision) {
//Por tag do objeto
if (collision.CompareTag ("Porta")) {
player.transform.position = teleportTarget.transform.position;
}
//Por nome do objeto
if (collision.name == "Porta") {
player.transform.position = teleportTarget.transform.position;
}
//Por layer do objeto
if (collision.gameObject.layer == 0) {
player.transform.position = teleportTarget.transform.position;
}
}
gravei, olha ai com ta
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
Eu sugiro você verificar a distância entre o player e a porta, e caso a distância for menor que x e apertar "E", ele teleporta:
Verificar distância: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
Verificar distância: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
rafaelllsd- ProgramadorMaster
- PONTOS : 5242
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
rafaelllsd escreveu:Eu sugiro você verificar a distância entre o player e a porta, e caso a distância for menor que x e apertar "E", ele teleporta:
Verificar distância: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
- Código:
void Start()
{
canTeleport = false;
player = GameObject.FindWithTag("Player");
}
void Update()
{
if (Input.GetKeyDown("e") && canTeleport == true)
{
dist = Vector3.Distance(player.transform.position, b: teleportTarget.transform.position);
canTeleport = false;
}
}
void OnTriggerEnter()
{
canTeleport = true;
}
void OnTriggerExit()
{
canTeleport = false;
}
Bom eu tentei isso ai mas nada acontece ainda, eu não entendi o que esta faltando
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
Ahh eu notei que o botão so funciona quando eu uso o void Update, como eu faço pra usar o void OnTriggerEnter2D(Collider2D collision) pra reconhecer a colisao com o collider e usar o update pro botão "e" pra teleportar só ao acionar?mathhBR escreveu:rafaelllsd escreveu:Eu sugiro você verificar a distância entre o player e a porta, e caso a distância for menor que x e apertar "E", ele teleporta:
Verificar distância: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
- Código:
void Start()
{
canTeleport = false;
player = GameObject.FindWithTag("Player");
}
void Update()
{
if (Input.GetKeyDown("e") && canTeleport == true)
{
dist = Vector3.Distance(player.transform.position, b: teleportTarget.transform.position);
canTeleport = false;
}
}
void OnTriggerEnter()
{
canTeleport = true;
}
void OnTriggerExit()
{
canTeleport = false;
}
Bom eu tentei isso ai mas nada acontece ainda, eu não entendi o que esta faltando
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
rafaelllsd escreveu:Eu sugiro você verificar a distância entre o player e a porta, e caso a distância for menor que x e apertar "E", ele teleporta:
Verificar distância: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
- Código:
void Start()
{
canTeleport = false;
player = GameObject.FindWithTag("Player");
}
void Update()
{
if (Input.GetKeyDown("e") && canTeleport == true)
{
dist = Vector3.Distance(player.transform.position, b: teleportTarget.transform.position);
canTeleport = false;
}
}
void OnTriggerEnter()
{
canTeleport = true;
}
void OnTriggerExit()
{
canTeleport = false;
}
- Código:
public Transform teleportTarget;
private GameObject[] teleportTarget_;
private GameObject player;
public float distance;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
teleportTarget_ = GameObject.FindGameObjectsWithTag("Doors");
}
void Update()
{
distance = Vector3.Distance(player.transform.position, teleportTarget_.transform.position);
if (distance < 0.6823619 && Input.GetKeyDown("e"))
{
player.transform.position = teleportTarget.transform.position;
}
}
Consegui algo finalmente, mas o problema agora é fazer o script checar multiplas portas e ver a distancia do player ate elas porem eu não consigo fazer o transform de GameObject[]. como eu poderia fzer isso?
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
No caso é o transform da checagem de distancia aqui: distance = Vector3.Distance(player.transform.position, /////teleportTarget_.transform.position);////
por serem varios objetos ele não aceita
por serem varios objetos ele não aceita
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
mathhBR escreveu:No caso é o transform da checagem de distancia aqui: distance = Vector3.Distance(player.transform.position, /////teleportTarget_.transform.position);////
por serem varios objetos ele não aceita
Basta usar um for para fazer a checagem dos elementos da array, mas tipo, geralmente cada código vai em uma porta... Você quer fazer um gerenciador geral para todas as portas?
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
Bom eu tava querendo que ele verificasse a distancia do player pra cada porta e quando estivesse no alcance e apertar E ele entra e teleporta pro cenario em cima. Eu to tentando verificar a colisão da porta mas não ta funcionando.MarcosSchultz escreveu:mathhBR escreveu:No caso é o transform da checagem de distancia aqui: distance = Vector3.Distance(player.transform.position, /////teleportTarget_.transform.position);////
por serem varios objetos ele não aceita
Basta usar um for para fazer a checagem dos elementos da array, mas tipo, geralmente cada código vai em uma porta... Você quer fazer um gerenciador geral para todas as portas?
- Código:
public float maxSpeed;
public float jumpForce;
public Transform groundChecker;
private bool grounded = true;
private bool jumping;
private Rigidbody2D rb2d;
private Animator anim;
private SpriteRenderer sprite;
// public Transform teleportTarget;
public GameObject currentDoor;
private GameObject player;
void Awake ()
{
rb2d = GetComponent<Rigidbody2D> ();
sprite = GetComponent<SpriteRenderer> ();
anim = GetComponent<Animator> ();
}
// Use this for initialization
void Start () {
player = GameObject.FindGameObjectWithTag("Player");
}
// Update is called once per frame
void Update () {
grounded = Physics2D.OverlapCircle(groundChecker.position, 0.02f);
if (Input.GetKeyDown(KeyCode.Space) && grounded)
{
jumping = true;
}
if (Input.GetKeyDown("e"))
{
// If we have a door saved, teleport to it
if (currentDoor)
{
// NOTE: You can still have checks for distance here if you wish!
player.transform.position = currentDoor.transform.position;
}
}
}
void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "ground")
{
grounded = true;
}
// Check if this collider gameobject is a door using the Doors tag
if (coll.gameObject.tag == ("Doors"))
{
// This is a door, make this our current door
currentDoor = coll.gameObject;
}
}
void OnTriggerExit2D(Collider2D other)
{
// Check if the gameobject we're exiting a collision with is the current door
if (other.tag.Equals("Doors") && other.gameObject.Equals(currentDoor))
{
currentDoor = null;
}
}
void FixedUpdate(){
float move = Input.GetAxis("Horizontal");
anim.SetFloat("Speed", Mathf.Abs(move));
rb2d.velocity = new Vector2(move * maxSpeed, rb2d.velocity.y);
if((move> 0f && sprite.flipX) || (move < 0f && !sprite.flipX))
{
Flip();
}
if (jumping)
{
rb2d.AddForce(new Vector2(1f, jumpForce));
jumping = false;
}
anim.SetBool("jumpFall", rb2d.velocity.y != 0.1f && !grounded);
}
void Flip()
{
sprite.flipX = !sprite.flipX;
}
}
e esse é na porta
- Código:
public class Doors : MonoBehaviour
{
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag.Equals("Player"))
{
other.gameObject.GetComponent <Player> ().currentDoor = gameObject;
}
}
}
E olha aqui um video de alguns segundo do que ta acontecendo
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
Esse de verificar a distancia não parece que vai funcionarMarcosSchultz escreveu:mathhBR escreveu:No caso é o transform da checagem de distancia aqui: distance = Vector3.Distance(player.transform.position, /////teleportTarget_.transform.position);////
por serem varios objetos ele não aceita
Basta usar um for para fazer a checagem dos elementos da array, mas tipo, geralmente cada código vai em uma porta... Você quer fazer um gerenciador geral para todas as portas?
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
Aqui esta um exemplo para teleportar por distância:
Seu player só precisa ter a tag "Player", ou se preferir deixar a variável "player" publica e setar manualmente...
- Código:
public class Teleport : MonoBehaviour {
public Transform target; //Outra porta
private Transform player; //Jogador
public KeyCode key; //Tecla que aperta para teleportar
public float currentDistance; //Distancia entre a porta e o jogador
public float maxDistance; //Distancia maxima para teleportar
void Start () {
player = GameObject.FindWithTag ("Player").transform; //Pega o jogador e seta automaticamente na variavel player
}
void Update () {
if (target != null) { //Verifica se a outra porta esta linkado
currentDistance = Vector2.Distance (transform.position, player.position); //Pega a distância entre a porta e o jogador
if (currentDistance <= maxDistance) { //Verifica se a distância é menor ou igual a distância maxima.
if (Input.GetKeyDown (key)) { //Verifica se o jogador apertou a tecla de teleport
player.position = target.position; //Jogador é teleportado para a outra porta.
}
}
}
}
}
Seu player só precisa ter a tag "Player", ou se preferir deixar a variável "player" publica e setar manualmente...
rafaelllsd- ProgramadorMaster
- PONTOS : 5242
REPUTAÇÃO : 507
Idade : 24
Áreas de atuação : Unity, Audacity, Blender, Gimp, C#, JS, MySQL.
Respeito as regras :
Re: [RESOLVIDO] Teletransporte pelo cenario Unity2D
FINALMENTE CONSEGUI RESOLVER E FOI PELO METODO DA COLISÃO MESMO, OBRIGADO A QUEM TENTOU ME AJUDARrafaelllsd escreveu:Aqui esta um exemplo para teleportar por distância:
- Código:
public class Teleport : MonoBehaviour {
public Transform target; //Outra porta
private Transform player; //Jogador
public KeyCode key; //Tecla que aperta para teleportar
public float currentDistance; //Distancia entre a porta e o jogador
public float maxDistance; //Distancia maxima para teleportar
void Start () {
player = GameObject.FindWithTag ("Player").transform; //Pega o jogador e seta automaticamente na variavel player
}
void Update () {
if (target != null) { //Verifica se a outra porta esta linkado
currentDistance = Vector2.Distance (transform.position, player.position); //Pega a distância entre a porta e o jogador
if (currentDistance <= maxDistance) { //Verifica se a distância é menor ou igual a distância maxima.
if (Input.GetKeyDown (key)) { //Verifica se o jogador apertou a tecla de teleport
player.position = target.position; //Jogador é teleportado para a outra porta.
}
}
}
}
}
Seu player só precisa ter a tag "Player", ou se preferir deixar a variável "player" publica e setar manualmente...
AQUI COMO FICOU O SCRIPT PRA PORTA
- Código:
public class Doors : MonoBehaviour
{
public Transform teleportTarget;
public GameObject currentDoor;
public GameObject player;
private void Start()
{
}
// Check for collisions
void OnTriggerEnter2D(Collider2D other)
{
// Check if this collider gameobject is a door using the Doors tag
if (other.tag.Equals("Player"))
{
// This is a door, make this our current door
currentDoor = other.gameObject;
}
}
void Update()
{
if (currentDoor)
{
if (Input.GetKeyDown("e"))
{
player.transform.localPosition = teleportTarget.transform.position;
}
}
}
void OnTriggerExit2D(Collider2D other)
{
// Check if the gameobject we're exiting a collision with is the current door
if (other.tag.Equals("Player") && other.gameObject.Equals(currentDoor))
{
currentDoor = null;
}
}
}
mathhBR- Membro
- PONTOS : 2127
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Unity2D - O inimigo não para de seguir o player mesmo ele escondido
» [RESOLVIDO] Limitar visão em um cenário 2d
» [RESOLVIDO] Como tenho que desenhar o cenario 2D?
» [RESOLVIDO] Sript de pegar itens no cenario
» [RESOLVIDO] Problema com cenário infinito ou algum tipo de bug na Unity?
» [RESOLVIDO] Limitar visão em um cenário 2d
» [RESOLVIDO] Como tenho que desenhar o cenario 2D?
» [RESOLVIDO] Sript de pegar itens no cenario
» [RESOLVIDO] Problema com cenário infinito ou algum tipo de bug na Unity?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos