Unity 3D [AIUTO] Clone minecraft unity 5, problema creazione blocchi

Stato
Discussione chiusa ad ulteriori risposte.

Flipp3rix

Utente Bronze
1 Agosto 2017
4
1
0
25
Ultima modifica da un moderatore:
Sto creando un clone di minecraft per imparare meglio c#
Non mi serve creare chunk...per ora mi accontento della mia griglia 10x10 fatta di cubi
Percui passo direttamente al sistema di placing/destroying dei blocchi con l'uso del raycast.
Distruggerli è semplice..è il piazzarli che mi sta scocciando parecchio! Il blocco da piazzare riconosce su quale faccia del cubo viene piazzato e viene creato nelle rispettive coordinate, ma non riesco ad evitare di spawnarmi cubi in faccia...come posso risolvere?

Script per distruzione e piazzamento dei blocchi attuale

Codice:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class trc : MonoBehaviour {

    public float xq;
    public float yq;
    public float zq;
    public float time = 0.001f;

    public GameObject pr;

    public bool coll;

    RaycastHit r;

    public void destroy()
    {
        if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out r, 5)) {

            if ((r.collider.tag == "tp") || (r.collider.tag == "bt") || (r.collider.tag == "bw") || (r.collider.tag == "fw") || (r.collider.tag == "lt") || (r.collider.tag == "rt"))
            {
                Destroy(r.transform.parent.gameObject);
            }
            else
            {
                Destroy(r.transform.gameObject);
            }
        }
    }

    void Update() {

        if (Input.GetMouseButtonDown(0))
        {
            destroy();
        }

        if (Input.GetMouseButtonDown(1))
        {
            if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out r, 5))
            {
                xq = r.collider.gameObject.transform.position.x;
                yq = r.collider.gameObject.transform.position.y;
                zq = r.collider.gameObject.transform.position.z;
                if (r.collider.isTrigger)
                {
                    if (r.collider.tag == "tp")
                    {
                            GameObject j=Instantiate(pr, new Vector3(xq, yq + 1, zq), Quaternion.identity);
                            if (coll == true)
                            {
                                Destroy(j);
                            }
                        if (coll == false)
                        {
                            Destroy(j);
                            Instantiate(pr, new Vector3(xq, yq + 1, zq), Quaternion.identity);
                        }
                    }

                    if (r.collider.tag == "bt")
                    {
                        if (coll == false)
                        {
                            Instantiate(pr, new Vector3(xq, yq, zq), Quaternion.identity);
                        }
                    }

                    if (r.collider.tag == "bw")
                    {
                        if (coll == false)
                        {
                            Instantiate(pr, new Vector3(xq, yq, zq - 1), Quaternion.identity);
                        }
                    }

                    if (r.collider.tag == "fw")
                    {
                        if (coll == false)
                        {
                            Instantiate(pr, new Vector3(xq, yq, zq), Quaternion.identity);
                        }
                    }

                    if (r.collider.tag == "lt")
                    {
                        if (coll == false)
                        {
                            Instantiate(pr, new Vector3(xq, yq, zq), Quaternion.identity);
                        }
                    }

                    if (r.collider.tag == "rt")
                    {
                        if (coll == false)
                        {
                            Instantiate(pr, new Vector3(xq + 1, yq, zq), Quaternion.identity);
                        }
                    }

                }
            }
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == ("checks"))
        {
            coll = true;
        }
    }
    private void OnTriggerExit(Collider other)
    {
        coll = false;
    }
}
 
Dovresti cambiare la logica, crea un raycast che inizia dal mouse e va a finire nel mondo, assegna una distanza massima, in modo tale da non creare cubi lontani 8km, se la condizione di Instantiate() è vera, crea un cubo sopra quello che il raycast tocca.
 
Significa che la destinazione è sbagliata, fai un Debug,Log() sulla destinazione, controlla che il vector3 è uguale a quello dove vuoi metterlo..
 
mi sono espresso male io....i cubi non è che me li spawna in testa...li spawna dove punto il raycast.. Il placying funziona perfettamente, quai come in minecraft
il problema mio è che se sto vicino ad un cubo e clicco il tasto destro me lo spawna, quando poi nel minecraft originale non dovrebbe in quanto c'è una distanza minima di un cubo per poter piazzre un blocco..
 
Prima dell'instantiate fai un semplice controllo, se la differenza tra il target e il player è un valore maggiore a 2, allora entra dell'if, altrimenti non fare nulla, spero che questo ti aiuti nel tuo progetto :D
 
Stato
Discussione chiusa ad ulteriori risposte.