【Maya】オブジェクト名によらないオブジェクト選択 _ UUIDを使う
アトリビュートエディタの下の方にUUIDという欄があるのですが。
「将来にわたって重複や偶然の一致が起こらないという前提で用いることができる」ということらしく、名前でオブジェクトを選択するようにこれを使って選択することもできるでしょう。調べてみました。
ひとつ上の図ではSphereのUUIDでしたが、▲こちらはLocatorのUUID。TransformとlocatorShapeとでまた違います。polySphereノード、マテリアル、もまた違います。すべてのシーン、すべてのオブジェクトで、作られるごとに違うIDが割り振られています。
MELで取得する
ls -sl -uuid;
// Result: 25519E0E-4D79-574D-1DE7-EDA620516AAA //
lsコマンドで「uuid」フラグを有効にすると、名前ではなくUUIDが返ってきます。
Pythonで
from maya import cmds
sel_ID = cmds.ls(sl=True,uuid=True)[0]
同じです。uuidフラグを有効にします。
選択する
sel_ID
# Result: u'25519E0E-4D79-574D-1DE7-EDA620516AAA' #
cmds.select(sel_ID)
# Error: TypeError: file <maya console> line 1: Object 25519E0E-4D79-574D-1DE7-EDA620516AAA is invalid #
cmds.ls(sel_ID)
# Result: [u'pSphere1'] #
selectコマンドに直接UUIDを渡してもエラーになってしまいますが、lsコマンドに渡すとオブジェクト名が返ってきます。
IDからいったんlsコマンドでオブジェクト名受け取って、それをselectに渡す感じでどうでしょう
オブジェクト名を変えるとどうか
名前変えても大丈夫、というのが今回の眼目です。大丈夫じゃないと困ります。
名前を変えた後、おなじIDをlsコマンドに渡してみたところ、ちゃんと新しいオブジェクト名が返ってきました。リネームを経てもIDは同じまま利用していけそうです。
おまけ1 : UUIDを書き換える
renameコマンドでuuidフラグを有効にすると、UUIDを直打ちできます。もちろん自由な内容を打ち込めるわけではなく、UUIDの書法に倣う必要はあります。
上図はとりあえず「~~AAA」だったUUIDを「~~BBB」に書き換えた様子です。
sel_ID = cmds.ls(sl=True,uuid=True)
cmds.rename(cmds.ls(sel_ID)[0],u"25519E0E-4D79-574D-1DE7-EDA620516BBB",uuid=True)
cmds.ls(sl=True,uuid=True)
ちなみに図の下にちょっと写ってますが、スクリプト経由でこの作業をしてもアトリビュートエディタは逐次更新されるわけではないので、BBBになったあともAE上ではAAAのままです。
選択しなおすと、AE上でも結果が確認できます。
おまけ2 : pymelの場合
個人的にはcmdsよりpymelを使いがちなんですが、珍しくここではcmdsで書いてきました。なぜかというと…
from pymel import core as pm
pm.ls(sl=True,uuid=True)
# Error: MayaNodeError: file C:\Program Files\Autodesk\Maya2018\Python\lib\site-packages\pymel\core\general.py line 2282: Maya Node does not exist (or is not unique):: u'25519E0E-4D79-574D-1DE7-EDA620516BBB' #
エラーになっちゃうんですよね。。。
このへんになんかあるらしいんですが……しかもドキュメントには大丈夫そうな顔でしれっと書いてあるんだぜ?
ということで、lsでuuidしたい場合はcmds使いましょう。もうしらない!バカ!!
Maya2018.4で記事書いたので、2019とかそれ以降では治ってるかもしれません🤔
【追記】ぴこぼるとさんから補足関連情報ありましたので引用させていただきます▼
Discussion