【问题标题】:Silhouette-Outlined Diffuse not working correctly轮廓轮廓漫反射无法正常工作
【发布时间】:2017-07-08 20:40:54
【问题描述】:

我正在为我的项目使用这个着色器:http://wiki.unity3d.com/index.php/Silhouette-Outlined_Diffuse。我注意到了一些问题,想知道是否有其他人遇到过这个问题。

  1. 首先,如果我手动将着色器添加到预制件中,它可以正常工作。问题是当我尝试将它添加到我的 C# 脚本中时。这适用于构建和调试版本

  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 文件夹中。我在 Silhouette-Outline Diffuse 页面中使用了第一个着色器(没有凹凸或其他)

谢谢

【问题讨论】:

  • 'name':按文件名过滤资产(不带扩展名)。由空格分隔的单词被视为单独的名称搜索。使用引号将多个单词分组到单个搜索中。 docs.unity3d.com/ScriptReference/AssetDatabase.FindAssets.html
  • 我不确定这有什么帮助?如上所述,着色器脚本已找到并且工作正常,但仅适用于在 Unity 中运行的游戏。这似乎表明 Unity 可以找到该资产。它不适用于在自己的环境中运行的游戏(即当我运行构建文件时)。

标签: c# unity3d shader


【解决方案1】:

经过一番搜索,我发现这个帖子有帮助: http://answers.unity3d.com/questions/160922/shader-not-working-in-build.html

这很容易。我刚刚创建了一个 Shader 类型的公共变量。然后将我的着色器放到该变量上并根据需要调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2021-01-05
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多