C# 在Unity中运行时更新着色器
我有一个具有漫反射着色器的对象,在运行时,我希望着色器切换为“漫反射始终可见”,但只有当单位位于名为“障碍物”的层中的特定对象后面时,才会触发此操作 首先,我尝试用以下代码切换对象着色器,着色器在inspector中更改,但在游戏中没有更改。我尝试从参考资料中放置并调用着色器,还创建了seprate材质,但它不起作用 下面是我在C中使用的代码# 至于其余的,我正在考虑使用光线投射,但不知道如何处理 提前谢谢 我现在只需要另一个概念,如果一个单位在一个对象后面,着色器就会改变 对于触发器,如何处理它将在很大程度上取决于您的相机如何移动 要查看3D游戏,光线投射应该可以工作。因为某个东西是否“在”另一个东西后面取决于相机的视角,我个人会尝试这样的开始:C# 在Unity中运行时更新着色器,c#,unity3d,compute-shader,C#,Unity3d,Compute Shader,我有一个具有漫反射着色器的对象,在运行时,我希望着色器切换为“漫反射始终可见”,但只有当单位位于名为“障碍物”的层中的特定对象后面时,才会触发此操作 首先,我尝试用以下代码切换对象着色器,着色器在inspector中更改,但在游戏中没有更改。我尝试从参考资料中放置并调用着色器,还创建了seprate材质,但它不起作用 下面是我在C中使用的代码# 至于其余的,我正在考虑使用光线投射,但不知道如何处理 提前谢谢 我现在只需要另一个概念,如果一个单位在一个对象后面,着色器就会改变 对于触发器,如何处理
如果是2D游戏或相机始终处于固定角度(例如,在侧滚中),问题可能会简单得多。将碰撞器添加到对象,并使用或(以及相应的退出函数)。只有当最小的重叠点触发效果时,这种方法才有效,只有在深度并不重要的情况下(例如在2D游戏中)这种方法才有效因此,您的碰撞器将实际相交。修复了着色器的问题,其中子对象也需要以代码为目标:p我现在只需要另一个概念,如果一个单元位于对象后面,着色器将发生更改!可以考虑从资源文件夹中引用着色器吗?
Unit.renderer.material.shader = Shader.Find("Diffuse - Always visible");