Programar porta para trancar sozinha
2 participantes
Página 1 de 1
Programar porta para trancar sozinha
Alguém sabe algum script que faça a porta trancar sozinha quando passo por ela?
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
Já tem a base da porta feita? esquema de abrir, fechar, etc?
Re: Programar porta para trancar sozinha
Sim, ela já abre e fecha normalmente, falta só alguma coisa para ela fechar automaticamente quando eu chegar em algum ponto
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
Tem como postar o script dela? isto tem que ser feito a partir do script já existente
Re: Programar porta para trancar sozinha
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(AudioSource))]
public class PORTA : MonoBehaviour {
public bool EstaTrancada,PrecisaDeChave;
public AudioClip PortaNormal,PortaTrancada,SomDeChave;
public float distanciaParaAbrir = 3;
public Font Fonte;
public float VelocidadeDeGiro = 60;
public int IDdaPorta;
public static List<int> ListaDeIDs = new List<int>(); // LISTA DE CHAVES QUE O PLAYER CONTEM
private bool MovimentarPorta, EstaAberta,PodeAbrir,AvisoTrancada,temAChave;
private float CronometroDoAviso,CronometroMovimento;
private float RotacaoFechada,RotacaoAberta;
private GameObject Jogador;
void Start (){
EstaAberta = false;
AvisoTrancada = false;
temAChave = false;
RotacaoFechada = transform.eulerAngles.y;
RotacaoAberta = transform.eulerAngles.y + 90;
if (RotacaoAberta > 360) {
RotacaoAberta = transform.eulerAngles.y + 90 -360;
}
Jogador = GameObject.FindWithTag ("Player");
if (PrecisaDeChave == true) {
EstaTrancada = true;
}
}
void Update (){
// CHECAHDO SE ESTA PERTO OU NAO
if (Vector3.Distance (transform.position, Jogador.transform.position) <= distanciaParaAbrir) {
PodeAbrir = true;
} else if (Vector3.Distance (transform.position, Jogador.transform.position) > distanciaParaAbrir) {
PodeAbrir = false;
}
//CHECANDO SE ESTA TRANCADA OU NAO... SE NAO ESTIVER, PODE ABRIR
if (EstaTrancada == false) {
if(Input.GetKeyDown("e") && MovimentarPorta == true && PodeAbrir == true){
CronometroMovimento = 0;
EstaAberta = !EstaAberta;
GetComponent<AudioSource>().Stop ();
GetComponent<AudioSource>().PlayOneShot(PortaNormal);
}
else if(Input.GetKeyDown("e") && PodeAbrir == true && MovimentarPorta == false){
GetComponent<AudioSource>().PlayOneShot(PortaNormal);
MovimentarPorta = true;
}
}
// SE A PORTA ESTIVER TRANCADA
if (Input.GetKeyDown ("e") && PodeAbrir == true && EstaTrancada == true) {
//CHECA SE O PALYER TEM A CHAVE OU NAO
for(int x = 0; x < ListaDeIDs.Count; x++){
if(IDdaPorta == ListaDeIDs[x]){
temAChave = true;
}else{
temAChave = false;
}
}
// SE O PALYER TEM A CHAVE
if(temAChave == true && PrecisaDeChave == true){
EstaTrancada = false;
if(!GetComponent<AudioSource>().isPlaying){
GetComponent<AudioSource>().PlayOneShot(SomDeChave);
}
}
// SE O PALYER NAO TEM A CHAVE
else {
AvisoTrancada = true;
if(!GetComponent<AudioSource>().isPlaying){
GetComponent<AudioSource>().PlayOneShot(PortaTrancada);
}
}
}
// CRONOMETRO DO AVISO DA PORTA TRANCADA
if (AvisoTrancada == true) {
CronometroDoAviso += Time.deltaTime;
}
if (CronometroDoAviso >= 3) {
AvisoTrancada = false;
CronometroDoAviso = 0;
}
// CRONOMETRO DO MOVIMENTO DA PORTA
if (MovimentarPorta == true) {
CronometroMovimento += Time.deltaTime;
}
if(CronometroMovimento >= 2 + 75/VelocidadeDeGiro){
MovimentarPorta = false;
CronometroMovimento = 0;
EstaAberta = !EstaAberta;
}
}
void FixedUpdate (){
// MOVIMENTO DE ABRIR A PORTA
if (MovimentarPorta == true && EstaAberta == false) {
Vector3 rotacaoFinal = new Vector3(0,RotacaoAberta,0);
transform.eulerAngles = Vector3.Lerp (transform.eulerAngles,rotacaoFinal,Time.deltaTime*(VelocidadeDeGiro/50));
}
// MOVIMENTO DE FECHAR A PORTA
else if (MovimentarPorta == true && EstaAberta == true) {
Vector3 rotacaoFinal = new Vector3(0,RotacaoFechada,0);
transform.eulerAngles = Vector3.Lerp (transform.eulerAngles,rotacaoFinal,Time.deltaTime*(VelocidadeDeGiro/50));
}
}
void OnGUI (){
// AVISO SOBRE PORTA TRANCADA
GUI.skin.font = Fonte;
GUI.skin.label.fontSize = Screen.height / 20;
if (AvisoTrancada == true) {
if(PrecisaDeChave == true){
GUI.Label(new Rect(Screen.width/2-Screen.width/5,Screen.height/2-Screen.height/16,Screen.width/2.5f,Screen.height/8),"Voce precisa de uma chave");
}
else if(PrecisaDeChave == false){
GUI.Label(new Rect(Screen.width/2-Screen.width/5,Screen.height/2-Screen.height/16,Screen.width/2.5f,Screen.height/8),"Nunca ira abrir");
}
}
}
}
É o mesmo script usado na sua video aula:
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
A princípio isto deve funcionar...
Coloque em algum objeto com colisor e opção Trigger marcada...
Depois linke a porta que contem o script na variavel porta deste script que eu acabei de passar
- Código:
using UnityEngine;
using System.Collections;
public class Trancar : MonoBehaviour {
public GameObject Porta;
void OnTrigerEnter (){
Porta.GetComponent<PORTA> ().EstaTrancada = true;
Destroy (gameObject);
}
}
Coloque em algum objeto com colisor e opção Trigger marcada...
Depois linke a porta que contem o script na variavel porta deste script que eu acabei de passar
Re: Programar porta para trancar sozinha
Não consegui, quero que quando eu passe por a porta e ande alguns passos, ela tranque sozinha que só abra quando eu pegar a chave dela, mas não consegui... coloquei um gameboject com um colisor e a Trigger marcada mas não deu
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
Sim, linkei, tentei até mudar o nome da porta, mas nada aconteceu.
" />
" />
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
caso não esteja aparecendo a imagem, está aí o link
[url=][/url]
[url=][/url]
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
Tem alguma print da porta? gostaria de ver a sua aba inspector e como estão as variaveis dela
Re: Programar porta para trancar sozinha
Está ai:
" />
" />
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
Está ai o link da imagem:
http://prntscr.com/8irz4z
http://prntscr.com/8irz4z
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: Programar porta para trancar sozinha
é que você não marcou a variavel "Precisa de chave" conforme eu expliquei no vídeo...
más isto aqui já deve resolver:
Outra coisa...
reparei algumas variáveis vazias, como a fonte e os áudios...
Nâo faça isto, pois irá dar erros. Se as variáveis pedem algo, complete-as...
a única que pode ficar vazia ali é a da fonte
más isto aqui já deve resolver:
- Código:
using UnityEngine;
using System.Collections;
public class Trancar : MonoBehaviour {
public GameObject Porta;
void OnTrigerEnter (){
Porta.GetComponent<PORTA> ().PrecisaDeChave = true;
Porta.GetComponent<PORTA> ().EstaTrancada = true;
Destroy (gameObject);
}
}
Outra coisa...
reparei algumas variáveis vazias, como a fonte e os áudios...
Nâo faça isto, pois irá dar erros. Se as variáveis pedem algo, complete-as...
a única que pode ficar vazia ali é a da fonte
Re: Programar porta para trancar sozinha
Não deu ainda, fiz tudo e ela não tranca sozinha. Mas tenho um "plano B", muito obrigado pela atenção, amigo!
ismarspn- Programador
- PONTOS : 4001
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Tópicos semelhantes
» Ativar animação de porta abrindo sozinha com trigger n funciona!
» Porta com Códicos para abri-la
» Porta(ou algo do tipo) com senha para 2D
» Galera como que faz para abrir a porta do onibus???
» Quais as melhores engines para programar mobile?
» Porta com Códicos para abri-la
» Porta(ou algo do tipo) com senha para 2D
» Galera como que faz para abrir a porta do onibus???
» Quais as melhores engines para programar mobile?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos