首页 > 解决方案 > UI元素在游戏开始时不断升级

问题描述

对开发很新,所以请原谅任何明显的错误。

我目前正在尝试为我的游戏建立一个库存系统,但物品槽会在游戏开始时不断升级。预制件以缩放开始:x=1,y=1,z=1;在游戏开始时,它膨胀为:x=53.1,y=53.1,z=53.1;

这是预制件的比例:这里
是游戏开始时预制件的比例:这里

这是更新项目的脚本:

using UnityEngine;
using UnityEngine.UI;

public class UIItem : MonoBehaviour
{
public Item item;
private Image spriteImage;

private void Awake()
{
    spriteImage = GetComponent<Image>();
    UpdateItem(null);
}

public void UpdateItem(Item item)
{
    this.item = item;
    if (this.item != null)
    {
        spriteImage.color = Color.white;
        spriteImage.sprite = this.item.icon;
    }
    else
    {
        spriteImage.color = Color.clear;
    }
}
}

这是用于更新插槽并将项目添加到库存的脚本:

using System.Collections.Generic;
using UnityEngine;

public class UIInventory : MonoBehaviour
{
public List<UIItem> uIItems = new List<UIItem>();
public GameObject slotPrefab;
public Transform slotPanel;
public int numberOfSlots = 16;

private void Awake()
{
    for (int i = 0; i < numberOfSlots; i++)
    {
        GameObject instance = Instantiate(slotPrefab);
        instance.transform.SetParent(slotPanel);
        uIItems.Add(instance.GetComponentInChildren<UIItem>());
    }
}

public void UpdateSlot(int slot, Item item)
{
    uIItems[slot].UpdateItem(item);
}

public void AddNewItem(Item item)
{
    UpdateSlot(uIItems.FindIndex(i => i.item == null), item);
}

public void RemoveItem(Item item)
{
    UpdateSlot(uIItems.FindIndex(i => i.item == item), null);
}
}

这是清单脚本本身:

using System.Collections.Generic;
using UnityEngine;

public class Inventory : MonoBehaviour
{
public List<Item> characterItems = new List<Item>();
public ItemDatabase itemDatabase;
public UIInventory inventoryUI;

private void Start()
{
    GiveItem(1);
    GiveItem("Clue 5");
    RemoveItem(1);
}
public void GiveItem(int id)
{
    Item itemToAdd = itemDatabase.GetItem(id);
    characterItems.Add(itemToAdd);
    inventoryUI.AddNewItem(itemToAdd);
    Debug.Log("Added item:" + itemToAdd.name);
}
public void GiveItem(string itemName)
{
    Item itemToAdd = itemDatabase.GetItem(itemName);
    characterItems.Add(itemToAdd);
    inventoryUI.AddNewItem(itemToAdd);
    Debug.Log("Added item:" + itemToAdd.name);
}

public Item CheckForItem(int id)
{
    return characterItems.Find(item => item.id == id);
}

public void RemoveItem(int id)
{
    Item item = CheckForItem(id);
    if (item != null)
    {
        characterItems.Remove(item);
        inventoryUI.RemoveItem(item);
        Debug.Log("Item removed:" + item.name);
    }
}
}

在过去的四个小时里,我一直在对此进行修补,但似乎没有任何效果。我已经尝试过 Aspect Ratio Fitter,它只会让它变得更多。如果需要,我可以尝试进一步解释。

如果有人可以提供帮助,将不胜感激。

标签: c#unity3duser-interfaceinventory

解决方案


推荐阅读