Pc-Trace

<< 2024年11月 >>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30






Pc-Trace
PC-Trace

< next SketchyPhysicsの記事 prev >
>>このカテゴリーの記事一覧

「SOUND」の設定

「SketchyPhysics」の再生時や、オブジェクトの一部に触れたた時など、音声によるガイダンスが流れると、より効果的な事がある。

「SOUND」の設定は必要な音を予め用意(wav)し、呼び出すだけの簡単なもの。
画像のメニューは日本語化したものだが、標準では英語で表示される。


表示されたダイアログから、必要な音を追加していき、「playSound('')」に表示されたスクリプトのコピーを取り、ソースに貼り付けて利用する。(必要な数だけ繰り返す。)



下はいつもの扉のオブジェクトだが、フリーの「SofTalk」で音声を録音し、オブジェクトに触れると音が出るように設定してみた。
※自宅にある、シングルコア(1.7G)の古いパソコンでは、音声と言うより、雑音に近く聞こえる。

添付ファイルのソース
■扉のオブジェクトに記述したスクリプト
playSound('click')

onclick{
if getVar("tobira01")==0.0
stopAllSounds
playSound('akimasu')
setVar("tobira01",1.0)

else

setVar("tobira01",0.0)
stopAllSounds
playSound('tojimasu')
end
}

onend{
playSound('send')
}

まだ発声の終了していないサウンドをクリアして次の発声に移る場合
topAllSounds # 発声する前に、サウンドをクリア
playSound('sample') # 発声

の順で、スクリプトを記述

一行だけの、簡単な「SOUND」設定は後日。
添付ファイル 添付ファイル


オブジェクトの角(かど)の衝突形状

下は、使われやすい角処理の形状。
(軸をY方向にセット)

オブジェクトに角処理しても「SketchyPhysics」で干渉を起こしてしまう場合、適切な衝突形状を選択する必要がある。


添付ファイル 添付ファイル


多角柱・「Shape」によるバリエーション

前の動画に続き、軸方向の違いによる「Shape」バリエーション。




形状の「showcollision」 : (赤の軸)方向

「SketchyPhysics」で、円柱を転がしたつもりが”ガクガク”の動きになったり、予測不能な振る舞いをする時がある。

「Shape」の設定がオブジェクトの形状と異なる場合である。

「Shape」を設定する時、対象のオブジェクトを右クリックして表示される「メニュー」


