funde-rectangleのブログ

ウルトラごった煮

Aseprite:レイヤー名をプリセットしておき、選択式にするスクリプト

前回の投稿からもうすぐ1年が過ぎようとしています。
近頃仕事では、Asepriteのように半分ブラックボックス化しているAPIを触る業務が出てきました。

いくら何でも投げやりでは・・・?と思うような内容ですが、
幾分かはAsepriteでのドキュメント漁り術が役に立っているようです。
(といっても全然スムーズにいかないし、なんならchatGPTに効いてるくらいですが・・・)

そんなこんなで業務は忙しく、プライベートはこれからどんどん忙しくなる気配がありそうで、
お絵かきも音ゲーもそこまで時間がかけられるのか。。。
といった不安が拭えませんが、なんとか合間の時間を作っていきたいところ。
そのためにも省力化が必要です。

絵もちょくちょく描いてはいるのの、細かい作業でどうしても小刻みに時間がかかる作業があり、
なかなか手がつかないな、ということもあるのですが、その中でレイヤー名入力に目をつけてみました。

自分が絵を描くとき、レイヤーは

・できるだけそれぞれ名称を付ける
・人間の胴体か、服か、背景かで色分けする

ということを心がけています。
特にアニメーションする場合はきちんとパーツを分割して考えなければならない場面も多く、
意思決定や判断の壁にならないよう、できるだけ名称と色付けをしているのですが、
地味に大変だし、日本語はコピペじゃないと入力できない(そうでなくても日本語入力するのが手間)

ので、レイヤー名や色をプリセットしておき、コンボボックスから選ぶと、
名前と色のセットが適用されるスクリプト
を作ってみました。


保管先はこちら(Github)
github.com

1.使い方

Asepriteにおけるスクリプトの保管場所については割愛・・・しすぎるのも難なので
簡単に。

▲「スクリプトフォルダを開く」をクリックすると、エクスプローラが開くのですが、
 ここにGithubに保管してある.luaファイルを保管すればOKです。


▲今回はあらかじめ描画するための絵が用意された状態からスタートです。

1.2.スクリプトの実行方法

特に事前操作は必要ありません。
任意のタイミングで「LayerNameChange_inSelection」をクリックしてください。


▲これ。


▲ちなみに初回実行時にこうした警告が出ることがありますが、
 「このスクリプトに完全な信頼を与える」にチェックをつけ、
 「スクリプトにフルアクセスを許可」をクリックしてください。
 (物騒な名前だなぁ)

1.3対象レイヤーを選択する

実行に成功するとウィンドウが表示されるので、対象レイヤーを選択した後、
ウィンドウ内でコンボボックスの値を変更すれば、レイヤー名と色が変わります。


▲こんな感じででるので・・・

]
▲変更したいレイヤーをアクティブにすべく、クリックし、


▲変更したいものをコンボボックスでクリックすると・・・


▲レイヤー名が変わります。


詳細は後述しますが、ソースコードを少しいじって(コメントアウトを外す)
色を設定してあると・・・


▲こんな感じで色が変わります。

1.4 プリセットしたいレイヤー名を編集する方法

ソースコードの中で「リスト内容の定義」
と記載のある個所のリストを変更してください。


▲ここ。

例えば服をスカートとブラウスに細分化したいなら、
こんな感じで編集すればOK。
コンボボックス内の順番はリストの順番と同じです。


▲こう。

再度実行するとこの通り。
スクリプトのファイル名を変えていなければ、
 次回実行時に反映されるはずです。)


▲「服」が「スカート」と「ブラウス」になりました。

1.5使い方の補足

表示されるウィンドウは表示したままにしておけます。
所謂モーダレスウィンドウというやつです。


▲端っこにおいておけばすぐに切り替え可能。

ちなみにソースコードを変更すれば、
ウィンドウ表示時にはほかの操作を受け付けない、
モーダルウィンドウにもできます。
(これにするとESCキーでウィンドウを閉じる操作が可能です。)


▲このwaitをtrueにするだけ。簡単でしょ。

1.6便利な使い方

もうご存じかもしれませんが、ショートカットキーに本マクロを追加することを
お勧めします。


ツールバーから編集→キーボードショートカットの順に選択。



▲左ペインで「メニュー」を選択し、右ペインで「layernamechange~~~」に
 カーソルを合わせるとでてくる「Add」をクリック、キー入力を入れればショートカットに。


▲自分はテンキーで新規空レイヤー追加(黄色のボタン)と
 名前変更スクリプト実行を隣り合わせにして配置してます。)





2.ソースコードの解説

処理自体は目立って難しいことをしている箇所はありません。
アクティブなレイヤーの名前を変更しているだけです。

前回の記事も合わせてみると理解が早いかもしれません。
funde-rectangle.hatenablog.com



具体的には
1):ウィンドウを開く
2):変更したい対象のレイヤーをクリック
3):コンボボックスの値を変更すると、名と色が変わる

といった処理順序になります。


以下はコンボボックスの表示処理の序盤。
optionsで選択肢を設定し、onchangeにfunctionを記載することで、
コンボボックスの値変更をトリガーにして処理が走るようになってます。

dlg:combobox {
    id="new_layer_name",
    options=layerNamesSelection,
    onchange=function()
        local newLayerName = dlg.data.new_layer_name
        app.activeLayer.name = newLayerName


以下の箇所でレイヤーに名前を設定。

        local newLayerName = dlg.data.new_layer_name
        app.activeLayer.name = newLayerName


コメントアウトしている箇所の一部ですが、
色キメはこっち。このソースコードでは
色は定数として定義しています。

local HUMAN = Color{ r=209, g=134, b=223 }
app.activeLayer.color = HUMAN

色の選定はゴリッゴリのIF文で制御しています。
(だって・・・自分しか使う予定なかったし・・・・)

ちなみに値を追加するときは色の制御もお忘れなく。
(背景なしでいいならそのままでOK)

--色の定義
local HUMAN = Color{ r=209, g=134, b=223 }
local CLOTH = Color{ r=106, g=205, b=91 }
local BACKGROUND = Color{ r=20, g=20, b=200 }
local NONE = Color{ r=0, g=0, b=0 }

        if newLayerName == "髪" or 
        newLayerName == "髪背面" or 
        newLayerName == "顔" or 
        newLayerName == "顔効果" or 
        newLayerName == "顔パーツ" or 
        newLayerName == "→手" or 
        newLayerName == "←手" or 
        newLayerName == "胴体(胸部)" or 
        newLayerName == "胴体(腰)" or 
        newLayerName == "→足" or 
        newLayerName == "←足"  then
          app.activeLayer.color = HUMAN
        elseif newLayerName == "靴下" or 
        newLayerName == "メガネ" or
        newLayerName == "服" then
          app.activeLayer.color = CLOTH
        elseif newLayerName == "背景エフェクト" or 
        newLayerName == "家具" or 
        newLayerName == "背景" then
          app.activeLayer.color = BACKGROUND    
        else
          app.activeLayer.color = NONE
        end

3.その後・・・

しばらくPCで使ってますが、
Asepriteではなぜか日本語がコピペじゃないと入らなかったことがあったので、
まあまあ便利です。 英語だとしても入力しなくていいし。
気持ち的にかなり楽になりますね。



タブレット機だともしかしたら爆発的な効果があるのかも。
 Bluetoothキーボードわざわざ出すの大変でしたが、
 これからはマウスorペン操作でささっと名前が変えられそうなところに期待大。