首页 > 解决方案 > 一个脚本更改多个 UI 图像,但它不起作用

问题描述

我在尝试编写此代码时遇到问题。

我的目标:使每个级别按钮也具有该级别的排名,但我试图从一个脚本中做到这一点。

首先,这是我设置所有内容的方式:

在此处输入图像描述

这些是每个按钮内的等级以及我在每个等级游戏对象中制作的Rankdictator脚本。

这是Rankdictator的脚本:

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

public class Rankdictator : MonoBehaviour
{
    int levelnumberrank;
    private Image thisimage;
    public Sprite rankgold;
    public Sprite ranksilver;
    public Sprite rankbronze;
    public Sprite blank;
    private Levellockcheck levellockcheck;

    public void Start()
    {

        levellockcheck = FindObjectOfType<Levellockcheck>();
        thisimage = this.GetComponent<Image>();
        levelnumberrank = PlayerPrefs.GetInt(("rankoflevel") + (levellockcheck.thisbuttonlevel));
        if(levelnumberrank == 3)
        {
            thisimage.sprite = rankgold;
        }
        else if(levelnumberrank == 2)
        {
            thisimage.sprite = ranksilver;
        }
        else if (levelnumberrank == 1)
        {
            thisimage.sprite = rankbronze;
        }
        else if (levelnumberrank == 0)
        {
            thisimage.sprite = blank;
        }
    }
}

现在问题来了。正如我所说,当有多个按钮处于活动状态时,排名不会正确显示在每个按钮上,但是,当我只有一个按钮处于活动状态时,排名会显示。这是一个例子:

在此处输入图像描述

那是我同时激活两个按钮的时候。(1级应该是满级,2级应该是低级。但它什么都没有显示)

现在只有一个按钮处于活动状态。它正确显示。

在此处输入图像描述

编辑

我已经使用 Debug.Log 来确认每个按钮上的 levelnumberrank 并且它按预期引用。

但是,当所有按钮都处于活动状态时,它仍然不会引用每个按钮的排名,只有当一个按钮处于活动状态而其他按钮处于非活动状态时才会这样做。

标签: c#unity3d

解决方案


我发现了问题:这是 levellockcheck!

在每个按钮上,都有一个带有 public int thisbuttonlevel 的 levellockcheck 脚本。

在每个 Rankdictator 上,我都像这样引用 levellockcheck:

Levellockcheck = FindObjectofType<levellockcheck>();

levelnumberrank = PlayerPrefs.GetInt(("rankoflevel") + (levellockcheck.thisbuttonlevel));

通过这样做,我从每个按钮同时引用不同的数字。因为每个按钮上的 (thisbuttonlevel) 是不同的。

我应该在 Rankdictator 上做什么:

Levellockcheck = this.GetComponentInParent<levellockcheck>();

通过这样做,我引用了按钮本身的 (thisbuttonlevel)。

现在:

在此处输入图像描述

有用!


推荐阅读