1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unityの特定のComponentの特定の値(Color)を一括置換するコマンド

Last updated at Posted at 2023-08-10

概要

Unityでゲームを作っていると「このテキストカラー変えたいな」とか「イメージのグレーアウトもう少し暗くしたいな」というシチュエーションがあります。

カラー値が固有のものだとわかっているのであれば、以下のようなgrep + sedの組み合わせで置換出来ます。

git grep -l "m_Color: {r: 0.1, g: 0.1, b: 0.1, a: 1}" | xargs sed -i '' -e 's/m_Color: {r: 0.1, g: 0.1, b: 0.1, a: 1}/m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1}/g'

しかし、たまに #FFFFFF のような、別のComponentでも使っているカラーを変えたい時があります。
この場合はgrep + sedのコマンドだけでは巻き込んで置換してしまいます。

その場合は置換したいComponentのguidを置換対象にすることで、巻き込まないように置換することが出来ます。
以下は個人用のメモ。

コマンド

# 置換対象のテキストを含むファイルのリストを取得
git grep -l "m_Script: {fileID: 11500000, guid: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, type: 3}" > file_list.txt
# 置換される文字列
cat <<EOF > original_text.txt
  m_Script: {fileID: 11500000, guid: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  m_Material: {fileID: 0}
  m_Color: {r: 1, g: 1, b: 1, a: 1}
EOF
# 置換する文字列
cat <<EOF > replaced_text.txt
  m_Script: {fileID: 11500000, guid: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  m_Material: {fileID: 0}
  m_Color: {r: 0.9, g: 0.9, b: 0.9, a: 1}
EOF
# 置換
while IFS= read -r file; do
    perl -i -p0e "s#$(cat original_text.txt)#$(cat replaced_text.txt)#g" "$file"
done < file_list.txt

メモ

  • 本当はワンライナーでやりたいが複数行の対応をするのがめんどくさそうなので綺麗にわけた
  • 置換したいComponentを指定するためにguidを利用する
  • XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXは自分が置換したいComponentのguid
    • 多分Graphicを継承しているものであればこのレイアウトで行ける
  • guidがわからなかったら、適当にカラー変えて保存した後、gitかなにかでdiffを取ってきたらこの近辺の行が取れる
  • 多分ColorだけじゃなくてMaterialやSprite、Mesh、Fontも行ける
  • perl部分はperlじゃなくてpythonとかでも出来そう
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?