如何知道 Unity 2D 中的对象是否被“照亮”

问题描述 投票:0回答:1

我想知道一个物体当前是否被“照亮”,所以我想检测光源是否击中它。

我想到了一个与灯光一样大的触发器,但我认为为每个灯光放置一个特定的碰撞器会很烦人(我需要修改碰撞器以使其适应其他灯光“形状”)。 有比我更好的方法吗?

unity-game-engine 2d light
1个回答
0
投票

是的,你的方法可能是最好的方法,具体取决于你想要检测物体是否被照亮的准确程度。

  • 如果光线不能被其他物体阻挡,并且检查不需要非常精确,您可以使用
    Vector2.Distance
    方法来查看物体的中心是否在光源中心的
    Light.range
    范围内。
  • 如果光线可能被其他物体阻挡,但检查仍然不必非常精确,您可以从物体中心向灯光中心投射光线投射,然后再次对照
    Light.range
    进行检查。
  • 如果检查确实必须精确,那么最好的方法确实可能只是在灯光上使用碰撞器。如果场景中有许多碰撞器,我建议创建两个新层:一个用于分配所有“可触摸”灯光,另一个用于可以被这些灯光“发现”的对象。然后,您可以转到“编辑”>“项目设置”>“物理”,并在“图层碰撞矩阵”中,对于灯光图层,仅勾选与“可点对象”图层的交互。这样 Unity 就不会与其他对象进行不必要的碰撞检查。
  • 如果您有许多不同的甚至是随机生成的灯光形状,您可以创建一个脚本,在
Awake

方法中自动设置碰撞器的大小/形状。

    

© www.soinside.com 2019 - 2024. All rights reserved.