[RESOLVIDO] Colocar o código certo para abrir porta
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Colocar o código certo para abrir porta
Eu queria criar uma espécie de bloqueio para as portas do meu jogo, e essas portas só poderiam abrir quando o jogador introduzisse o código correto.
Pensei em quando o jogador se aproximasse da porta premia uma tecla e aparecia uma espécie de teclado numérico e introduzia o código.
Me poderiam ajudar com esta ideia?
Pensei em quando o jogador se aproximasse da porta premia uma tecla e aparecia uma espécie de teclado numérico e introduzia o código.
Me poderiam ajudar com esta ideia?
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
Voce desejaria fazer isto tudo via código?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
da maneira mais fácil e funcional. Mas percebeu a minha questão?
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
Sim entendi perfeitamente, bom voce tem 2 opções, voce pode fazer tudo via código ou voce pode criar um design UI ja pronto e ativa-lo quando pressionado a tecla. Quer que eu ajude a tentar fazer via código?
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
eu pensava que o ui era ativado no código e depois era tudo realizado em código.
Mas agradecia sua ajuda por favor
Mas agradecia sua ajuda por favor
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
Bom na verdade para criar uma interface UI voce precisa criar um canvas e então ir colocando os elementos nele e editando do jeito que desejar
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
tem uma terceira, ele poderia usar um modelo 3D.Pokedlg escreveu:Sim entendi perfeitamente, bom voce tem 2 opções, voce pode fazer tudo via código ou voce pode criar um design UI ja pronto e ativa-lo quando pressionado a tecla. Quer que eu ajude a tentar fazer via código?
ve 1:06
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
mas como o meu jogo é em 3 pessoa não queria estar a fazer animação do player a estar a pressionar as teclas, preferia que aparecesse tipo algo na tela, tipo vindo do lado, e ai estariam as teclas. Bastava só criar no teclado do PC e as números apareciam nessa tela. Uma coisa desse género
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
Demorou kk, mas finalmente terminei.
Na sua porta adicione um BoxCollider e ative o IsTrigger e aumente o size dele para ficar um pouco maior que a porta, deixe o Size X no 6.
Se sua porta irá abrir com uma animação, adicione um animation e desative o PlayAutomatically e adicione a animação, o AnimationClip da porta abrindo ao Animation;
Crie um script com o nome Password e adicione a porta.
Resultado:
Na sua porta adicione um BoxCollider e ative o IsTrigger e aumente o size dele para ficar um pouco maior que a porta, deixe o Size X no 6.
Se sua porta irá abrir com uma animação, adicione um animation e desative o PlayAutomatically e adicione a animação, o AnimationClip da porta abrindo ao Animation;
Crie um script com o nome Password e adicione a porta.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(BoxCollider))]
public class Password : MonoBehaviour
{
[Header("Background")]
[Space(5)]
[Header("Numeric KeyBoard")]
public Sprite imageBackground;
public Color backgroundColor = Color.gray;
[Header("Buttons")]
[Space(5)]
public Sprite imageButtons;
public Color buttonColor = Color.red;
public Font font;
public int fontSize = 48;
public Color colorText = Color.white;
private Button[] numbersButtons = new Button[12];
[Header("Input Field")]
[Space(5)]
public Sprite imageInput;
public Color inputColor = Color.white;
public Font inputFont;
public int inputFontSize = 48;
public string placeholderText = "...";
public Color inputColorText = Color.black;
public bool bold = false;
bool enterCode, drawPressE = false;
int quantify = 0;
string code;
int spaceBtns = 123;
void Start()
{
font = font == null ? Resources.GetBuiltinResource<Font>("Arial.ttf") : font;
inputFont = inputFont == null ? Resources.GetBuiltinResource<Font>("Arial.ttf") : inputFont;
for(int i =0;i<5;i++)
{
code += Random.Range(0,10);
}
Debug.Log($"<color=green>{code}</color>");
}
void Update()
{
if(enterCode && Input.GetKeyDown(KeyCode.E))
{
ShowNumericKeyboard();
}
else if(enterCode == false){
quantify = 0;
DestroyImmediate(GameObject.Find("Canvas"));
}
}
//CRIA O CANVAS
public GameObject GenerateCanvas()
{
GameObject newCanvas = new GameObject("Canvas");
Canvas c = newCanvas.AddComponent<Canvas>();
c.renderMode = RenderMode.ScreenSpaceOverlay;
newCanvas.AddComponent<CanvasScaler>();
newCanvas.AddComponent<GraphicRaycaster>();
return newCanvas;
}
void ShowNumericKeyboard()
{
if(GameObject.FindObjectOfType<Canvas>())
{
quantify++;
}
if(quantify <= 0)
{
drawPressE = false;
Cursor.lockState = CursorLockMode.None;
InterfaceUINumericKeyboard();
}
}
void InterfaceUINumericKeyboard()
{
// GET CANVAS
GameObject canvas = GenerateCanvas();
// BACKGROUND
GameObject numericKeyboard = new GameObject("NumericKeyboard");
numericKeyboard.AddComponent<CanvasRenderer>();
Image img = numericKeyboard.AddComponent<Image>();
img.color = backgroundColor;
img.sprite = imageBackground ?? null;
img.type = Image.Type.Sliced;
img.rectTransform.sizeDelta = new Vector2(518,677);
numericKeyboard.transform.SetParent(canvas.transform, false);
//INPUT
GameObject inputField = new GameObject("EnterCode");
inputField.transform.position = new Vector2(0,235);
inputField.AddComponent<CanvasRenderer>();
Image imgInpt = inputField.AddComponent<Image>();
imgInpt.color = inputColor;
imgInpt.rectTransform.sizeDelta = new Vector2(350,100);
imgInpt.sprite = imageInput ?? null;
imgInpt.type = Image.Type.Sliced;
GameObject placeHolder = new GameObject("Placeholder");
placeHolder.transform.SetParent(inputField.transform,false);
Text inputPlaceholder = placeHolder.AddComponent<Text>();
inputPlaceholder.color = Color.gray;
inputPlaceholder.font = inputFont;
inputPlaceholder.fontSize = inputFontSize;
inputPlaceholder.fontStyle = FontStyle.Italic;
inputPlaceholder.alignment = TextAnchor.MiddleRight;
inputPlaceholder.rectTransform.sizeDelta = imgInpt.rectTransform.sizeDelta;
inputPlaceholder.text = placeholderText;;
GameObject textCode = new GameObject("Text");
textCode.transform.SetParent(inputField.transform,false);
textCode.AddComponent<CanvasRenderer>();
Text textInput = textCode.AddComponent<Text>();
textInput.font = inputFont;
textInput.fontSize = inputFontSize;
textInput.color = inputColorText;
textInput.alignment = TextAnchor.MiddleRight;
textInput.supportRichText = false;
textInput.fontStyle = bold ? FontStyle.Bold : FontStyle.Normal;
textInput.rectTransform.sizeDelta = imgInpt.rectTransform.sizeDelta;
InputField enterCode = inputField.AddComponent<InputField>();
enterCode.textComponent = textInput;
enterCode.readOnly = true;
enterCode.placeholder = inputPlaceholder;
enterCode.characterLimit = code.Length;
inputField.transform.SetParent(numericKeyboard.transform,false);
// BUTTONS
for(int i =0;i<numbersButtons.Length;i++)
{
GameObject numberBtn = new GameObject("Number "+(i));
numberBtn.transform.position = new Vector2(-spaceBtns,100);
numberBtn.AddComponent<CanvasRenderer>();
Image imgBtn = numberBtn.AddComponent<Image>();
imgBtn.color = buttonColor;
imgBtn.sprite = imageButtons ?? null;
imgBtn.type = Image.Type.Sliced;
GameObject textNumber = new GameObject("Text");
textNumber.transform.SetParent(numberBtn.transform,false);
textNumber.AddComponent<CanvasRenderer>();
Text textBtn = textNumber.AddComponent<Text>();
textBtn.text = i.ToString();
textBtn.color = colorText;
textBtn.font = font;
textBtn.fontSize = fontSize;
textBtn.alignment = TextAnchor.MiddleCenter;
Button btn = numberBtn.AddComponent<Button>();
imgBtn.rectTransform.sizeDelta = new Vector2(85,85);
numbersButtons[i] = btn;
int index = i;
btn.onClick = new Button.ButtonClickedEvent();
btn.onClick.AddListener(() => EnterCode(index,enterCode));
numberBtn.transform.SetParent(numericKeyboard.transform,false);
}
for(int x = 2; x<4;x++)
{
if(numbersButtons[x] != null)
{
Vector2 pos = numbersButtons[x-1].transform.position;
pos.x += spaceBtns;
numbersButtons[x].transform.position = pos;
}
}
for(int x = 4; x<7;x++)
{
if(numbersButtons[x] != null)
{
Vector2 pos = numbersButtons[x-1].transform.position;
pos.x = numbersButtons[x-3].transform.position.x;
pos.x -= spaceBtns;
pos.y = numbersButtons[x-3].transform.position.y;
pos.y -= spaceBtns;
pos.x += spaceBtns;
numbersButtons[x].transform.position = pos;
}
}
for(int x = 7; x<10;x++)
{
if(numbersButtons[x] != null)
{
Vector2 pos = numbersButtons[x-1].transform.position;
pos.x = numbersButtons[x-3].transform.position.x;
pos.x -= spaceBtns;
pos.y = numbersButtons[x-3].transform.position.y;
pos.y -= spaceBtns;
pos.x += spaceBtns;
numbersButtons[x].transform.position = pos;
}
}
for(int x = 10; x<12;x++)
{
if(numbersButtons[x] != null)
{
Vector2 pos = numbersButtons[x-1].transform.position;
pos.x = numbersButtons[x-3].transform.position.x;
pos.x -= spaceBtns;
pos.y = numbersButtons[x-3].transform.position.y;
pos.y -= spaceBtns;
pos.x += spaceBtns*2;
numbersButtons[x].transform.position = pos;
}
}
numbersButtons[0].transform.position = numbersButtons[10].transform.position;
Vector2 p = numbersButtons[0].transform.position;
p.x -= spaceBtns;
numbersButtons[10].transform.position = p;
cancelAndConfirmButton(numbersButtons[10],numbersButtons[11], enterCode);
}
void EnterCode(int index,InputField inputField)
{
inputField.text += numbersButtons[index].transform.GetChild(0).GetComponent<Text>().text;
}
void cancelAndConfirmButton(Button cancel, Button confirm, InputField inputField)
{
// CANCEL BUTTON
cancel.image.color = Color.red;
cancel.transform.GetChild(0).GetComponent<Text>().text = "X";
cancel.onClick = new Button.ButtonClickedEvent();
cancel.onClick.AddListener(() => Cancel(inputField));
// CONFIRM BUTTON
confirm.image.color = Color.green;
confirm.transform.GetChild(0).GetComponent<Text>().text = "\u2714";
confirm.onClick = new Button.ButtonClickedEvent();
confirm.onClick.AddListener(() => Verify(inputField));
}
public void Cancel(InputField inputField)
{
inputField.text = "";
ColorBlock cb = inputField.colors;
cb.normalColor = Color.white;
inputField.colors = cb;
}
public void Verify(InputField inputField)
{
bool correct = inputField.text == code ? true:false;
if(correct)
{
ColorBlock cb = inputField.colors;
cb.normalColor = Color.green;
inputField.colors = cb;
Destroy(GameObject.Find("Canvas"),2);
OpenDoor();
Destroy(GetComponent<Password>());
}
else{
ColorBlock cb = inputField.colors;
cb.normalColor = Color.red;
inputField.colors = cb;
}
}
void OpenDoor()
{
//CRIA DA SUA FORMA COMO A PORTA ABRIRÁ EU CRIEI UMA ANIMAÇÃO
Animation anim = GetComponent<Animation>();
anim.Play();
}
void OnTriggerEnter(Collider other)
{
enterCode = true;
drawPressE = true;
}
void OnTriggerExit(Collider other) {
enterCode = false;
drawPressE = false;
}
void OnGUI()
{
if(drawPressE){
GUIStyle style = new GUIStyle();
style.fontSize = 24;
style.normal.textColor = Color.white;
GUI.Label(new Rect(Screen.width/2 - Screen.width/8 ,Screen.height/2,500,60),"Press 'E' to Enter Code",style);
}
}
}
Resultado:
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
né que ficou grande mesmo... E ele pula menos linhas do que eu
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
posso fazer animação da porta assim? https://www.youtube.com/watch?v=tJiO4cvsHAo
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Re: [RESOLVIDO] Colocar o código certo para abrir porta
Claro, voce pode usar o Animator ou o Animation, no seu caso eu recomendo o Animation, pois é uma animação que irá ser executada apenas um vez, no video ele utilizou o animator, que não era tão necessário assim, porque o animator é utilizado para fazer animações mais avançadas. Se voce usar o animation, igual eu fiz, voce irá ter que criar a aimação, desativar o loopTime e ativaar o Legacy, e no GameObject porta adicionar o component animation, colocar a animação então no animatioClip e desativar o PlayAutomatcally e no script fazer o seguinte.
Porem sim, voce pode utilizar o animator igual ao video, voce teria que adicionar o animator da porta na porta ai nessa void ficaria assim:
- Código:
OpenDoor()
{
Animation anim = GetComponent<Animation>();
anim.Play();
}
Porem sim, voce pode utilizar o animator igual ao video, voce teria que adicionar o animator da porta na porta ai nessa void ficaria assim:
- Código:
public Animator anim; //crie uma variavel animator e coloque o animator da porta
...
OpenDoor()
{
anim.Play("NomeDaSuaAnimaçao",0,0f);
}
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Joana- Avançado
- PONTOS : 1640
REPUTAÇÃO : 16
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO]Software para abrir portas para o Unity
» [RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
» [RESOLVIDO] Sistema de chaves para abrir portas
» [RESOLVIDO] Animação de abrir/fechar porta mais complexa
» [RESOLVIDO] Como faço para colocar modo de 'Criação de Personagem'?
» [RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
» [RESOLVIDO] Sistema de chaves para abrir portas
» [RESOLVIDO] Animação de abrir/fechar porta mais complexa
» [RESOLVIDO] Como faço para colocar modo de 'Criação de Personagem'?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos