Unityでエフェクトを作るとき、テクスチャの扱いやアニメーションの持ち込み方など、知っておくべきポイントがいくつかあります。この記事では、エフェクト制作で必要になる機能や技術をまとめて解説します。
テクスチャの基本とアトラス化
UVの折りたたみでテクスチャサイズを削減
UVを4つ折りに畳むことで、テクスチャを最小限のサイズに抑えられます。折りたたんだ状態でもUnityでは問題なく表示されます。

テクスチャのアトラス化とは
複数のテクスチャを1枚にまとめることを「アトラス化」と呼びます。
アトラス化のメリット
メッシュレンダラーとパーティクルシステムはドローコールバッチングの対象になります。エフェクトでもマテリアルとテクスチャを統一することで、パフォーマンスが向上します。
注意点
使用頻度の低いテクスチャまでアトラスに含めると、メモリを圧迫します。シーンごとに使い分けましょう。
アトラステクスチャの作り方
同一サイズのテクスチャを並べて1枚にまとめます。たとえば128×128pxのテクスチャ4枚なら、256×256pxの1枚にできます。
Shuriken(パーティクルシステム)への設定方法
- Particle SystemのInspectorで「Texture Sheet Animation」にチェック
- 「Tiles」に行列の枚数を入力(例:2×2なら X:2, Y:2)
- 「Frame Over Time」のカーブをFlatにして、表示したいフレーム番号を設定(左上:0、右上:1、左下:2、右下:3)

頂点カラーとアルファ
頂点カラーを使うと、グレースケールのテクスチャに色を乗せたり、アルファでグラデーションを作ったりできます。
Mayaでの設定手順
- ビューポートを「Legacy Default Viewport」に変更(Viewport 2.0だと頂点カラーとテクスチャが同時に表示されない)
- Modeling → Mesh Display → Paint Vertex Color Toolで頂点をペイント
- 頂点アルファでグラデーションをつける(例:上部を透明にして下から上へフェード)
注意:頂点カラー・アルファのアニメーションはUnityに持ち込めません。
メッシュの変形アニメーション
頂点アニメーションはそのままではUnityに持ち込めません。以下の方法で対応します。
| 方法 | 説明 |
|---|---|
| ブレンドシェイプ | FBXで書き出し可能。形状の変形に使える |
| ボーンアニメーションに変換 | 頂点変形をジョイントの動きに置き換える |
| スクリプトで制御 | Unity側でメッシュを動的に変形 |

ボーンアニメーションへの変換手順(Maya)
- メッシュ変形のアニメーションを用意
- 変形に追従させたい位置にロケーターを配置
- ロケーターとメッシュを選択し、MELコマンド
parentToSurface;を実行 - ロケーターの位置にジョイントを配置してParent Constraint
- Bake Animationを実行
- Bind Skinして調整
アルファアニメーション
基本的な設定
UnityのシェーダーをParticles → Additiveなどに設定し、アニメーションをつけます。

モバイル向けの注意
標準のモバイル用シェーダーにはTint Color(アルファ調整)がありません。以下のカスタムシェーダーが参考になります。
- Mobile-Particle-Add-Revised.shader(加算・TintColor付き) https://gist.github.com/keijiro/b91fd4c1a711a0fd3295
- UnlitAlphaWithFade.shader http://answers.unity3d.com/questions/189695/add-color-property-to-unlit-alpha.html
Mayaのアルファアニメーションをunityに持ち込む方法
FBXで書き出せるのはTransform、Rotate、Scaleのキー情報のみです。アルファなど他のパラメータは以下の手順で移植します。
Mayaでの作業
- シェーダーにアルファアニメーションを作成
- アルファのキーフレームを全選択してコピー
- Locatorを作成し、Translate Yにペースト(Translate Xは反転する場合があるため避ける)
- Graph Editorでキーを全選択し、値のボックスに
*=255を入力して255倍にする(Unityのアルファ値は0-255のため) - FBXとしてエクスポート



Unityでの作業
- FBXをインポート
- アニメーションクリップ(Take 001)をCtrl+Dで複製
- position.yの値を全選択してコピー
- マテリアルのアルファ値にペースト
力技ですが、デザイナーでもツールなしで対応できる方法です。


UVスクロール
テクスチャをスクロールさせるにはスクリプトが必要です。
事前準備
- シームレステクスチャを使用
- テクスチャのWrap Modeを「Repeat」に設定
- メッシュのUVが0-1の範囲内に収まっていることを確認
スクリプト
using UnityEngine;
public class UVScroll : MonoBehaviour
{
[SerializeField] private float scrollSpeedX = 0.1f;
[SerializeField] private float scrollSpeedY = 0.1f;
private Renderer targetRenderer;
void Start()
{
targetRenderer = GetComponent<Renderer>();
targetRenderer.sharedMaterial.SetTextureOffset("_MainTex", Vector2.zero);
}
void Update()
{
float x = Mathf.Repeat(Time.time * scrollSpeedX, 1);
float y = Mathf.Repeat(Time.time * scrollSpeedY, 1);
targetRenderer.sharedMaterial.SetTextureOffset("_MainTex", new Vector2(x, y));
}
}スクロールさせたいオブジェクトにアタッチして、scrollSpeedXまたはscrollSpeedYに値を入力します。
ビルボード
常にカメラの方を向くビルボードもスクリプトで実装します。
using UnityEngine;
public class Billboard : MonoBehaviour
{
public Camera targetCamera;
void Start()
{
if (targetCamera == null)
targetCamera = Camera.main;
}
void Update()
{
transform.LookAt(targetCamera.transform.position);
transform.Rotate(90, 0, 0); // Plane用の補正
}
}After Effectsで作ったエフェクトをUnityに組み込む
After Effects(AE)のTrapcode Particularなどで作成したエフェクトをUnityで使う方法です。
手順
AEでの作業
- Trapcode Particularなどでエフェクトを作成
- タイムリマップで任意のフレーム数に調整
- 連番画像として出力
- Photoshopなどでスプライトシートにまとめる(例:128×128pxを8枚 → 512×256pxの1枚)

Unityでの作業
- Particle Systemを作成
- Texture Sheet Animationを有効化し、Tilesに行列数を設定
- 再生しながら調整して完成
メリットとデメリット
| メリット | デメリット |
|---|---|
| テクスチャ1枚でドローコールを抑えられる | AEとTrapcode Particularの習得が必要 |
| AEでリッチなエフェクトを作れる | 調整時はAEに戻って再出力が必要 |
| エフェクト制作がAEでほぼ完結する | テクスチャサイズが大きくなりやすい |
まとめ
| 項目 | ポイント |
|---|---|
| テクスチャ | アトラス化でドローコール削減、ただしメモリとのバランスを考慮 |
| 頂点カラー | テクスチャの色をカスタマイズできるが、アニメーションは不可 |
| メッシュ変形 | ブレンドシェイプかボーン変換で対応 |
| アルファアニメ | FBXでは直接持ち込めないのでTransformに変換して移植 |
| UVスクロール | スクリプトで実装、シームレステクスチャが必須 |
| AE連携 | スプライトシート化してTexture Sheet Animationで再生 |
エフェクト制作は覚えることが多いですが、一度ワークフローを確立すれば効率よく作業できるようになります。
