前回の投稿からもうすぐ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にするだけ。簡単でしょ。
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