【问题标题】:Shadows for Instantiated Game Object bug?实例化游戏对象的阴影错误?
【发布时间】:2017-05-22 03:27:25
【问题描述】:

我目前正在做一个项目,我的下一个目标是能够在运行时实例化一个预制件,我设法做到了这一点,但我注意到我实例化的预制件没有任何阴影。我尝试将完全相同的对象拖到场景中,它可以投射阴影。我做了一些谷歌搜索,发现很多 cmets 这是版本 5 中的一个 Unity3d 错误,只是好奇是否有人遇到同样的问题并设法找到一个迂回的方法来解决这个问题。

我生成的预制件大部分都不同。

带有阴影的平面和立方体被拖动到场景中,而没有阴影的则被实例化。

非常感谢您花时间阅读!

编辑 1 所以我尝试了一些测试和尝试和错误,我注意到有和没有阴影的游戏对象之间的唯一区别是没有阴影的游戏对象来自加载的资产包。

我的问题好像和这个人的帖子差不多

Unity3d lost directional light shadows after generate assetBundle (.unity3d file)

编辑 2

如果有帮助,我正在使用 Unity 版本 5.5.1f1

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    转到您的预制件并检查mesh renderer,它必须激活receive shadowscast shadows 属性,如图所示:

    然后记得更新你的预制件:

    prefab 拖到场景中,激活mesh renderer 中的receive shadowscast shadows 属性,最后更改apply

    【讨论】:

    • 嗨!感谢您的帮助,我检查了您提到的设置,不幸的是>
    【解决方案2】:

    似乎通过assetbundles实例化对它的着色器做了一些事情,我用这段代码重新设置了场景中的所有着色器,它对我有用。

    Shader standardShader;
    
    void Start() {
        standardShader = Shader.Find("Standard");
    }
    
    void changeShader() // because shadow for assetbundle is cucked.
    {
        var renderers = FindObjectsOfType<Renderer>() as Renderer[];
        for (int i = 0; i < renderers.Length; i++)
            renderers[i].material.shader = standardShader;
    }
    

    并在所有实例化完成后调用它。

    【讨论】:

    • 谢谢,也许这个renderers [i].material.shader = Shader.Find (renderers [i].material.shader.name); 如果它不是“标准”的话,可以保留原始着色器
    • 感谢@haru-the-potato 和@Logic1 - 我修改了一个方法以包含两个答案,并允许我将一个GameObject传递给目标,并且在我加载的AssetBundle对象上工作得很好:`void FixShaders(GameObject g) { Renderer[] renderers = g.GetComponentsInChildren(); for (int i = 0; i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多