2011年10月20日木曜日

scriptのすすめ7 ~ステップアニメーション~

今回も懲りずに英語です。やはり書くのにめっちゃ時間がかかりますが、
これを乗り越えなければ未来無しっ! という事で先に英語で解説です。 
またも、間違いだらけだと思いますが添削してもらって、のちのち直す予定です。
後半に日本語解説あります。

It's been a while since I wrote last tips.
I have to say sorry before I explain it. Because I made a mistake on last article.
I explained how to change color of a box diffuse,however in this time it's not necessary.
This is the code of the movie which I attached on end of last lesson.
------------------------------------------------------------------------------
s = 10
b = box length:s width:s height:s

for i =1 to 45 do
(
    nb = instance b

    rc = random 0 255
    wcr = color 0 rc 255-rc
  
    m = standardmaterial selfIllumAmount:100 Diffuse:wcr
    nb.material = m
    animate on
    (
        for j = 3 to 100  by 3 do
        (
            r1 = random -5 5
            r2 = random -5 5
            at time j
            nb.pos = [r1,r2,0]*s
          
            keyID = j/3 +1
            nb.pos.controller.X_position.controller.keys[keyID].inTangentType = #step
            nb.pos.controller.X_position.controller.keys[keyID].outTangentType= #step
            nb.pos.controller.Y_position.controller.keys[keyID].inTangentType = #step
            nb.pos.controller.Y_position.controller.keys[keyID].outTangentType= #step
        )
    )
    deleteKey nb.pos.controller 1
)
delete b

---------------------------------------------------------------------------------
I suppose that from the beginning  to the middle of code explanation isn't needed.
I will explain green color code.

for j = 3 to 100 by 3 do

Basically "for loop" increases by 1 count,but if  you want to skip some steps you can specifiy
the number of steps by using "by".

nb.pos = [r1,r2,0]*s

"r1" and "r2" are random number from -5 to 5."s"is specified to 10 at the first line and it's used for size value of the Box. Therefore we multiply the random numbers and "s" to avoid crossing-over.

keyID = (j-1)/3 +1
nb.pos.controller.X_position.controller.keys[keyID].inTangentType = #step
nb.pos.controller.X_position.controller.keys[keyID].outTangentType= #step

Controllers which are set key frames have "Key index" to access key's properties .
In this case, I changed the tangent type of animation curve to "#step".
Key index is assigned by 1 in number order from 1 but  ,"j" increases number by 3 (3,6,9,12.......)
so I divided "j" by 3 to get number from 1 by 1 to use it for  Key index.

That's it.
See you then,next time!!
thank you.
---------------------------------------------------------------------------------
久しぶりの、スクリプトのすすめです。
解説の前に謝まらなければと、前回diffuseカラーをアニメーションする方法を解説しましたが、
前回の最後に貼ったムービーでは必要ありませんでした。

以下コードです。
------------------------------------------------------------------------------
s = 10
b = box length:s width:s height:s

for i =1 to 45 do
(
    nb = instance b

    rc = random 0 255
    wcr = color 0 rc 255-rc
  
    m = standardmaterial selfIllumAmount:100 Diffuse:wcr
    nb.material = m
    animate on
    (
        for j = 3 to 100  by 3 do
        (
            r1 = random -5 5
            r2 = random -5 5
            at time j
            nb.pos = [r1,r2,0]*s
          
            keyID = j/3 +1
            nb.pos.controller.X_position.controller.keys[keyID].inTangentType = #step
            nb.pos.controller.X_position.controller.keys[keyID].outTangentType= #step
            nb.pos.controller.Y_position.controller.keys[keyID].inTangentType = #step
            nb.pos.controller.Y_position.controller.keys[keyID].outTangentType= #step
        )
    )
    deleteKey nb.pos.controller 1
)
delete b

---------------------------------------------------------------------------------
初めから、中間くらいまでは説明は必要ないと思いますので、グリーンの部分だけ説明しようと思います。

for j = 3 to 100 by 3 do
forループは普通 1から順番に1つづつ数が増えていきますが、数をスキップしてforループを
まわしたいときは byをつかって何ステップおきかのループにすることが出来ます。

nb.pos = [r1,r2,0]*s
r1とr2は-5から5までのランダムの値です。sは一行目で10と指定してあり
ボックスのサイズにも使っていますね。
sを掛け算することで、ボックスのポジションが重ならずにランダムに並びます。

keyID = (j-1)/3 +1
nb.pos.controller.X_position.controller.keys[keyID].inTangentType = #step
nb.pos.controller.X_position.controller.keys[keyID].outTangentType= #step

キーフレームを持ったコントローラーは、キーのプロパティのアクセスする為の
キーインデックスを持っています。今回はアニメーションカーブのタンジェントのタイプを
ステップタイプに変更しました。
キーインデックスは1から順番に(1,2,3,4、、、)と割り振られていますが、
jの値は3ステップで(3,6,9,12.......)値が増えていくので、3で割り算したものをインデックスの値として
使用します。

今回は以上です。
ではでは、また次回。

1 件のコメント :

uiti さんのコメント...

Thank you for different way againt last time, it's just more fun. Don't mind anything!
I'd like to see kind articles much more.
cheers!!