无法将类型'Coordinate_data'隐式转换为'RandomNumber'

问题描述 投票:0回答:1

我想统一保存和加载数据,所以我遵循如何从https://www.youtube.com/watch?v=XOjd_qU2Ido保存对象属性,但是当我想返回数据以加载已保存的数据时,无法隐式获取数据。

这里是Coordinate_data类

using UnityEngine;

[System.Serializable]

public class Coordinate_data
{
    public float[] position;

    public Coordinate_data (RandomNumber coordinate)
    {
        position = new float[3];
        position[0] = coordinate.transform.position.x;
        position[1] = coordinate.transform.position.y;
        position[2] = coordinate.transform.position.z;

    }
}

这里,randomNumber函数用于随机显示已保存或随机的数据

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

public class RandomNumber : MonoBehaviour
{
    public int MinNum = 0;
    public int MaxNum = 100;

    public Text NilaiRandomX = null;
    public Text NilaiRandomY = null;
    public Text NilaiRandomZ = null;

    public Vector3 position;

    public int StepTime = 2;

    void Start()
    {
        StartCoroutine(RandomNumGenerator());
    }

    IEnumerator RandomNumGenerator()
    {
        while (1 != 0)
        {
            yield return new WaitForSeconds(StepTime);
            int X = UnityEngine.Random.Range(MinNum, MaxNum);
            int Y = UnityEngine.Random.Range(MinNum, MaxNum);
            int Z = UnityEngine.Random.Range(MinNum, MaxNum);

            float nilaix = X;
            float nilaiy = Y;
            float nilaiz = Z;

            position = new Vector3(nilaix, nilaiy, nilaiz);
            transform.position = position;

            //NilaiRandomX.text = + X;
            NilaiRandomX.GetComponent<Text>().text = "" + X;
            //NilaiRandomY.text = Y;
            NilaiRandomY.GetComponent<Text>().text = "" + Y;
            //NilaiRandomZ.text = Z;
            NilaiRandomZ.GetComponent<Text>().text = "" + Z;

        }
    }
}

这里是保存和加载数据的代码

using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public static class SaveSystem
{
    public static void saveCoordinate (RandomNumber coordinate)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        string path = Application.persistentDataPath + "coordinate.bin";
        FileStream stream = new FileStream(path, FileMode.Create);

        Coordinate_data data = new Coordinate_data(coordinate);

        formatter.Serialize(stream, data);

        stream.Close();
    }

    public static RandomNumber LoadPlayer()
    {
        string path = Application.persistentDataPath + "coordinate.bin";
        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = new FileStream(path, FileMode.Open);
            Coordinate_data data = formatter.Deserialize(stream) as Coordinate_data;
            stream.Close();

            return data; // fail to return data in here
        }
        else
        {
            Debug.LogError("Save File Not Found in " + path);
            return null;
        }
    }
}

一切正常,除了我现在在if语句中的“返回人员”上收到此错误消息。

无法将类型'Coordinate_data'隐式转换为'RandomNumber'

有人可以帮忙吗?预先感谢。

c# unity3d save load return-type
1个回答
0
投票

因为已声明函数返回RandomNumber

在此行:

public static RandomNumber LoadPlayer() // This function is supposed to return RandomNumber
{
   ...
   Coordinate_data data = formatter.Deserialize(stream) as Coordinate_data;
   return data; // And returning Coordinate_data.
}

似乎您是C#或Unity的新手,所以这里有个提示:相信编译器在说什么。当编译器显示Cannot implicitly convert type 'Coordinate_data' to 'RandomNumber'时,那么您在使用Coordinate_data类型的位置应该使用RandomNumber的位置肯定会出现错误。

我不确定所需的操作是什么,但是如果您想返回Coordinate_data,则只需更改其返回类型,例如:

public static Coordinate_data LoadPlayer()

BTW,Implicit type conversion表示,当something's

类型不匹配时,编译器尝试使用给定类型解释它,例如:
private void DoSomthingWithFloat(float x)
{
    ...
}

DoSomethingWithFloat(1);

在上面的示例中,参数x应该为float,但使用int值调用。因此,编译器隐式

将其强制转换为float

但是在您的情况下,无法将Coordinate_data强制转换为RandomNumber,因此编译器已引发错误。

© www.soinside.com 2019 - 2024. All rights reserved.