计算阴影的大小

时间:2017-04-27 08:58:51

标签: c# unity3d shadow

我创建了一个Unity3d项目,我在对象后面使用了一些聚光灯来获取它们的阴影。我试图获得一次反映在地板上的阴影的真实尺寸(使用我的比例)。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:8)

我相信你的问题大多属于Mathematics Stack Exchange,但我希望这会引导你走向正确的方向。

我在这里提出的假设是:

  • 当scale = 1
  • 时,你知道对象的高度
  • 你的对象顶部不太大(或者你必须将其宽度的一半包括在数学中)
  • 你的物体枢轴放在它的基座上(在人类身上:脚下)
  • 你的物体放在地板上(因此不在空中:否则计算起来有点复杂但想法仍然相同)

这是一个快速的情况模式: enter image description here

现在,您可以使用以下内容计算阴影的大小:

Vector3 topPoint = YOUR_OBJECT.transform.position + YOUR_OBJECT.transform.lossyScale.y * YOUR_OBJECT_HEIGHT;
Vector3 lightFlatPoint = new Vector3(YOUR_LIGHT.transform.position.x, topPoint.y, YOUR_LIGHT.transform.position.z);

float lightDeltaY = YOUR_LIGHT.transform.position.y - topPoint.y;
float lightFlatToTopPointDistance = Vector3.Distance(lightFlatPoint, topPoint);

float shadowSize = ((YOUR_OBJECT.transform.lossyScale.y * YOUR_OBJECT_HEIGHT) / lightDeltaY) * lightFlatToTopPointDistance;

希望这有帮助,