Script de Craft
2 participantes
Página 1 de 1
Script de Craft
eae galera, eu estou aprendendo c# e criei um script de craft muito simples pro meu jogo, que basicamente se o player apertar com o botão direito do mouse no Taco e nos oito pregos ele vai fazer um Taco cheio de pregos, eu fiz isso por meio de tags nos objetos e coloquei o script no player e a parte de selecionar os objetos que eu quero (pregos e o taco) não está funcionando, alguém pode me ajudar?
Script do Craft :
Script do Craft :
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class craft : MonoBehaviour {
bool mouseDentroDoObjeto;
public bool selecionadoTaco;
public bool selecionadoPrego1;
public bool selecionadoPrego2;
public bool selecionadoPrego3;
public bool selecionadoPrego4;
public bool selecionadoPrego5;
public bool selecionadoPrego6;
public bool selecionadoPrego7;
public bool selecionadoPrego8;
//
public bool TudoSelecionado;
//
public GameObject Taco, TacoEspinho;
void Start () {
mouseDentroDoObjeto = false;
}
// Update is called once per frame
void Update () {
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Taco");
selecionadoTaco = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego1");
selecionadoPrego1 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego2");
selecionadoPrego2 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego3");
selecionadoPrego3 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego4");
selecionadoPrego4 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego5");
selecionadoPrego5 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego6");
selecionadoPrego6 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego7");
selecionadoPrego7 = true;
}
}
if (mouseDentroDoObjeto == true) {
if (Input.GetMouseButtonDown (1)) {
GameObject.FindWithTag ("Prego8");
selecionadoPrego8 = true;
}
}
if (selecionadoTaco == true && selecionadoPrego1 == true && selecionadoPrego2 == true && selecionadoPrego3 == true && selecionadoPrego4 == true && selecionadoPrego5 == true && selecionadoPrego6 == true && selecionadoPrego7 == true && selecionadoPrego8 == true) {
TudoSelecionado = true;
}
if (TudoSelecionado == true) {
Taco.SetActive (false);
TacoEspinho.SetActive (true);
}
}
void OnMouseEnter(){
mouseDentroDoObjeto = true;
}
void OnMouseExit(){
mouseDentroDoObjeto = false;
}
}
leonardolopes- Avançado
- PONTOS : 1998
REPUTAÇÃO : 3
Respeito as regras :
Re: Script de Craft
É bom ver a galera tentando criar seus próprios scripts, fiz um exemplo usando a sua lógica só que deixando o código mais fácil de manter.
Apesar de ser um bom começo, nem o código original, nem a minha versão serão facilmente reaproveitáveis ou vão escalar bem num projeto maior com muitos itens pra craftar, recomendo que use isso apenas pra estudo, tente encontrar outras formas de fazer antes de levar isso pro projeto final, vai te poupar muita dor de cabeça.
Apesar de ser um bom começo, nem o código original, nem a minha versão serão facilmente reaproveitáveis ou vão escalar bem num projeto maior com muitos itens pra craftar, recomendo que use isso apenas pra estudo, tente encontrar outras formas de fazer antes de levar isso pro projeto final, vai te poupar muita dor de cabeça.
- Código:
using UnityEngine;
public class CraftTaco : MonoBehaviour
{
public Material MatSelecionado;
public GameObject[] objetosDesativar;
public GameObject objetoAtivar;
public byte pregos = 0;
public bool taco;
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Dispara um raycast na posição do mouse
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 4)){
if (hit.collider.CompareTag("pregos"))
{
pregos++;
}
else if (hit.collider.CompareTag("taco"))
{
taco = true;
}
hit.collider.gameObject.GetComponent<MeshRenderer>().material = MatSelecionado;
}
if(pregos >= 8 && taco == true)
{
Craftar();
}
}
}
public void Craftar()
{
foreach (GameObject obj in objetosDesativar){ obj.SetActive(false); }
objetoAtivar.SetActive(true);
}
}
Última edição por Fagner em Seg Jan 04, 2021 12:01 am, editado 1 vez(es)
Fagner- Moderador
- PONTOS : 4443
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Script de Craft
Cara, é exatamente isso que eu estava procurado, vou estudar o script e tentar fazer a minha versão, mas esse método funciona no meu caso? em que o inventário se abre com a troca da câmera 1 para a câmera 2, onde existe um terreno com os itens do próprio inventário e aonde ficará o sistema de Craft.
leonardolopes- Avançado
- PONTOS : 1998
REPUTAÇÃO : 3
Respeito as regras :
Re: Script de Craft
A resposta curta é "funciona".
Mas tem suas ressalvas, pois vai dar muito trabalho dependendo da quantidade de itens que você tiver.
Já parou pra pensar em como vai ser isso? Um script pra cada item a ser craftado, tá longe de ser o ideal.
O mais certo seria ter um script, de preferência, um scriptable Object no qual você informaria a "receita" de cada item e um outro script dedicado pro craft de maneira genérica, você passaria como parâmetro a receita e o sistema se encarregaria de checar se você possui todos os itens necessários, remover do inventário os itens utilizados e criar o item novo.
Percebe a diferença em ter um script só pra craftar um bastão com pregos pra algo mais genérico e abstrato?
Não especificar o que precisa diretamente no código, permite que o mesmo script seja reutilizado por todos os itens com diferentes "receitas"
Mas tem suas ressalvas, pois vai dar muito trabalho dependendo da quantidade de itens que você tiver.
Já parou pra pensar em como vai ser isso? Um script pra cada item a ser craftado, tá longe de ser o ideal.
O mais certo seria ter um script, de preferência, um scriptable Object no qual você informaria a "receita" de cada item e um outro script dedicado pro craft de maneira genérica, você passaria como parâmetro a receita e o sistema se encarregaria de checar se você possui todos os itens necessários, remover do inventário os itens utilizados e criar o item novo.
Percebe a diferença em ter um script só pra craftar um bastão com pregos pra algo mais genérico e abstrato?
Não especificar o que precisa diretamente no código, permite que o mesmo script seja reutilizado por todos os itens com diferentes "receitas"
Fagner- Moderador
- PONTOS : 4443
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Script de Craft
Eu vou tentar fazer somente um Script para todo o sistema de Craft da forma como você descreveu, mas está difícil, pois meu conhecimento sobre programação é limitado e existem muitas coisas sobre C# que ainda não sei, assisti todos os vídeos do Marcos e ainda falta coisa para aprender, mas eu vou continuar tentando que uma hora eu chego lá.
leonardolopes- Avançado
- PONTOS : 1998
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» [Ajuda]Script de craft
» erro erro e mais erro script de craft
» Programador de inventario e craft.
» Inventario e craft estilo ark
» Inventario e Sistema de Craft
» erro erro e mais erro script de craft
» Programador de inventario e craft.
» Inventario e craft estilo ark
» Inventario e Sistema de Craft
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos