Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算阴影的大小_C#_Unity3d_Shadow - Fatal编程技术网

C# 计算阴影的大小

C# 计算阴影的大小,c#,unity3d,shadow,C#,Unity3d,Shadow,我创建了一个Unity3d项目,并在对象后面使用了一些聚光灯来获得它们的阴影。我试着用我的比例尺来得到地板上反射的阴影的真实大小。有办法吗 我相信你的问题大部分属于你,但我希望这里有一个方法能引导你走向正确的方向 我在这里的假设是: 当比例=1时,您知道对象高度 您的对象顶部不是太大(否则您必须将其宽度的一半包含在数学中) 对象轴放置在其底部(在人身上:在其脚下) 您的对象被放置在地板上(因此不在空中:否则计算起来有点复杂,但想法保持不变) 下面是一个快速的情况模式: 现在,您可以使用以下

我创建了一个Unity3d项目,并在对象后面使用了一些聚光灯来获得它们的阴影。我试着用我的比例尺来得到地板上反射的阴影的真实大小。有办法吗

我相信你的问题大部分属于你,但我希望这里有一个方法能引导你走向正确的方向

我在这里的假设是:

  • 当比例=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;

希望这有帮助,

我喜欢这些来自开发者的绘图:D+1谢谢!(这一次,我用的是形状,而不是手绘……我敢打赌,考虑到我的艺术天赋,你一定能猜出原因:P)