如何从 Unity3D 的预制件文件中读取数据?



所以,我正试图为在线Unity游戏创建一个测试应用程序,但要完成我需要它做的事情,我必须读取位于.prob文件中的十六进制偏移量中的数据。然后,我将从数据加载服务器端的预制件。用于客户端的反冲突破解。

我必须读取unityVer、localScale、localPosition、localSize、对撞机大小等数据。。。等

编辑:我必须在一个简单的控制台应用程序上制作它,而不是在Unity中。

我的无效代码:

try {
            string[] prefabFiles = Directory.GetFiles(Path.Combine(Environment.CurrentDirectory, "data\prefabs\"));
            foreach (var prefab in prefabFiles) {
                if (prefab != null && prefab.Split('.')[1] == "prefab") {
                    try {
                        using (var reader = new BinaryReader(new FileStream(prefab, FileMode.Open, FileAccess.Read))) {
                            FileInfo info = new FileInfo(prefab);
                            Console.WriteLine("Analyzing File : " + info.Name);
                            reader.BaseStream.Position = 0xA;
                            //string unityVer = reader...
                            //float localPositionX = reader...
                            //float localPositionY = reader...
                            //float localPositionZ = reader...
                            //float localScaleX = reader...
                            //float localScaleY = reader...
                            //float localScaleZ = reader...
                            //float colliderRadius = reader...
                        }
                        Console.WriteLine("File parse success.");
                    } catch { Console.WriteLine("Parse error in the data file."); }
                }
            }
        } catch (Exception e_Ex) {
            Console.WriteLine(e_Ex.ToString());
        }

我的前言的十六进制树:

十六进制树图像

我是读写位于十六进制数据位置的数据的新手,所以任何帮助都会很棒!

部分答案是将资产保存为YAML文本文件,而不是二进制文件。这种格式是人类可读的,这使得它更容易解码。在项目设置->编辑器下,有资产序列化,应设置为强制文本。当然,所有现有的资产都将被重新导入,现有的构建将不得不重新部署。

我认为你太努力了,或者我误解了你的观点。

当你的项目中引用了一个预制件时,Unity会创建一个它的实例,它不会显示在场景中,而是保留在内部。然后当你使用Instantiate时,它会复制所有信息和数据。

这意味着你可以像在任何游戏对象上访问信息一样访问预制板上的信息:

public GameObject myPrefab;
void Start(){
    Debug.Log(myPrefab.transform.position);
    Collider col = myPrefab.GetComponent<Collider>();
    // Use Collider
}

相关内容

  • 没有找到相关文章

最新更新