私は現在、特定の方法で 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
行き詰まりました。
こういうエラーは初めてなので対処法がわかりません。