我目前正在开发一个项目,我的下一个目标是能够在运行时实例化一个预制件,我设法达到那么远,但我注意到我的实例化预制件没有任何阴影。我尝试将完全相同的对象拖到场景中,可以投射阴影。我做了一些谷歌搜索,发现很多评论都是版本5中的Unity3d漏洞,只是好奇是否有人遇到同样的问题并设法找到一种迂回的方法来解决这个问题。
我正在产生的预制件大多都不同。
带有阴影的平面和立方体被拖动到场景中,而没有阴影被实例化。
非常感谢您花时间阅读!
编辑1 所以我尝试了几个测试,试验和错误,我注意到有没有阴影的游戏对象之间的唯一区别是没有阴影的游戏对象来自加载的资产包。
我的问题似乎与这个人的帖子相似
Unity3d lost directional light shadows after generate assetBundle (.unity3d file)
编辑2
如果有帮助,我正在使用Unity版本5.5.1f1
答案 0 :(得分:1)
转到预制件并检查mesh renderer
,它必须激活receive shadows
和cast shadows
属性,如图所示:
将一个prefab
拖到场景中,激活receive shadows
中的cast shadows
和mesh renderer
属性,最后apply
更改。
答案 1 :(得分:1)
似乎通过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;
}
并在完成所有实例化后调用它。