0

我有一个具有漫反射着色器的对象,在运行时我希望着色器切换到漫反射始终可见,但这应该仅在该单元位于名为障碍物的图层中的特定对象后面时触发。

首先,我尝试使用以下代码切换对象着色器,​​并且在检查器中更改了着色器,但在游戏过程中没有更改。我尝试从资源中放置和调用着色器,还创建了单独的材质,但它不起作用。

这是我在 C# 中使用的代码

Unit.renderer.material.shader = Shader.Find("Diffuse - Always visible");

至于其余的,我正在考虑使用光线投射,但不知道如何处理。

提前致谢

4

1 回答 1

0

我现在只需要另一个概念,如果一个单元在一个对象后面,着色器会发生变化!

对于触发器,如何处理它在很大程度上取决于您的相机如何移动。

要签入 3D 游戏,光线投射应该可以工作。因为是否有东西在“背后”取决于相机的视角,我个人会尝试这样的开始:

  1. 使用Camera.WorldToScreenPoint确定您的对象在屏幕上的位置。
  2. 使用Camera.ScreenPointToRay将其转换为您将通过物理引擎发送的射线。
  3. 使用Physics.Raycast并检查被击中的内容。如果它没有撞到有问题的物体,那么它前面就有东西。

根据您的目标,您可能需要检查不同的点。如果您只是检查物体是否被物体覆盖了一半以上,那么在其中心进行一次光线投射可能就足够了。如果您想查看它是否完全被遮挡,您可以尝试寻找对象的四个近似角并对它们进行光线投射。

如果是 2D 游戏或相机始终处于固定角度(例如,在横向卷轴中),问题可能要简单得多。向对象添加碰撞器,并使用OnTriggerEnterOnTriggerEnter2D(以及相应的 Exit 函数)。这仅在最微小的重叠应该触发效果时才有效,并且仅在深度并不重要时才有效(例如在 2D 游戏中),因此您的对撞机实际上会相交。

于 2015-02-13T08:44:01.477 回答