2017-02-19 74 views
0

我正在使用此着色器:http://wiki.unity3d.com/index.php/Silhouette-Outlined_Diffuse为我的项目。我注意到一些问题,并想知道是否有其他人遇到过这个问题。轮廓线漫射不能正常工作

  1. 首先,如果我手动添加着色器到预制,它工作正常。问题是当我尝试将它添加到我的C#脚本中时。 Build和Debug版本都是如此。

  2. 我的游戏是多人游戏。我用来添加着色器的脚本在统一运行时工作正常。但是,当它在独立应用程序中运行时,它不会。预制件不是被勾画出来的,而是粉红色的(例如,当您尝试添加未找到/删除的材质时)。

  3. 此外,我的代码应该只允许特定的玩家看大纲。不是所有的球员。但是,出于某种原因,有些人会看到它(如果它在Unity中,他们看到它是正确的,如果不是,他们看到粉红色),而其他人则不会。我的比赛只能有4名球员。

这里是我的代码:

private void playerDrawsTile(String playerName, ISFSArray cardsDealt, int drawPosition, string wall) 
{ 
    Debug.Log("User " + playerName + " can draw tiles " + drawPosition); 
    //if the player is the current players turn show the outline.   //otherwise show nothing 
    if(sfs.MySelf.Id == getPlayer(playerName).Id) 
    { 
     GameObject[] getWall = new GameObject[36]; 
     //get the array of prefabs that contain the objects I want to 
     //add the shader to 
     switch (wall) 
     { 
      case "EAST": 
       getWall = controller.WallEast; 
       break; 
      case "SOUTH": 
       getWall = controller.WallSouth; 
       break; 
      case "WEST": 
       getWall = controller.WallWest; 
       break; 
      case "NORTH": 
       getWall = controller.WallNorth; 
       break; 
      default: 
       break; 
     } 

     GameObject tile1 = GameObject.Find(getWall[drawPosition].name); 
     GameObject tile2 = GameObject.Find(getWall[drawPosition + 18].name); 

     Shader shader = Shader.Find("Outlined/Silhouetted Diffuse"); 
     Renderer rend = tile1.GetComponent<Renderer>(); 
     rend.material.shader = shader; 

     rend = tile2.GetComponent<Renderer>(); 
     rend.material.shader = shader; 

    } 

} 

这是在C#来完成。着色器文件保存在Assets-> projectFolder-> Shaders文件夹中。我用的是第一着色器的剪影,大纲漫页面(没碰到或其他)

感谢

+0

'name':按文件名(不带扩展名)过滤资产。由空白分隔的词被视为单独的名称搜索。使用引号将多个单词分组到单个搜索中。 https://docs.unity3d.com/ScriptReference/AssetDatabase.FindAssets.html – SotirisTsartsaris

+0

我不知道这可能会有帮助吗?如上所述,着色器脚本被发现并且工作正常,但仅适用于在Unity中运行的游戏。这似乎表明Unity可以找到资产。它不适用于在自己的环境中运行的游戏(即,当我运行构建文件时)。 – jason

回答