我是 C# 的初学者,甚至是 Unity 的初学者。我试图在这里寻找很多东西,但没有找到解决问题的东西。这似乎是一个超级简单的线性搜索,但它不适用于 iOS 和 Android。
当我单击顶部的播放按钮时,它仅适用于我的 Mac。我一点头绪都没有。仅供参考,数组长度为 119。
我有一个JSON,结构如下:
{
"Items": [
{
"name": "Hydrogen",
"symbol": "H",
"boil": 231
},
{
"name": "Sasdsad",
"symbol": "S",
"boil": 213
}
]
}
我已经使用 C# 类对其进行了解析,
public class ChemElements {
public string name;
public float boil;
public string symbol;
}
然后在 start() 方法中,我将它放在一个名为 x 的数组中:
ChemElements[] x = null;
void start(){
path = Application.streamingAssetsPath + "/periodic.json";
jsonstring = File.ReadAllText(path);
x = JsonHelper.FromJson<ChemElements>(jsonstring);
}
JsonHelper 如下,它只是一个反序列化 JSON 数组的辅助类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class JsonHelper
{
public static T[] FromJson<T>(string json)
{
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
return wrapper.Items;
}
public static string ToJson<T>(T[] array)
{
Wrapper<T> wrapper = new Wrapper<T>();
wrapper.Items = array;
return JsonUtility.ToJson(wrapper);
}
public static string ToJson<T>(T[] array, bool prettyPrint)
{
Wrapper<T> wrapper = new Wrapper<T>();
wrapper.Items = array;
return JsonUtility.ToJson(wrapper, prettyPrint);
}
[System.Serializable]
private class Wrapper<T>
{
public T[] Items;
}
}
我想要做的是通过线性搜索(一个非常简单的)通过将TextMeshPro文本与x(数组)的符号属性匹配来搜索ChemElements []的数组x。如果找到符号,我想为 ElPreview 的 alpha 设置一个新值
public void eleClicked(){
var eleBtn = GameObject.Find(EventSystem.current.currentSelectedGameObject.name);
for(int i = 0; i < x.Length; i++){
if(x[i].symbol == eleBtn.GetComponentInChildren<TMP_Text>().text){
ElPreview.canvasRenderer.SetAlpha(1f);
}
}
}
eleClicked() 是一个 onclick 函数。
正如我之前所说,在统一中,它按预期运行。它将 alpha 值更改为 1,使其显示(以前为 0)。
而在 iOS 和 Android 上却没有。我假设的 alpha 值仍然是 0,因为它仍然是透明的。
我试图删除线性搜索,只更改 alpha 值,它适用于 iOS 和 Android,因此我知道问题出在线性搜索代码中。
非常感谢!