Abrir e Fechar Gavetas
3 participantes
Página 1 de 1
Abrir e Fechar Gavetas
Como faço pra abrir e fechar gavetas? Já procurei tudo na net e não acho nada que preste. Não quero fazer com animações que eu sei que daria certo, mas quero evitar ter que usá-las. Tentei com transform.position mas ela não deu certo. Ela está assumindo uma posição nada a ver. Alguma ideia?
perinaldoc- Membro
- PONTOS : 3416
REPUTAÇÃO : 9
Respeito as regras :
Re: Abrir e Fechar Gavetas
tente usar isso:
as posições são um vector3.
- Código:
transform.position = Vector3.Lerp ('posição_da_gaveta_atual', 'posição_da_gaveta_final', 'inteiro_representando_a_velocidade_de_movimento');
as posições são um vector3.
Nícolas Romário- Iniciante
- PONTOS : 3328
REPUTAÇÃO : 0
Respeito as regras :
Re: Abrir e Fechar Gavetas
Cara, depende se você quer fazer ela abrir com o movimento do Mouse ou com o apertar de uma tecla...
se for apertando uma tecla é só mecher no transform.position... más se for com o Mouse, ai o barato é loko
Estou a 2 mêses desenvolvendo um sistema de movimentar objetos estilo Amnesia... é um pouco complicado
se for apertando uma tecla é só mecher no transform.position... más se for com o Mouse, ai o barato é loko
Estou a 2 mêses desenvolvendo um sistema de movimentar objetos estilo Amnesia... é um pouco complicado
Re: Abrir e Fechar Gavetas
Opa Marcos, blz? Seguinte. Na verdade até gosto do sistema do Amnesia, mas nesse caso estou tentando do jeito simples mesmo. Até consegui aqui fazer abrir. Mas apenas uma gaveta. Quando coloco pras demais aí endoida. O grande problema é fazer com que abra apenas uma gaveta. Pensei em Raycast, mas isso fica no player. Já o script está na cômoda com 8 gavetas. Apenas box Collider com Trigger não vai resolver, pois ela não tem como saber qual gaveta abrir. Estou fazendo com transform mesmo. Sendo que não ao pressionar tecla, mas ao clicar com o botão esquerdo do mouse. Só alterei isso mesmo. Dá uma sacada no meu Script.
Funcionou pra primeira gaveta. Daí quando fui alterar o script pra suportar mais 3 gavetas aí as mesmas saíram voando da cômoda e ficaram flutuando acima do chão. Muito engraçado e estranho. Estou fazendo a movimentação baseada em transform de GameObjects na posição fechada e aberta. Eu coloquei um par pra cada. Sendo que um fica na posição zerada e outro um pouco mais a frente. Daí o script muda entre os positions. Sabe dizer o que tem de errado nele e o que posso fazer pra ele identificar qual gaveta quero abrir ao invés de abrir todas? Grato!
- Código:
using UnityEngine;
using System.Collections;
public class OpenCloseDrawer : MonoBehaviour {
private bool canOpenClose;
public GameObject drawerObject1, drawerObject2, drawerObject3, drawerObject4;
public Transform drawerPos1, drawerPos2, drawerPos3, drawerPos4, drawerPos5, drawerPos6, drawerPos7, drawerPos8, movePosition1, movePosition2, movePosition3, movePosition4;
public float smoothTime = 0.1f;
private Vector3 velocity = Vector3.zero;
public float maxSpeed = 8;
// Use this for initialization
void Start () {
movePosition1 = drawerObject1.transform;
movePosition2 = drawerObject2.transform;
movePosition3 = drawerObject3.transform;
movePosition4 = drawerObject4.transform;
}
// Update is called once per frame
void FixedUpdate () {
drawerObject1.transform.position = Vector3.SmoothDamp(drawerObject1.transform.position, movePosition1.position, ref velocity, smoothTime, maxSpeed);
drawerObject2.transform.position = Vector3.SmoothDamp(drawerObject2.transform.position, movePosition2.position, ref velocity, smoothTime, maxSpeed);
drawerObject3.transform.position = Vector3.SmoothDamp(drawerObject3.transform.position, movePosition3.position, ref velocity, smoothTime, maxSpeed);
drawerObject4.transform.position = Vector3.SmoothDamp(drawerObject4.transform.position, movePosition4.position, ref velocity, smoothTime, maxSpeed);
if(Input.GetMouseButtonDown(0) && canOpenClose){
if(Vector3.Distance(drawerObject1.transform.position, drawerPos1.position)<0.2){
movePosition1=drawerPos2;
}else{
movePosition1=drawerPos1;
}
}
if(Input.GetMouseButtonDown(0) && canOpenClose){
if(Vector3.Distance(drawerObject2.transform.position, drawerPos3.position)<0.2){
movePosition2=drawerPos4;
}else{
movePosition2=drawerPos3;
}
}
if(Input.GetMouseButtonDown(0) && canOpenClose){
if(Vector3.Distance(drawerObject3.transform.position, drawerPos5.position)<0.2){
movePosition3=drawerPos6;
}else{
movePosition3=drawerPos5;
}
}
if(Input.GetMouseButtonDown(0) && canOpenClose){
if(Vector3.Distance(drawerObject4.transform.position, drawerPos7.position)<0.2){
movePosition4=drawerPos8;
}else{
movePosition4=drawerPos7;
}
}
}
void OnTriggerEnter(Collider coll){
if (coll.gameObject.CompareTag ("Player")) {
canOpenClose = true;
}
}
void OnTriggerExit(Collider coll){
if (coll.gameObject.CompareTag ("Player")) {
canOpenClose = false;
}
}
}
Funcionou pra primeira gaveta. Daí quando fui alterar o script pra suportar mais 3 gavetas aí as mesmas saíram voando da cômoda e ficaram flutuando acima do chão. Muito engraçado e estranho. Estou fazendo a movimentação baseada em transform de GameObjects na posição fechada e aberta. Eu coloquei um par pra cada. Sendo que um fica na posição zerada e outro um pouco mais a frente. Daí o script muda entre os positions. Sabe dizer o que tem de errado nele e o que posso fazer pra ele identificar qual gaveta quero abrir ao invés de abrir todas? Grato!
perinaldoc- Membro
- PONTOS : 3416
REPUTAÇÃO : 9
Respeito as regras :
Re: Abrir e Fechar Gavetas
Marcos, alterei aqui. Estou usando 2 scripts agora. Um no player e outro nas gavetas e está funcionando!
No player utilizo raycast pra pegar pra onde estou olhando e nas gavetas faço transform.position no eixo que quero. Até aí blz! Só estou percebendo que os valores não são exatos, ou seja, quando abre a gaveta pode dar um valor e depois quando abrir novamente da outro, essa variação faz com que quando fecha elas não fiquem exatamente alinhadas. Tipo ficam meio entre abertas, muito pouco, mas não voltam pra posição original exata. Só que se ficar abrindo e fechando tem momentos que fecha certo. Estou usando essa mesma função SmoothDamp, mas o script é outro. Não estou mas usando esse. Mudei toda a lógica original. Gostaria de saber se existe algum método que possa passar os valores exatos. Amanhã passo os scripts, pois já desliguei o PC, estou postando pelo celular.
No player utilizo raycast pra pegar pra onde estou olhando e nas gavetas faço transform.position no eixo que quero. Até aí blz! Só estou percebendo que os valores não são exatos, ou seja, quando abre a gaveta pode dar um valor e depois quando abrir novamente da outro, essa variação faz com que quando fecha elas não fiquem exatamente alinhadas. Tipo ficam meio entre abertas, muito pouco, mas não voltam pra posição original exata. Só que se ficar abrindo e fechando tem momentos que fecha certo. Estou usando essa mesma função SmoothDamp, mas o script é outro. Não estou mas usando esse. Mudei toda a lógica original. Gostaria de saber se existe algum método que possa passar os valores exatos. Amanhã passo os scripts, pois já desliguei o PC, estou postando pelo celular.
perinaldoc- Membro
- PONTOS : 3416
REPUTAÇÃO : 9
Respeito as regras :
Re: Abrir e Fechar Gavetas
Marcos, consegui resolver inclusive esse problema do fechamento, agora está perfeito! Acabei de postar os scripts na sessão de tutoriais pra quem precisar. Abraço!
perinaldoc- Membro
- PONTOS : 3416
REPUTAÇÃO : 9
Respeito as regras :
Tópicos semelhantes
» ABRIR E FECHAR GAVETAS
» Script para abrir e fechar gaveta
» Como abrir portas/gavetas com click do mouse, usando raycast!
» Abrir e Fechar Porta
» Debugar erro ao fechar build do projeto
» Script para abrir e fechar gaveta
» Como abrir portas/gavetas com click do mouse, usando raycast!
» Abrir e Fechar Porta
» Debugar erro ao fechar build do projeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos