0

私は現在、特定の方法で Maya でパーティクルを作成および制御するために、Python を使用してスクリプトを実行しています。現時点では、作成した 2 つの関数で遊んでいますが、そのうちの 1 つでこのエラーが発生しています。

エラー:

TypeError: Error retrieving default arguments

これは私の関数のコードです:

# The purpose of this function is to make a magnetic effect to my particles, which are following
# a locator as a goal, so when particle is closer to this locator, the strenght with it moves
# towards the locator will be stronger and when it is far from the locator it will be weaker

# ind= will be the number of the particle/locator, for example: "locator1" = "locator"+str(ind)
# lastF= is the number of Frames we want this to be applied
# interval= for loop management, do this each "interval" frames'''
def magneticCheck(ind= 0, lastF= 10, interval= 10):
    # I was using a for loop before, but I tried a while loop just in case it fixes this issue, it doesn't
    i= 1
    while i < lastF:
        cmds.currentTime(i)
        # Getting Locator's position
        posL = cmds.getAttr( 'locator'+str(ind)+'.translate')
        # Getting Particle's position
        posP = cmds.getAttr( 'nParticle'+str(ind)+'.translate')

        # Calculating distance between Locator and Particle
        distance = math.sqrt((posP[0][0] - posL[0][0])**2 
                              + (posP[0][1] - posL[0][1])**2 
                              + (posP[0][2] - posL[0][2])**2)
        distance = distance/10  # This is just for having smaler values

        # Setting a proper goal strenght for Particle following Locator
        weight = 0
        if distance != 0:
            weight = (1/distance) * 0.5
        else:
            weight = 0.5
        # Applying the goal strenght/weight
        cmds.setAttr( 'nParticleShape'+str(ind)+'.goalWeight[0]' , weight )
        # Setting a new Keyframe at this point
        cmds.setKeyframe()
        i+= interval

# Now loop will go each "interval" frames and will check distance between particle and locator

# This works fine, creates a particle and locator at point (0, 10, 0)
newParticle( 0, 10, 0)

# Using the function ,which compiles fine, makes the error
magneticCheck(ind= 1,lastF= 400,interval= 10)

トレースバック(このためにnewParticle、関数のしくみを挿入します。まだ引用されていませんが、基本的に重要なのは、return ステートメントの最後のコード行です)

def newParticle( x, y, z):
    locator= cmds.spaceLocator()
    cmds.move( x, y, z, locator)

    part=    cmds.nParticle( p=( x, y, z ))

    cmds.goal( part , g= locator , w= 0.5)

    return [ part , locator ]

このようにして、このように新しいパーティクルとロケータを作成しresult= newParticle(x,y,z)、その後、それらを 2 つの配列に割り当てるだけですべてが整理されます。

locator[0]= result[1]
particles[0]= result[0]

次に、次magneticCheckのように使用してみました。

magneticCheck( particles[0], locator[0], lastF, interval)

setAttr私と私が置く必要があるときは、このようにgetAttr

cmds.getAttr( locator[0]+'.translate' )

常にエラーを返していたのでうまくいきobject '1' does not existませんでしたlocator[0]

この後、パーティクルやロケータを作成するたびに、 、 など"locator"+ str(i) + ".translate"の名前が自動的に付けられるため、名前を連結するというアイデアが浮かびました。"locator1""locator2"

しかし、default argumentそれが になる前にこのエラーを見つけたERROR: Default argument follow but non-default argumentので、関数に引数を入れる方法を交換する必要があり、それで修正されましたが、新しい を見つけてERROR: Type Error: error retrieving default arguments行き詰まりました。

こういうエラーは初めてなので対処法がわかりません。

4

0 に答える 0