1

そこで、Maya でグループ ノードとロケータ ノードから非常に単純な構造を作成し、それをゲーム レベルで使用するためにエクスポートしたいと考えています。

例えば

Group_Root
  group_parent
    - group1
      - locator1
    - group2
      - locator2
    - group3

ファイルには Group_Root が 1 つだけあり、多くの group_parents (それぞれに固有の名前) がありますが、すべての group_parent には同じ 3 つのサブグループ名 (「group1」、「group2」、「group3」) があり、すべての group1 には locator1 というロケーターがあります。

私がこれまでに持っているものは次のとおりです。

group_parent = c.group( em=True, name="group_parent", parent="Group_Root")
modes =  ["group1", "group2", "group3"]
for mode in modes:
    mode_group = c.group( em=True, n=mode, parent=group_parent )
    if mode == "group1":
            s = c.spaceLocator(name="locator1")
            c.parent( mode_group ) 
    elif mode == "group3":
            s = c.spaceLocator(name="locator2")
            c.parent( mode_group )

ただし、「c.parent(mode_group)」でこのエラーが発生します

# エラー: オブジェクト group1 は無効です

おそらく、「group1」と呼ばれるノードが複数あるため、どのノードを親にするかがわからないためです。

フルパスでこれを行う方法はありますか? 例: "Group_Root|group_parent|group1"

4

3 に答える 3

0

VFXオーバーフローを見たことがありますか?視覚効果に関するQ&Aなので、多くのウォッチャーがMaya/MELとPythonに精通していることを期待しています。とはいえ、それはかなり新しいので、ユーザーベースはまだ小さいです...

于 2010-01-20T01:17:53.057 に答える
0

名前は、MEL では少し煩わしい場合があります。一般に、名前が指定したものであるとは決して信用しないことをお勧めします。

これは、*やってはいけないことの良い例です:

group -n myGroup1 circle1 sphere1;

..「group1」という名前の結果が得られることは決して保証されていないためです。これを行うためのより良い方法は、コマンドを実行し、結果を次のような文字列変数にキャプチャすることです。

string $result = `group -n myGroup circle1 sphere1`;

次に、$result を使用して、結果のグループを参照します。グループが「myGroup23」と呼ばれることになったとしても、それは引き続き機能します。

私は主にストレート MEL に精通しているため、上記が Python でどのように見えるかはわかりませんが、同じ原則が適用されるはずです。

もう 1 つ確認すべきことは、名前空間の機能 (namespace と namespaceInfo) です。これを使用して、手元にある固有の最上位グループの新しい名前空間を定義できます。

それが役立つことを願っています

于 2011-03-23T20:56:32.443 に答える
0

2年以上経っていると思いますが、今ではこれを理解しています..しかし、後世には2つの問題がありました.1つ目は、絶対パスの必要性に注目していましたが、 maya.cmds.parent() 呼び出しを適用する方法のバグ。説明のために軽く書き直しました - 主に、ものを作成するとデフォルトで選択されるという事実を利用でき、 maya.cmds.ls() は必要なものを返すのに十分スマートです..エルゴ:

c.group( em=True, name="group_parent", parent="Group_Root")
group_parent = c.ls(sl=True)[0]

modes =  ["group1" , "group2", "group3"]
for mode in modes:
    c.group( em=True, n=mode, parent=group_parent )
    mode_group = c.ls(sl=True)[0]
    if mode == "group1":
            c.spaceLocator(name="locator1")
            s = c.ls(sl=True)[0]
            # maya.cmds.parent() with something selected will actually
            # parent the specified object to the selected object. 
            # You don't want that.


            # We might as well use the explicit syntax to be sure 
            # (parent everything specified to the last item in the list)
            c.parent( s, mode_group ) 
    elif mode == "group3":
            c.spaceLocator(name="locator2")
            s = c.ls(sl=True)[0]
            c.parent( s, mode_group )
于 2012-10-06T09:54:34.797 に答える