【问题标题】:Why wont LitJSON work in build, but does work in the editor? [duplicate]为什么 LitJSON 在构建中不起作用,但在编辑器中起作用? [复制]
【发布时间】:2017-03-09 03:08:05
【问题描述】:

我在 Unity 工作,我正在尝试将 LitJSON 用于库存和能力系统以及统计信息。我完成了这项工作,这一切都通过我放入脚本中的一些函数来工作。团结起来,它工作得非常好。但是,当我为 pc 独立构建游戏时,JSON 文件中的所有数据都不起作用,并且 UI 显示空白文本。

这是我的角色统计控制函数脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using LitJson;
using System.Linq;


public class Character
{
    public string Name      { get; set; }
    public int Id           { get; set; }
    public int Strength     { get; set; }
    public int Intelligence { get; set; }
    public int Defense      { get; set; }
    public int Resistance   { get; set; }
    public int Accuracy     { get; set; }
    public int Agility      { get; set; }
    public int Speed        { get; set; }
    public int MaxAP        { get; set; }
    public int CurrentAP    { get; set; }
    public int MaxHP        { get; set; }
    public int CurrentHP    { get; set; }
    public int Affinity     { get; set; }

    public Character() {

    }
}

public class CharacterStats : MonoBehaviour
{
    public static string character1FilePath = "/Resources/character1Stats.json";
    public static string character2FilePath = "/Resources/character2Stats.json";
    public static string character3FilePath = "/Resources/character3Stats.json";
    public static string character4FilePath = "/Resources/character4Stats.json";


    public static string GetName (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Name;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Name;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Name;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Name;

        default:
            return null;

        }
    }

    public static int GetStrength (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Strength;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Strength;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Strength;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Strength;

        default:
            return 0;

        }
    }

    public static int GetIntelligence (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Intelligence;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Intelligence;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Intelligence;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Intelligence;

        default:
            return 0;

        }
    }


    public static int GetDefense (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Defense;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Defense;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Defense;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Defense;

        default:
            return 0;

        }
    }


    public static int GetResistance (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Resistance;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Resistance;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Resistance;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Resistance;

        default:
            return 0;

        }
    }


    public static int GetAccuracy (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Accuracy;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Accuracy;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Accuracy;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Accuracy;

        default:
            return 0;

        }
    }

    public static int GetAgility (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Agility;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Agility;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Agility;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Agility;

        default:
            return 0;

        }
    }

    public static int GetSpeed (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Speed;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Speed;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Speed;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Speed;

        default:
            return 0;

        }
    }

    public static int GetMaxAP (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxAP;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxAP;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxAP;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxAP;

        default:
            return 0;

        }
    }

    public static int GetCurrentAP (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentAP;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentAP;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentAP;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentAP;

        default:
            return 0;

        }
    }

    public static int GetMaxHP (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxHP;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxHP;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxHP;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.MaxHP;

        default:
            return 0;

        }
    }

    public static int GetCurrentHP (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentHP;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentHP;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentHP;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.CurrentHP;

        default:
            return 0;

        }
    }

    public static int GetAffinity (int characterID) {
        Character character = new Character ();
        string characterString;
        switch (characterID) {
        case 1:
            characterString = File.ReadAllText (Application.dataPath + character1FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Affinity;

        case 2:
            characterString = File.ReadAllText(Application.dataPath + character2FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Affinity;

        case 3:
            characterString = File.ReadAllText(Application.dataPath + character3FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Affinity;

        case 4:
            characterString = File.ReadAllText(Application.dataPath + character4FilePath);
            character = JsonMapper.ToObject<Character> (characterString);
            return character.Affinity;

        default:
            return 0;

        }
    }
}

这个脚本在整个游戏中都被使用,并且统计数据的值显示在屏幕上:

但是,这就是我实际构建它时的样子:

【问题讨论】:

  • 你把json文件放在哪里了?
  • 在assets文件夹的/Resources中
  • 这就是我认为的问题所在。这个问题与 LitJSON 无关。检查重复的问题,了解如何阅读放置在资源文件夹中的文本文件。 File.ReadAllText 不应用于此目的。

标签: json user-interface unity3d build litjson


【解决方案1】:

您可以查看您的代码。

  • 首先尝试使用 Resource.Load TextAsset ;

TextAsset

Resources.Load

  • 第二次尝试使用 JSONObject 或 Minijson 加载所有属性并在一个类中实现:

JSONobject

MiniJSON

【讨论】:

  • 我这样做了,但它并没有解决我的问题,但那是因为它首先不是 JSON 错误。
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 2018-10-27
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多