Cześć
Na początku chciałem podkreślić że dopiero zaczynam naukę programowania. Chcę zadać kilka pytań aby zrozumieć pisanie kodu. Przechodzę do rzeczy.
"Bawię" się obecnie w programie Unity 3D a za język programowania wybrałem sobie c#.
1) Napisałem kod który tworzy płaski teren składający się z sześcianów o wymiarach 10 x 10. Każdy z sześcianów składa się sześciu oddzielnych obiektów (ścianek). Celowo nie skorzystałem z jednolitego modelu bryły gdyż chcę aby ścianki stykające się ze sobą stawały się przezroczyste. Każda z ścianek ma swojego collidera celowo lekko zwiększonego(o 0,01) tak aby wchodziła z kontakt z swoim sąsiadem oraz odpowiednia teksture. Mój problem polega na tym że nie wiem jak dostać się do pojedynczego obiektu. Jak wybrać collider z tej konkretnej ścianki i jak wybrać konkretne znikające ścianki. Funkcja OnTiggerEnter() jest źle napisana gdyż sprawia że znikają wszystkie ścianki, nawet te które się nie dotykają (pisałem metodą prób i błędów i już ją tak zostawiłem :D). Spójrzcie na poniższy kod:
Plik nr1:


using UnityEngine;
using System.Collections;

public class Item : MonoBehaviour
{
    public Item
       (int Ix, int Iy, int Iz,
        GameObject IquadItem_Down,
        GameObject IquadItem_Up,
        GameObject IquadItem_Side_1,
        GameObject IquadItem_Side_2,
        GameObject IquadItem_Side_3,
        GameObject IquadItem_Side_4,
        Texture2D IquadItem_middle,
        Texture2D IquadItem_up,
        Texture2D IquadItem_down)
    {
        quadItem_Down = IquadItem_Down;
        quadItem_Up = IquadItem_Up;
        quadItem_Side_1 = IquadItem_Side_1;
        quadItem_Side_2 = IquadItem_Side_2;
        quadItem_Side_3 = IquadItem_Side_3;
        quadItem_Side_4 = IquadItem_Side_4;

        quadItem_middle = IquadItem_middle;
        quadItem_up = IquadItem_up;
        quadItem_down = IquadItem_down;

    x = Ix;
    y = Iy;
    z = Iz;

        CreateBlock();
    }

    int x;
    int y;
    int z;

    public GameObject quadItem_Down;
    public GameObject quadItem_Up;
    public GameObject quadItem_Side_1;
    public GameObject quadItem_Side_2;
    public GameObject quadItem_Side_3;
    public GameObject quadItem_Side_4;

    Texture2D quadItem_middle;
    Texture2D quadItem_up;
    Texture2D quadItem_down;

    void Start()
    {

    }

    void Update () 
    {
        OnTiggerEnter(quadItem_Down.collider);

    }
    void CreateBlock()
    {
        Instantiate(quadItem_Down, new Vector3(x, y - (float)0.5, z), Quaternion.Euler(new Vector3(270, 0, 0)));
        Instantiate(quadItem_Up, new Vector3(x, y + (float)0.5, z), Quaternion.Euler(new Vector3(90, 0, 0)));
        Instantiate(quadItem_Side_1, new Vector3(x - (float)0.5, y, z), Quaternion.Euler(new Vector3(0, 90, 0)));
        Instantiate(quadItem_Side_2, new Vector3(x, y, z - (float)0.5), Quaternion.Euler(new Vector3(0, 0, 0)));
        Instantiate(quadItem_Side_3, new Vector3(x + (float)0.5, y, z), Quaternion.Euler(new Vector3(0, 270, 0)));
        Instantiate(quadItem_Side_4, new Vector3(x, y, z + (float)0.5), Quaternion.Euler(new Vector3(0, 180, 0)));
    }

    void OnTiggerEnter(Collider other)
    {
        if (other.tag == "SIDE1")
        {
            quadItem_Side_1.renderer.enabled = false;
        }
    }
}

Plik nr2:


using UnityEngine;
using System.Collections;

public partial class Place : MonoBehaviour
{
    public GameObject quadBlock_Down;
    public GameObject quadBlock_Up;
    public GameObject quadBlock_Side_1;
    public GameObject quadBlock_Side_2;
    public GameObject quadBlock_Side_3;
    public GameObject quadBlock_Side_4;

    Texture2D quadBlock_middle;
    Texture2D quadBlock_up;
    Texture2D quadBlock_down;

    void Start ()
    {
        for (int x = 0; x < 10; x++)
        {
            for (int z = 0; z < 10; z++)
            {
                Item plane = new Item(x, 0, z, quadBlock_Down, quadBlock_Up, quadBlock_Side_1, quadBlock_Side_2, quadBlock_Side_3, quadBlock_Side_4, quadBlock_middle, quadBlock_up, quadBlock_down);
            }
        }
    }

    void Update () 
    {

    }
    void loadTexture()
    {
        quadBlock_middle = Resources.Load<Texture2D>("Texture/Block/stoneBlock");
        quadBlock_up = Resources.Load<Texture2D>("Texture/Block/stoneBlock");
        quadBlock_down = Resources.Load<Texture2D>("Texture/Block/stoneBlock");
    } 
}

2) Czy macie jakieś dodatkowe wskazówki dotyczące tego kodu?

3) Ostatnie pytanie, możecie wyłożyć łopatą o co chodzi z błędem "object reference not set to an instance of an object"? Chodzi o podanie jakiegoś konkretnego przykładu, dlaczego raz obiekt/referencje działa a drugi raz nie, w czym tkwi błąd :)