计算阴影的大小

3 c# shadow unity-game-engine

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

Kar*_*dux 8

我相信你的问题大部分都属于数学堆栈交换,但我希望这会引导你走向正确的方向.

我在这里提出的假设是:

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

这是一个快速的情况模式: 在此输入图像描述

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

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;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助,

  • 我喜欢这些来自开发者的绘图:D + 1 (5认同)
  • 谢谢!(因为我曾经使用过形状而不是手绘......我打赌你可以猜到为什么要考虑我的艺术天赋:P) (3认同)