下の動画は、”赤の軸”方向に六角柱を作成し、それぞれの「Shape」形状を指定して振る舞いを確認してみた。(設定する軸の方向や、凸型以外の形状でも振る舞いが異なる
実際の衝突は、六角中に描かれた形状で干渉する。

※形状指定があっても全てが動作する訳では無く、「Staticmesh」以外、オブジェクトが静止したままの「Shape」がある。



上の例での「Shape」設定は、「Convexhull2」が正しく利用できた。


当たり前、それとも錯覚?

「SketchyPhysics」を使い始めの頃、錯覚したり見誤ったりと・・。

下のサンプルは、ボックスに六角の車輪を付けて、「Motor」のジョイントを取り付け、動かしてみたもの。
形状や、視覚だけに頼ると、錯覚も当たり前に感じてしまうかもしれない例。





上の動画を見て当たり前に感じた人も、「showcollision」にチェックを入れて実際の車輪の干渉形状を見てみると、六角ではなく、四角で動いていたのが分かる。



それでも挙動に違和感を覚える人は鋭い観察力の持ち主かもしれない。


「SketchyReplay」の、「Export Animation」

「SketchyReplay」の、「Export Animation」を覚え書きとしてUPしてみた。

「SketchyPhysics」の動作をリアルタイムでキャプチャーする際、マシンスペックがネックとなるが、アニメーション用の連番付き画像としてエクスポートしておき、後で「Aviutl」などのソフトを利用して動画に変換(連続した静止画を連結)すると、正確にデータを書き出す事が出来る。
複雑なモデルは時間がかかるため、就寝中の処理をおすすめする。

またも手抜きのモデル!





※ 連番画像の結合については、後日紹介する予定?


ギアの作成

「Hinge」ジョイントを使って、”ギア”を作成してみた。

1..モデル上部に二つの「Hinge」を配置し、お互いを関連付け。
2..お互いのモデルとHingeが、行動を共に出来るように、グループ化
3..奈落への落下防止として、裏側にもHingeを配置し、現世へ留めておけるように細工。


添付ファイル 添付ファイル


形状の編集

下の記事で「ホイール」と「リフト」をそのまま利用したので、形状を編集してみた。

手順は動画の通りなので、特に説明する事も無い。




「ホイール」と「リフト」

YouTubeなどで紹介されている、「SketchyPhysic」を使った、「ホイール」と「リフト」に関する ”動き” を再現してみた。

”ツール”そのものは動画の通り、「フロアー」を配置しないとジョイントが付いてこないが、フロアーを配置しなくてもオブジェクトを留める方法はあるので、次回紹介する事にする。


添付ファイル 添付ファイル


「Piston」 後書き

「frame」の記事で、「Piston」で扉を開閉する”Controller”値に、以下の式を取り上げたが、”開”と”閉”の2動作だけなら短くまとめる事もでき、後書き追加。

開閉のみの2動作なら以下の式でも同じ。

if((frame%900)>450and(frame%900)>0);0.0;else;1.0;en
(フレーム0以上450未満の条件)
 ↓ 以下でも同じ
if((frame%900)>450);0.0;else;1.0;end
(450未満だけの条件として、省略した式)

※式は、”and”の代わりに ”&&”を使っても同じ。




「Servo」と「Piston」を使って「frame」の設定をしてみた。 

前の続きで、今度は「Servo」と「Piston」に、”frame”を使った制御を実行してみた。

自動で動かしたり、時間で制御したい時、またはデモの時などに役に立ちそうである。

下の動画は、”回転・ドア”と”スライド・ドア”に見たてたボックスに、「Servo」と「Piston」を設定し、非同期で動かしてみたもの。


設定方法は前回とまったく同じなので、今回の説明は省略。
動きに対しては、900のフレームに対して、450(半分)毎に動くよう設定
if((frame%900)>450and(frame%900)>0);0.0;else;1.0;end
ドアに設定した「Piston」の”Controller”値に、上の一行を書き込むか、コピーペーストするだけ



同じく、120度 開閉する扉を1/3づつ開いていくデモ。
式は見ての通り、900 のフレームに対して 300フレーム毎に区切って動きを設定してあるだけ。

if((frame%900)<300and(frame%900)>0);0.5;elsif((frame%900)>300and
(frame%900)<600);1.0;else;0;end


添付ファイル 添付ファイル


キーボードで正転と逆転をやってみた。

前回、「Controller」にキーワードを設定し、キーボードから動作できるように試してみたが、今回は少し拡張して、ジョイント「Motor」の正転と逆転が出来るように設定してみた。

式は下の一行のみ。

(key("left")*-1)+(key("right")*1)

デモなので、回転を十分落とすため”damp”の値を3に設定。

式は説明の必要がないくらい簡単なものだが、念のため説明してみる。

使うキーは、左矢印キーと、右矢印キーの二つ。

キーは、左右のどちらが押されても戻り値が ”真(1)”として考え、

左側が押された場合、−1を掛けて

1×−1=−1

右が押された場合、+1を掛けて

1×1=1

これを1つの式にまとめると、

左が押された場合、

−1+0=−1 となり、モーターは逆転。

右が押された場合、

0+1=1 となり、モーターは正転

キーが何も押されていない状態では、”0”のままなので、動きなし。

こんな感じである。

下が実際に動作を確認してみた動画

添付ファイル 添付ファイル


ジョイントツールの”Controller”に「キーコード」を設定

「SketchyPhysics」の ”Controller” の設定ができるようになったところで、今度は直接キーボードの ”キー” から動かす場合をやってみた。

使える”キーコード”の範囲は、キーボード全体が対象と見られるが、これは単なる推測に過ぎず、検証する必要が有る。

個人的に良く利用するキーとして

key("up")*1
key("down")*1
key("right")*1
key("left")*1
key("space")*1

などが対象になるが、今回はオブジェクトをバット代わりに使いたいので、”key("up")*1”(上向きの↑)を使ってみた。

key("???") の書式は既定で、?の部分はSketchyPhysicsが指定する「キーコード(ワード)」を入れる。

「Servo」ジョイントを使って設定するとたったこれだけで済んでしまう。
上向き”↑”キーの嫌いな方は、色々なコードに変更して試してほしい。



実際の動作例(現段階で使い道を検討中。)


※しかし・・・いつまでも簡単な事ばかりしてて良いものか?
添付ファイル 添付ファイル


少し踏み込んで、 Wikia を覗いてみた

複雑な動作を要しない限り、SketchyPhysicsのツールバーに表示されている機能だけで殆ど事足りてしまうが、少し踏み込んで「SketchyPhysicsWiki」の中を除くと、更に便利な使い方が紹介されている。

僅か、10行にも満たないスクリプトを記述するだけで、”更に便利”な使い方ができるなら使わない手は無い。

今回は、最も身近と感じられる
「getVar」と、「setVar」の二つのスクリプトを用い、手抜きの代名詞となった、「観音扉」で試してみた。

設定は、以下の通り

扉の軸としてセットする「Servo」の「Controller」に、値を取得するため、

getVar("tobira01")

と記述する。



※通常は、軸を設定した段階で”slider('servo???')”が既定値としてセットされてくるので、これを上記に書き換える。

カッコ内の "tobira01" は、自分が識別し易い任意の名前を付けられるが、「getVar」は、「Servo」などのジョイントツールから値を取得するための決まりのスクリプト。(決まりなので、考える必要はなくただ記述するのみ。)

他の設定で、
「accel」と、「damp」の設定は割と重要で、
オブジェクトを動かす力や早さは「accel」で設定し、それに抵抗を加えるのが「damp」の役割と言ったところ。
「damp」の設定値を高くすると、扉の開閉をゆっくりと動かす事ができる。

後は、動かされる方のオブジェクトに、アクションに応じた数行のスクリプトを記述するだけ。

下は、マウスのクリックイベントを用いた一般的な記述。
(観音扉の場合、対称に動く2つの扉にどちらも同じスクリプトを記述する)

onclick{
if getVar("tobira01")==0.0
setVar("tobira01",1.0)
else
setVar("tobira01",0.0)
end
}

「Inspector」のダイアログ 最下部に表示されているスクリプトのチェックボックスにチェックを入れると、テキストボックスが現れるので、上のスクリプトをコピペして貼り付けるだけで良い。

たったこれだけで動作する。



※ヘルプや参考が必要無い場合、「SP Wiki」をクリックしなくても他の空白をクリックしてもテキストボックスは表示される

「Servo」のジョイントが邪魔な時は、レイヤの「SketchyPhysics」のチェックを外すと非表示にできる。


添付ファイル 添付ファイル


caterpillar 作ってみた Ver2

前回のキャタピラの作り込みと動作があまりにもヒドイので、Ver2を作ってみた。(ボックス形状の動作については”Cylinder”属性を持たす事で、解決済みである。)

「Motor」ジョイントのコントロール・スライダーを下記のように動作するよう、設定

中心=停止
左=逆転
右=正転

(※ Inspectorの「Controller」設定値に-0.5を加えるだけ・・・つまり、スライダーの中心が”0”になると言うこと)



添付ファイルは今回のモデルデータ
添付ファイル 添付ファイル


< next prev >