まとめ
この記事では、OpScript ノードを使用してシーン グラフの位置間で属性をコピーする方法について説明します。
詳しくは
Katanaで作業する場合、 SetAttribute ノードを使用して位置の属性を簡単に設定できます。ただし、ある場所に設定されている属性を別の場所にコピーしたい場合は、OpScript ノードと数行のコードを使用してこれを実現できます。
名前は同様の機能を示唆していますが、 AttributeCopyノードはこの目的には使用できません。
AttributeCopy は、fromRoot の位置にある copyFrom シーンと、toRoot の位置にある入力シーンをトラバースします。これらの場所から、同一の階層と場所名が見つかることが期待されます。
これは、属性をコピーする 2 つの場所のすべての子が同じ階層構造と同じ名前を持つ必要があることを意味します。これにより、AttributeCopy ノードが正しい属性を正しい場所にコピーすることが保証されます。
このノードは、変更された異なるノード グラフ内のシーン間でアトリビュートをコピーするように設計されているため、このように動作しますが、同じアセットを使用するため、シーン グラフの階層と場所の名前は同一です。
同じシーン グラフ内の位置間で属性をコピーするには、
CopyAttr()
コマンドを使用する OpScript を使用できます。これは次のようにして実行できます。 1) OpScript ノードを作成し、そのapplyWhereパラメータを「CEL と一致する場所」に設定します。
2) 「attrFrom」、「attrTo」、「sourceLocation」という 3 つのユーザー パラメータを追加します。ユーザー パラメータをノードに追加する方法については、 Katana ユーザー ガイドの「ユーザー パラメータの追加」セクションを参照してください。
3) sourceLocationパラメータの値は、属性のコピー元となるシーン グラフの場所へのパスである必要があります。
4) CEL ステートメントは、属性をコピーするシーン グラフの場所へのパスである必要があります。
5) コピー元の属性の名前をattrFromテキスト フィールドに入力します。
6)コピー先の属性の名前をattrToパラメーター値として追加します。
7) OpScript ノードのScriptパラメーターに、次の lua コードを追加します。
local attrFrom = Interface.GetOpArg("user. attrFrom"):getValue()
local attrTo = Interface.GetOpArg("user. attrTo"):getValue()
local sourceLocation = Interface.GetOpArg("user. sourceLocation"):getValue()
Interface.CopyAttr(attrTo, attrFrom, true, sourceLocation)
これはローカル属性を取得する場合にのみ機能することに注意してください。コピーする属性が親の場所から継承されている場合は、最後の行を次のように変更してください。
Interface.SetAttr(attrTo, Interface.GetGlobalAttr( attrFrom, sourceLocation))
私たちはそれを聞いて申し訳ございません
理由をお聞かせください