Nie mogę podnieść przedmiotu do ekwipunku

Odpowiedz Nowy wątek
2019-07-15 01:48
0

Witam. Dzisiaj próbowałem zrobić sobie ekwipunek do gry w Unity3D. Taki do testów. Niestety podczas wejścia w trigger obiektu, który chcę podnieść, skrypt zwraca błąd.
Link do screenshota z errorem: https://imgur.com/QxF6VC4

Poniżej wrzucam wszystkie skrypty, które zostały wykorzystane do tworzenia tego ekwipunku.

1

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EatItem : ItemAbstract {

    public int regenerateHP = 20;

    public override bool execute(PlayerStats ps)
    {
        ps.playerHP = (ps.playerHP + regenerateHP);
        return disposable;
    }

}

2

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public abstract class ItemAbstract : MonoBehaviour {

    [Header("Zmienne do inwentarza")]
    public Texture2D itemIcon;

    public string itemName;
    public string description;
    public string type;
    public float weight;
    public float cost;
    public bool disposable;

    public Texture2D getItemIcon()
    {
        return itemIcon;
    }

    public string getName()
    {
        return itemName;
    }

    void OnTriggerEnter(Collider other)
    {
        if(other.tag.Equals("Player"))
        {
            other.GetComponent<Equipment>().SendMessage("addItem", this);
            Destroy(gameObject);
        }
    }

    public abstract bool execute(PlayerStats ps);

}

3

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Equipment : MonoBehaviour
{

    public int itemsInRow = 3;
    public int buttonWidth = 50;
    public int buttonHeight = 50;
    public int buttonMargin = 10;
    public Rect inventoryPosition = new Rect(20, 20, 0, 0);

    private List<ItemAbstract> itemsList = new List<ItemAbstract>();
    private bool openInventory;
    private PlayerStats ps;

    void Start()
    {
        openInventory = false;
        ps = gameObject.GetComponent<PlayerStats>();
        inventoryPosition = new Rect(inventoryPosition.x, inventoryPosition.y, ((itemsInRow * buttonWidth) + ((itemsInRow + 1) * buttonMargin)), ((itemsInRow * buttonHeight) + ((itemsInRow + 1) * buttonMargin)));
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.I))
        {
            openInventory = !openInventory;
        }
    }

    public void addItem(ItemAbstract item)
    {
        itemsList.Add(item);
    }

    void OnGUI()
    {
        if (openInventory)
        {
            int numerOfItems = itemsList.Count;
            int rows = Mathf.CeilToInt(numerOfItems / itemsInRow) + 1;

            GUILayout.BeginArea(inventoryPosition);
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < itemsInRow; j++)
                {
                    if ((i * itemsInRow) + j < numerOfItems)
                    {
                        if (GUI.Button(new Rect((buttonMargin + buttonMargin * j + buttonWidth * j),
                     (buttonMargin + buttonMargin * i + buttonHeight * i),
                     buttonWidth,
                         buttonHeight), itemsList[(i * itemsInRow) + j].getItemIcon()))

                        {
                            bool disposable = itemsList[(i * itemsInRow) + j].execute(ps);
                            if (disposable)
                            {
                                itemsList.RemoveAt((i * itemsInRow) + j);
                            }
                        }
                    }
                    else
                    {
                        if (GUI.Button(new Rect((buttonMargin + buttonMargin * j + buttonWidth * j), (buttonMargin + buttonMargin * i + buttonHeight * i), buttonWidth, buttonHeight), ""))
                        {
                            Debug.Log("Clicked the button!");
                        }
                    }

                }
 GUILayout.EndArea();
            }

        }
    }
}

Co może być nie tak?

edytowany 2x, ostatnio: cerrato, 2019-07-15 10:25

Pozostało 580 znaków

2019-07-15 07:08
0

Może w 2 skrypcie zamiast other.GetComponent<Equipment>().SendMessage("addItem", this); daj Equipment.addItem(this);? I skoro masz tylko jeden ekwipunek to może zmień klasę Equipment na statyczną.


Has he lost his mind? Can he see or is he blind?

Pozostało 580 znaków

2019-07-15 12:52
0
Yukiteru Gromadzki napisał(a):

Może w 2 skrypcie zamiast other.GetComponent<Equipment>().SendMessage("addItem", this); daj Equipment.addItem(this);? I skoro masz tylko jeden ekwipunek to może zmień klasę Equipment na statyczną.

Zmieniłem to co pisałeś, ale za to wyskakuje mi jakiś inny błąd. Da się to jeszcze jakoś inaczej zrobić?

edytowany 2x, ostatnio: XxMichonneXx, 2019-07-15 12:52

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0