Script_Top - OPTPiX/IndexColorShaderForUnity GitHub Wiki

スクリプトリファレンス

IndexColorShader for Unity(以降「ICS」)のスクリプト機能群を解説します。



使用方法

原則として、ICSのランタイム機能の中核クラス(Library_IndexColorShader.Data.ControlMaterialPalette)を、MonoBehaviourを継承したクラスで所有し・呼び出すことで運用します。

実装上の扱い方としては、下記のファイルがサンプルになります。

  • Assets/IndexColorShader/Script/Script_IndexColorShader_SpritePalette.cs
    ※本クラスは、サンプルとしてだけでなく、ICSを描画する単体のスクリプトとしても使用可能です。

ICS機能の中核クラスを使用するための、最小コードは下記になります。
※下記コードの前提は下記になります。

  • DataPaletteは、インスペクタから設定されます。
  • このスクリプトが付与されるGameObjectに、MeshFilterが付いており、MeshFilterのメッシュにはQuadが設定されています。
  • このスクリプトが付与されるGameObjectに、MeshRendererが付いており、MeshRendererにはICSでのテクスチャーのインポート時に作成されたマテリアルが設定されています。
public class FooBar : MonoBehaviour
{
    public Script_IndexColorShader_Palette DataPalette;
    private Library_IndexColorShader.Data.ControlMaterialPalette ControlMaterial = null;

    void Start()
    {
        ControlMaterial = new Library_IndexColorShader.Data.ControlMaterialPalette ControlMaterial();
        ControlMaterial.BootUp();
    }

    void Update()
    {
        ControlMaterial.Update( GetComponent<MeshRenderer>();,
                                DataPalette.Color,
                                Color.white,
                                Library_IndexColorShader.Data.ControlMaterialPalette.KindInterpolation.NONE,
                                null,
                                null
                            );
    }
}

実装として、Startで記載されている処理は(Startを実装せずに)Updateなどで行った方が効率が良い場合もあります(例えば、サンプルの役割も兼ねている「Script_IndexColorShader_SpritePalette」クラスでは、ControlMaterialのnewはUpdateで行われています)。
また、上記のControlMaterial.Updateの呼び出しは、LateUpdateで行っても構いません(Unityのレンダリング処理の前までに行われていれば問題はありません)。


上記のコードの亜形として、上記のStartとUpdateの処理を「各GameObject毎にスクリプトを付与して行う」のではなく、「どこか1つのGameObjectでまとめて行う」というような処理も可能です(そして、大量のオブジェクトを扱う場合、この方法の方が実行効率が良いことでも知られています)。
それらの実行コードの例は、下記のような形になります。 ※下記コードの前提は下記になります。

  • DataPaletteは、(とりあえず)統一した値を適用するものとしています。
  • TableGameObjectは、インスペクタから登録されているものとします。
  • それぞれの描画を担当するGameObject(TableGameObjectに登録されるGameObject群)には、ICSを操作するためのスクリプトは付けないものとします。
  • それぞれの描画を担当するGameObjectには、MeshFilterが付いており、MeshFilterのメッシュにはQuadが設定されています。
  • それぞれの描画を担当するGameObjectには、MeshRendererが付いており、MeshRendererにはICSでのテクスチャーのインポート時に作成されたマテリアルが設定されています。
public class Integrated_FooBar : MonoBehaviour
{
    public Script_IndexColorShader_Palette DataPalette;
    public GameObject[] TableGameObject;
    private Renderer[] TableRenderer;
    private Library_IndexColorShader.Data.ControlMaterialPalette[] TableControlMaterial = null;

    void Start()
    {
        int count = TableGameObject.Length;
        TableRenderer = new Renderer[count];
        TableControlMaterial = new Library_IndexColorShader.Data.ControlMaterialPalette[count]:
        for(int i=0; i<count; i++)
        {
            TableRenderer[i] = TableGameObject[i].GetComponent<MeshRenderer>();
            TableControlMaterial[i] = new Library_IndexColorShader.Data.ControlMaterialPalette();
            TableControlMaterial[i].BootUp();
        }
    }

    void Update()
    {
        for(int i=0; i<count; i++)
        {
            TableControlMaterial[i].Update( TableRenderer[i],
                                            DataPalette.Color,
                                            Color.white,
                                            Library_IndexColorShader.Data.ControlMaterialPalette.KindInterpolation.NONE,
                                            null,
                                            null
                                        );
        }
    }
}

上記は、あくまで最小手のサンプルで、これらで行われている基本処理を応用して、独自の処理を追加したりする(例えばリアルタイムでパレットを変更するような処理など)ことで、ICSを使用して様々な画像効果を得ることも可能です。



スクリプト解説(目次)

ICSのランタイムの機能は、下記のクラスに実装されています。



その他(注意事項など)

  • インポート時に作成される、パレットデータを格納している「Script_IndexColorShader_Palette」クラス(Assets/IndexColorShader/Script/Script_IndexColorShader_Palette.cs)の内容は、直接変更しないでください。
    本クラスはScriptableObjectであるため、変更するとプロジェクト全体に影響を及ぼします。

    特に、パレットを変更するような処理を組んだ場合に、Script_IndexColorShader_Palette.Colorの配列を書き換えたりしてしまうミスはやりがちです。 そういった場合、先にScript_IndexColorShader_Palette.Colorの内容を、処理を行うクラス内に複製するなどしてバッファ(ワークエリア)として設置し、そのバッファを書き換えて・ICSのUpdateに与えるようにしてください。



⚠️ **GitHub.com Fallback** ⚠️