为什么我不能使用自己的函数创建GameObject?

时间:2020-03-15 06:26:55

标签: c# node.js unity3d

为什么我不能使用自己的函数创建GameObject? 我将nodejs用作服务器,并将unity用作客户端。当我想改变场景或在不想进行更新的地方做任何事情时,就会出现我的问题,例如:

if (comando.Contains("spawn")) // Si recibe el mensaje del servidor como 'conectado' hara el debug
{
        string[] player = comando.Replace("spawn", "").Replace("{", "").Replace("}", "").Replace("\"", "").Replace("username", "").Replace("id", "").Replace(":", "").Split(',');
        GameObject go = new GameObject("Server ID:" + id);
        go.transform.SetParent(container);
        serverObjects.Add(id, go);
}

这是一条从服务器发送的消息,一旦它到达客户端,它将尝试创建一个名称为“ x”的GameObject,“错误”出现在这里,如果我执行此代码,它将获取字符串[]播放器,但不执行

GameObject go = new GameObject("Server ID:" + id);  

但是如果我改写这段代码:

if (comando.Contains("spawn")) // Si recibe el mensaje del servidor como 'conectado' hara el debug
{
        string[] player = comando.Replace("spawn", "").Replace("{", "").Replace("}", "").Replace("\"", "").Replace("username", "").Replace("id", "").Replace(":", "").Split(',');
        id = player[1];
        crear = true;
}

这是在更新功能中

if (crear)
{
    if (serverObjects.ContainsKey(id))
    {
        crear = false;
    }
    else
    {
        GameObject go = new GameObject("Server ID:" + id);
        go.transform.SetParent(container);

        serverObjects.Add(id, go);
        crear = false;
    }
}

然后它确实起作用了,但是我不想创建一个全局变量来存储id和一个布尔值来执行某些操作,因为每个输入的人都会使用它。

无论它是什么,我都不希望您对其进行修复,我只是想了解它为何如此工作,以及为什么不通过更新就无法使其工作,因为从其他方面来说,它确实有效。

我要疯了,非常感谢,谢谢我的英语:)

PS:更多无法使用的示例:

    if (comando == "noconectado") // if server send me "noconectado" y change the scene
    {
        UnityEngine.SceneManagement.SceneManager.LoadScene(1);
    }

但是如果我这样做

    if (comando == "noconectado") // if server send me "noconectado" y change the scene
    {
        creado=true;
        //UnityEngine.SceneManagement.SceneManager.LoadScene(1);
    }

这是在更新功能中

   if(creado)
   {
        UnityEngine.SceneManagement.SceneManager.LoadScene("Player");
        creado = false;
   }

有效。

在此代码中:

    if (comando.Contains("spawn")) // Si recibe el mensaje del servidor como 'conectado' hara el debug
    {
        Debug.Log("1");
        string[] player = comando.Replace("spawn", "").Replace("{", "").Replace("}", "").Replace("\"", "").Replace("username", "").Replace("id", "").Replace(":", "").Split(',');
        Debug.Log("2");
        id = player[1];
        Debug.Log("3");
        GameObject go = new GameObject("Server ID:" + id);
        Debug.Log("4");
        go.transform.SetParent(container);
        Debug.Log("5");
        serverObjects.Add(id, go);
    }

这只会给我1,2,3

我的客户收到这样的消息

  stream.BeginRead(data, 0, data.Length, new AsyncCallback(terminoDeLeer), 
  stream); 

 void terminoDeLeer(IAsyncResult arr)
    {
        leyendo = false;
        int t = stream.EndRead(arr); 
        string mensaje = Encoding.UTF8.GetString(data, 0, t); 
        leerComando(mensaje); 
    } 

leerComando是我表现得更高的

我快疯了

PS2:我没有错误,只要将它放在更新函数中,一切都可以,这就是为什么要问,因为按照我的逻辑,这两种方法都应该起作用,但是对于我需要的东西,我需要使用一种没用,我也不明白为什么:(。

谢谢。 为什么你投反对票?我不明白,这是一个好问题,任何人都可以回答,所以wtf对你们来说是错的吗?

0 个答案:

没有答案