Carregamento de caixas
3 participantes
Página 1 de 1
Carregamento de caixas
Como faço para fazer o jogador carregar caixas, eu coloquei para toda vez q eu estiver no campo e apertar "x" eu carregar a caixa mas acontece q eu pego outras caixas juntos e eu queor que pegue uma por vez, tentei colocar o script no player mas eu tinha q criar muitas variáveis e isso me gerou mt dor de cabeça, estou começando agora se alguem poder me ajudar agradeço!
- Código:
//CÓDIGO FORMATADO
public class SistemaDeCaixas: MonoBehaviour
{
public GameObject scriptDaCaixa;
public bool carregarCaixas;
public GameObject interacao;
public GameObject caixa;
public GameObject caixaAberta;
public Transform braco;
public float distancia;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
carregarCaixas = scriptDaCaixa.GetComponent<Caixa>().estaCarregando;
distancia = Vector3.Distance(braco.position, caixa.transform.position);
}
public void OnTriggerStay2D(Collider2D hit)
{
if (hit.gameObject.tag == "Player")
{
interacao.SetActive(true);
if (Input.GetKey(KeyCode.Z))
{
caixaAberta.transform.position = new Vector3(caixa.transform.position.x, caixa.transform.position.y);
caixaAberta.SetActive(true);
caixa.SetActive(false);
}
if (Input.GetKey(KeyCode.X) && carregarCaixas == false)
{
caixaAberta.SetActive(false);
caixa.transform.position = braco.position;
}
if (distancia == 0) {
carregarCaixas = true;
} else {
carregarCaixas = false;
}
}
}
}
Última edição por Fagner em Dom maio 23, 2021 2:22 pm, editado 1 vez(es) (Motivo da edição : Código Formatado, cortesia do Pokedlg)
Kdu- Iniciante
- PONTOS : 1288
REPUTAÇÃO : 2
Respeito as regras :
Re: Carregamento de caixas
- Código Formatado:
- Código:
//CÓDIGO FORMATADO
public class SistemaDeCaixas: MonoBehaviour
{
public GameObject scriptDaCaixa;
public bool carregarCaixas;
public GameObject interacao;
public GameObject caixa;
public GameObject caixaAberta;
public Transform braco;
public float distancia;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
carregarCaixas = scriptDaCaixa.GetComponent<Caixa>().estaCarregando;
distancia = Vector3.Distance(braco.position, caixa.transform.position);
}
public void OnTriggerStay2D(Collider2D hit)
{
if (hit.gameObject.tag == "Player")
{
interacao.SetActive(true);
if (Input.GetKey(KeyCode.Z))
{
caixaAberta.transform.position = new Vector3(caixa.transform.position.x, caixa.transform.position.y);
caixaAberta.SetActive(true);
caixa.SetActive(false);
}
if (Input.GetKey(KeyCode.X) && carregarCaixas == false)
{
caixaAberta.SetActive(false);
caixa.transform.position = braco.position;
}
if (distancia == 0) {
carregarCaixas = true;
} else {
carregarCaixas = false;
}
}
}
}
Pokedlg- ProgramadorMaster
- PONTOS : 2337
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: Carregamento de caixas
Pokedlg escreveu:O que acontece exatamente? Quando voce aperta "x", ele pega todas caixas que estão na cena? Ou ele pega uma e depois quando voce aperta "x" denovo ele pega outra?
- Código Formatado:
- Código:
//CÓDIGO FORMATADO
public class SistemaDeCaixas: MonoBehaviour
{
public GameObject scriptDaCaixa;
public bool carregarCaixas;
public GameObject interacao;
public GameObject caixa;
public GameObject caixaAberta;
public Transform braco;
public float distancia;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
carregarCaixas = scriptDaCaixa.GetComponent<Caixa>().estaCarregando;
distancia = Vector3.Distance(braco.position, caixa.transform.position);
}
public void OnTriggerStay2D(Collider2D hit)
{
if (hit.gameObject.tag == "Player")
{
interacao.SetActive(true);
if (Input.GetKey(KeyCode.Z))
{
caixaAberta.transform.position = new Vector3(caixa.transform.position.x, caixa.transform.position.y);
caixaAberta.SetActive(true);
caixa.SetActive(false);
}
if (Input.GetKey(KeyCode.X) && carregarCaixas == false)
{
caixaAberta.SetActive(false);
caixa.transform.position = braco.position;
}
if (distancia == 0) {
carregarCaixas = true;
} else {
carregarCaixas = false;
}
}
}
}
ele pega outra quando eu aperto x
Kdu- Iniciante
- PONTOS : 1288
REPUTAÇÃO : 2
Respeito as regras :
Re: Carregamento de caixas
Desculpe demorar, estava tentando resolver problemas com projetos da Unity...
Voce colocou este script na caixa certo?
Voce colocou este script na caixa certo?
Pokedlg- ProgramadorMaster
- PONTOS : 2337
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: Carregamento de caixas
sim mas ela puxava uma variavel do script do player
Kdu- Iniciante
- PONTOS : 1288
REPUTAÇÃO : 2
Respeito as regras :
Re: Carregamento de caixas
Voce poderia adicionar todas suas caixas a uma array e identificar se possui alguma ocupada nos braços e se possuir as outras nao podem mudar de posição, mas isto é mais simples de resolver e não precisa fazer todo este procedimento.
A forma mais simples de resolver, apenas deixe sua float distancia como static.
Troque:
Por:
Acontece que o static meio que relaciona entre os scripts e todos vao possuir por exemplo a distancia 0 ao apertar "x", mas na verdade não estão.
A forma mais simples de resolver, apenas deixe sua float distancia como static.
Troque:
- Código:
public float distancia;
Por:
- Código:
public static float distancia;
Acontece que o static meio que relaciona entre os scripts e todos vao possuir por exemplo a distancia 0 ao apertar "x", mas na verdade não estão.
Pokedlg- ProgramadorMaster
- PONTOS : 2337
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: Carregamento de caixas
o que imaginei foi, fazer uma contagem, como vc quer que carregue apenas um, crie uma variavel int e toda vez que pegar uma caixa vc aumenta 1 e verifica se a variavel é maior do que 1 se for maior do 1 não deixa pegar a caixa.Kdu escreveu:Como faço para fazer o jogador carregar caixas, eu coloquei para toda vez q eu estiver no campo e apertar "x" eu carregar a caixa mas acontece q eu pego outras caixas juntos e eu queor que pegue uma por vez, tentei colocar o script no player mas eu tinha q criar muitas variáveis e isso me gerou mt dor de cabeça, estou começando agora se alguem poder me ajudar agradeço!
- Código:
//CÓDIGO FORMATADO
public class SistemaDeCaixas: MonoBehaviour
{
public GameObject scriptDaCaixa;
public bool carregarCaixas;
public GameObject interacao;
public GameObject caixa;
public GameObject caixaAberta;
public Transform braco;
public float distancia;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
carregarCaixas = scriptDaCaixa.GetComponent<Caixa>().estaCarregando;
distancia = Vector3.Distance(braco.position, caixa.transform.position);
}
public void OnTriggerStay2D(Collider2D hit)
{
if (hit.gameObject.tag == "Player")
{
interacao.SetActive(true);
if (Input.GetKey(KeyCode.Z))
{
caixaAberta.transform.position = new Vector3(caixa.transform.position.x, caixa.transform.position.y);
caixaAberta.SetActive(true);
caixa.SetActive(false);
}
if (Input.GetKey(KeyCode.X) && carregarCaixas == false)
{
caixaAberta.SetActive(false);
caixa.transform.position = braco.position;
}
if (distancia == 0) {
carregarCaixas = true;
} else {
carregarCaixas = false;
}
}
}
}
diegopds- Mestre
- PONTOS : 3420
REPUTAÇÃO : 52
Idade : 26
Respeito as regras :
Re: Carregamento de caixas
modifiquei o codigo no maximo que deu mas n consegui
esse é o codigo do player
esse aqui é o codigo da caixa
esse é o codigo do player
- Código:
[size=17]estouCarregando = Caixa.caixaAberta;[/size]
esse aqui é o codigo da caixa
- Código:
[size=17]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Caixa : MonoBehaviour
{
public bool caixaCarregada;
public GameObject interacao;
public GameObject braco;
public GameObject interacaoCaixaAberta;
public SpriteRenderer renderSprite;
public Sprite _outroSprite;
public static bool caixaAberta;
public Collider2D _collider;
// Start is called before the first frame update
void Start()
{
caixaAberta = false;
}
// Update is called once per frame
void Update()
{
caixaCarregada = Jogador.estouCarregando;
_collider = GetComponent<Collider2D>();
renderSprite = GetComponent<SpriteRenderer>();
}
private void OnTriggerStay2D(Collider2D other) {
if(other.gameObject.tag == "Player"){
if(caixaAberta == false){
interacao.SetActive(true);
if(Input.GetKey(KeyCode.X) && caixaCarregada == false){
_collider.enabled = false;
transform.position = braco.transform.position;
interacao.SetActive(false);
caixaCarregada = true;
}
if(Input.GetKeyUp(KeyCode.X)){
caixaCarregada = false;
_collider.enabled = true;
}
if(Input.GetKey(KeyCode.Z) && caixaCarregada == false){
interacao.SetActive(false);
renderSprite.sprite = _outroSprite;
caixaAberta = true;
}
}
if(caixaAberta == true){
interacao.SetActive(false);
interacaoCaixaAberta.SetActive(true);
if(Input.GetKey(KeyCode.X) && caixaCarregada == false){
transform.position = braco.transform.position;
interacaoCaixaAberta.SetActive(false);
}
}
}
}
}
[/size]
Kdu- Iniciante
- PONTOS : 1288
REPUTAÇÃO : 2
Respeito as regras :
Re: Carregamento de caixas
Mas e o script anterior "SistemaDeCaixas"? Voce excluiu ele?
Pokedlg- ProgramadorMaster
- PONTOS : 2337
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: Carregamento de caixas
sim, eu refiz o script e tals
Kdu- Iniciante
- PONTOS : 1288
REPUTAÇÃO : 2
Respeito as regras :
Re: Carregamento de caixas
Tente deixar seu script do player com apenas uma variavel bool static:
E deixe seu script da Caixa assim:
- Código:
public static bool estouCarregando;
E deixe seu script da Caixa assim:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Caixa : MonoBehaviour
{
public GameObject interacao;
public GameObject braco;
public GameObject interacaoCaixaAberta;
public SpriteRenderer renderSprite;
public Sprite _outroSprite;
public static bool caixaAberta;
public Collider2D _collider;
// Start is called before the first frame update
void Start()
{
caixaAberta = false;
}
// Update is called once per frame
void Update()
{
_collider = GetComponent<Collider2D>();
renderSprite = GetComponent<SpriteRenderer>();
}
private void OnTriggerStay2D(Collider2D other) {
if(other.gameObject.tag == "Player"){
if(caixaAberta == false){
interacao.SetActive(true);
if(Input.GetKey(KeyCode.X) && Jogador.estouCarregando == false){
_collider.enabled = false;
transform.position = braco.transform.position;
interacao.SetActive(false);
Jogador.estouCarregando = true;
}
if(Input.GetKeyUp(KeyCode.X)){
Jogador.estouCarregando = false;
_collider.enabled = true;
}
if(Input.GetKey(KeyCode.Z) && Jogador.estouCarregando == false){
interacao.SetActive(false);
renderSprite.sprite = _outroSprite;
caixaAberta = true;
}
}
if(caixaAberta == true){
interacao.SetActive(false);
interacaoCaixaAberta.SetActive(true);
if(Input.GetKey(KeyCode.X) && Jogador.estouCarregando == false){
transform.position = braco.transform.position;
interacaoCaixaAberta.SetActive(false);
Jogador.estouCarregando = true;
}
}
}
}
}
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» Fazer o player abrir caixas
» Empurrar e puxar caixas com animação POR FAVOR.
» [Ajuda] Personagem morrer ao ser apertado por caixas
» Sobre Som (Ouvir som do sistema , duas caixas de som ... )
» (DUVIDA) Empurrar caixas estilo Resident Evil
» Empurrar e puxar caixas com animação POR FAVOR.
» [Ajuda] Personagem morrer ao ser apertado por caixas
» Sobre Som (Ouvir som do sistema , duas caixas de som ... )
» (DUVIDA) Empurrar caixas estilo Resident Evil
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos