📌

UnityのTransformだけで2Dの影を表現する

2023/02/13に公開

動作とHierarchyの状態
(拡大推奨)

1行まとめ

Unityで上の動画のようにHierarchyを設定し、次のコードを設定することで2Dの影を表示しました。
A 2D shadow was sheared by setting up a hierarchy and using the following code in Unity, as shown in the video above.

Code

動作について

影は単純な回転ではなく、アフィン変換のShear(せん断)という操作を使って影を軸に沿って引き伸ばしています。

RotateとShearの比較

FlipYで影を上下反転する機能も付けていますが、根本の部分が繋がっていないので少し不自然に見えます。

上下反転した様子

自然に表示したい場合は、Asset StoreのSmart Lighting 2Dなどを使った方がより確実な成果を得られると思います。

一方、このShear操作であればHierarchyを操作してScriptを1つ追加するだけなのでそれほど複雑な実装が必要にならず、LightやUVを使用しないので環境による影響を受けにくいことがメリットと言えそうです。SpriteAtlasを使っていてもUV無関係で表示でき、Batchingも壊れません。

実装内容について

この実装は次のページを参考にしています。影の長さを変えて、対象の下中央を基準に位置を合わせる方法が不明だったので、コードに追加しています。(人生で初めてMathf.Tanを使ったかもしれません)

https://qiita.com/Arihi/items/f17b5df3d75040f1c319

https://answers.unity.com/questions/961330/shear-transformation-using-gameobject-transformati.html

Discussion