2009年1月12日月曜日

なんとなくLogicが嫌いです。

どうもです。
前回のタンジェントくんですが、なんとソッコーXSI道場さまで紹介していただけました。
投稿して寝て起きたらもう載ってました。
感無量っす+(0゚・∀・) + テカテカ +
アリガトウゴザイマス!!

それにしても前回投稿時間を間違ったような…。
知ってはいましたが、XSI道場さま主催の
懇親会の日だったのです。
(行きたかった…。今度は是非昼からにしてください~!)
朝起きると参加者のみなさまのお疲れ様記事の洪水によって
XSI道場さまの最新の記事一覧から押し流されておりました…。
紹介していただかなければ今頃下水処理施設に到達して跡形もなく処理されていたでしょう…。

それにしても前回の記事、拍手もたくさん頂けたのですが、どのくらいの方がDLしてくださったんでしょうか…。
使って下さった方もいるのかな~~??
ごみ箱に直行してなければいいなぁ~。
などなどやっぱりそのあたり興味あります。

そういえば先のことも考えてプラグインをまとめたページも作らなきゃですね。
なので、タンジェントくんの置場は変わってしまうかもです。
もちろんそのときはリンク先も編集しときますが。

さてさて本題ですが、XSIのスクリプトでPPGを表示するときなどに出てくる
Logicってなぜかあんまり好きになれません。
Logicで宣言してやった関数しかPPG内から利用できないないし、グローバル変数とか読み取ってくれないし…。
めんどくさいんです。(´;ω;`)ウッ…

かといって_Defineとかは、カスタムプロパティの実体が残ってしまうし…。
まぁ消せばいいんですが、右上の「×」とかでPPG閉じられたりしたら消せないし…。
なんというかシーンにカスタムパラメータを残す方が適しているような気がします。
まぁ知識不足なだけでもっとスマートな方法があったりするんだとおもうんですが…。

ちなみに今日PPG内のパラメータを変数で指定して取得するのに手間取ってしまいました。
簡略化すると

PPG.hogehoge.value

となるんですが、今回このhogehogeの部分を変数にしたかったのです。
正解は、

PPG.Inspected(0).Parameters("hogehoge").value

だったのですね。(゚∀゚)キタコレ!!
これならばhogehogeは文字列なので変数で置き換えが可能ですね~。
当初 PPG.Parameters("hogehoge").value とかだと思って『あれれ~?』と困ってました。
あと関係ないですが最近の個人的な流行りは

var oHoge1 = Dictionary.getobject("hogehoge",false);
var oHoge2 = oHoge1 .NestedObjects();

の2つです。
1つ目は指定したオブジェクトを取得するんですが、falseを指定してやれば指定のオブジェクトがない場合
nullを返すのでエラー処理にも使えますし、
2つ目はオブジェクトにどんなプロパティがあるのかが取得できるってのが便利です。
(そこっ!!SDK見ればいいとか言わない!)
ついでにoHoge1 .NestedObjects("hogehoge").value;と直接プロパティ名を指定してやることもできますしね。
こっちの方が便利なこともありました。たぶん。

みなさんもスクリプトで好きなコマンドとか嫌いなコマンドとかありそうですよねー。
…自分だけかな(;^ω^)


拍手する

2 件のコメント:

  1. こんにちは。タンジェント君使ってみました。便利なプラグインをありがとうございます。

    で、ちょっと思ったのですが、マスターフレームを指定するために現在フレームを移動するのはちょっとめんどくさい、中クリックでスレイブフレームに行くのは更にめんどくさい、という勝手な男なんです俺は。

    なので、Fカーブオブジェクトが取得できてるなら Keys プロパティにアクセスできるので、Keys プロパティにアクセスできたら FcurveKeys オブジェクトが返ってくるわけで、FcurveKeys オブジェクトが返ってきたら time プロパティにアクセスできるわけで、time プロパティにアクセスできたら最初の値がマスター、最後の値がスレイブと見なしてもいいわけで。

    というロジックのもと、恐れ多くも、無断で、勝手に、いきなり、ちょっと改造してみました。こんなんどうですかね。
    http://junkithejunkie.cocolog-nifty.com/tmpItems/tangentkun_mod.js

    コメント入れたのでわかると思いますが、Play Control はやめて、FCurve オブジェクトを元にマスターとスレイブを割り出しています。これだと、現在どのフレームにいようが、または中クリックをしなくても、最初と最後のフレームでタンジェントを一致させてくれるように見えます。

    一応、自分の所では問題なく動いているように見えますが、色んな場合を試したわけではないので、もちろん落とし穴がある可能性もあります。

    それとコメントの中にあった「オブジェクトのアニメーションコレクションを取得(Fカーブのみ)」ですが、AnimatedParameters2 で取得できるのは「パラメータコレクション」だと思います。アニメーションそのもの(Fカーブコレクションとか)ではなく、指定のフィルタでフィルタリングされたアニメーションが格納されているパラメータ群をコレクションとして返す、という意味です。 ま、別に厳密である必要はないんですが・・・。 間違ってたら指摘して下さい。

    ではでは。勝手にほざきやがって失礼しました。

    返信削除
  2. junkiさまいらっしゃいませ m(_ _)m

    タンジェントくん使っていただけたのですか!!
    ありがとうございます!!ヽ(^◇^*)/ ワーイ
    でもって改良案まで出していただけるとは…
    ふむふむたしかに、フレーム移動は面倒でしたね…。
    プラグインはどれだけ手数を減らして (*°ρ°) アポーン とできるかが命題だというのに…しまった…。orz
    無断で、勝手に、いきなり、おもいっきり改造大歓迎です。
    そんなお方にはもれなくビールが奢られます。

    改造版拝見させていただきました。
    これはたしかにこちらの方がいいですね。
    ありがたくいただきです!!

    しかし、最初の手法も意図があってのものだったりします。
    というのも、ループモーションを作る際前後に違うモーションが存在していたりするケースもあります。
    たとえば「歩き」だと 立ち~歩きループ~立ち などの場合です。
    その際にjunkiさまの手法では対処できない場合もあるかと考え、
    新しいタンジェント君は2つのアプローチで攻めてみることとしました。

    ・1つはjunkiさまの手法
    ・1つは従来の方法

    しかしご指摘の通り従来の方法では面倒でちゃぶ台ひっくり返してしまうため、
    プレイコントロールのIN/OUTを使用することにしました。
    前後に違うモーションがあったとしてもループモーションを作る際はプレイコントロールをループの最初と最後に合わせているだろうという淡い期待をこめて…。

    で、タンジェント君 Ver2.0 を作ってみました。
    でもってプラグイン置場(仮)も作ってみました。
    場所は↓です。

    http://mochi-mochi-web.hp.infoseek.co.jp/

    junkiさまにならってaddon形式にもしてみました。
    前のやつは闇に葬ってください。
    (2.0の詳しい使用方法は後日UPします。といってほとんど変わりませんが。)

    こんなかんじでどうでしょうか??
    『そりゃまちがっとる!!( ゚Д゚)ヴォケ!!』とかあったらまたどんどん仰ってください。

    パラメータコレクションの件ですが、お恥ずかしいかぎりです。
    とりあえず50mほど地球に穴ほっときます。
    この理解不足が後々アホなミスへとつながる可能性大なので、ご指摘本当にありがとうございました。
    もっと勉強いたします!!

    会社ではこういう会話ができる人がいないのでほんとに楽しいですねー。
    ほんとにほんとにありがとうございました。
    是非またおいで下さい。m(_ _)m

    返信削除