2008年05月25日
踊るガイコツ
ペットってSLで作る場合、リンクがひとつしかできないので、
頭、目、耳、口、胴体、右足、左足、右手、左手、尻尾
とかに普通分かれているパーツを一つにすることが多いのですが、リンクではこれをまとめてひとつにして動かすんです。
ところが、そうすると全部いっぺんに動くので、足とかを動かす時にはその足だけを動かすのです。
そうすると
頭、目、耳、口
だけをまとめて一つの方向に動かすことができないんです (T_T)
BUT !!そんな動きをするペットを見つけたんです。これまで外人さんがよく持ってるのを見かけてたのですが、どこのかわからなくて探してました。

こんな動きや

な動きをするんです。ビックリしました。
これを実現するには、この技術を使っています。

ここでデモが見られます。
バラバラのガイコツが組み立てられて、踊るんです!!ちょっと脅威でした・・・
でも、これまで不思議に思っていたことが解決できてよかったです。
ちなみに、このネコ、クリックすると大変なことになります。通りがかりの人にもクリックすると大変なことになるので、気を付けてくださいね・・・

これで、ペットビレッジにあるブリ(野良猫)にももう少しカワイイアクションがつけられそうです!!
頭、目、耳、口、胴体、右足、左足、右手、左手、尻尾
とかに普通分かれているパーツを一つにすることが多いのですが、リンクではこれをまとめてひとつにして動かすんです。
ところが、そうすると全部いっぺんに動くので、足とかを動かす時にはその足だけを動かすのです。
そうすると
頭、目、耳、口
だけをまとめて一つの方向に動かすことができないんです (T_T)
BUT !!そんな動きをするペットを見つけたんです。これまで外人さんがよく持ってるのを見かけてたのですが、どこのかわからなくて探してました。

こんな動きや

な動きをするんです。ビックリしました。
これを実現するには、この技術を使っています。

ここでデモが見られます。
バラバラのガイコツが組み立てられて、踊るんです!!ちょっと脅威でした・・・
でも、これまで不思議に思っていたことが解決できてよかったです。
ちなみに、このネコ、クリックすると大変なことになります。通りがかりの人にもクリックすると大変なことになるので、気を付けてくださいね・・・

これで、ペットビレッジにあるブリ(野良猫)にももう少しカワイイアクションがつけられそうです!!
2008年05月20日
ポーズしながら表情も
乗れるネコ(デカブリ)の新しい機能として、RezしてSitの代わりにPawを選ぶと、なでるようにしてみました。

でも、これだと無表情でなんだか変です。でも、Poserでアニメーションを作ってアップロードするときに「表情」を「笑み」にしているにも関わらず、それが再生されないんです。
しかし、「みんなで作ろう。教えて!セカンドライフ!」で質問したらWhitfield-In-Worldさんから表情の付け方を教わりました!!
で、llStartAnimation("express_smile") を連続再生することで、表情をつけることに成功しました。

微妙ですが、動きに表情がつけられて本当にうれしいです!

でも、これだと無表情でなんだか変です。でも、Poserでアニメーションを作ってアップロードするときに「表情」を「笑み」にしているにも関わらず、それが再生されないんです。
しかし、「みんなで作ろう。教えて!セカンドライフ!」で質問したらWhitfield-In-Worldさんから表情の付け方を教わりました!!
で、llStartAnimation("express_smile") を連続再生することで、表情をつけることに成功しました。

微妙ですが、動きに表情がつけられて本当にうれしいです!
2008年05月18日
降り注ぐカツオブシ
デカブリ(乗れるネコ)の大好物のカツオブシ(削り節)をやろうと思い、作ってみました。

タッチすると上からカツオブシが降り注ぎます。。。臨時オブジェクトなので、1分後には消えます。。。
結果としては、管理人のUsagiからダメ出しをもらったので、デビューできませんが・・・ (T_T)
せっかく作ったので、作り方だけでもご紹介します。
まず、上から落ちるようにしなければならないので、物理オブジェクトでないといけません。しかも、カツオブシなので、風になびく、すなわちフレキシブルでないといけません。
ところが、一つのプリムに対して、物理とフレキシの両方の属性は持たせられません。
そこで、今回は、ルートプリムに適当な球形を変形したものにして物理属性を与えます。
そして、立方体を平らにして、表と裏にカツオブシのテクスチャーを貼ってフレキシブルに設定します。風などのパラメータを適当に設定します。
その後、ふたつをリンクします。そうすると、上から落ちるヒラヒラするカツオブシが出来上がります。

このままだと同じ方向にカツオブシが並んで不自然なので、テクスチャを90度毎に違う4つのオブジェクトを作成します。
それを以下のスクリプトで発生させます。

と、ここまでがんばったのに、、、風になびく具合なんか相当いい感じなのになー・・・

しかも、ウチのRLネコ(ブリ)の大好物のカツオブシをデジカメで写真に撮ってアップロードしたのに・・・

タッチすると上からカツオブシが降り注ぎます。。。臨時オブジェクトなので、1分後には消えます。。。
結果としては、管理人のUsagiからダメ出しをもらったので、デビューできませんが・・・ (T_T)
せっかく作ったので、作り方だけでもご紹介します。
まず、上から落ちるようにしなければならないので、物理オブジェクトでないといけません。しかも、カツオブシなので、風になびく、すなわちフレキシブルでないといけません。
ところが、一つのプリムに対して、物理とフレキシの両方の属性は持たせられません。
そこで、今回は、ルートプリムに適当な球形を変形したものにして物理属性を与えます。
そして、立方体を平らにして、表と裏にカツオブシのテクスチャーを貼ってフレキシブルに設定します。風などのパラメータを適当に設定します。
その後、ふたつをリンクします。そうすると、上から落ちるヒラヒラするカツオブシが出来上がります。

このままだと同じ方向にカツオブシが並んで不自然なので、テクスチャを90度毎に違う4つのオブジェクトを作成します。
それを以下のスクリプトで発生させます。

と、ここまでがんばったのに、、、風になびく具合なんか相当いい感じなのになー・・・

しかも、ウチのRLネコ(ブリ)の大好物のカツオブシをデジカメで写真に撮ってアップロードしたのに・・・
2008年05月08日
ネコのまばたき
デカブリのまばたきを作ってみました。
まず、半円から形と大きさとテクスチャーを適当に作成します。
これがまぶたとなります。

で、目をつぶった状態にして、以下のスクリプトを実行します。
touch_start(integer total_number)
{
llOwnerSay((string)llGetLocalRot());
}
こうすると目をつぶった状態のリンクされたプリムの角度が表示されます。
この表示された角度を以下のスクリプトに組み込みます。
rotation _DEFAULT_ROT ;
default
{
state_entry()
{
llSetTimerEvent(6.0+llFrand(6.0));
DEFAULT_ROT = llGetLocalRot();
}
timer()
{
llMessageLinked(LINK_ALL_OTHERS, 0, "BLINK", NULL_KEY);
llSetLocalRot(<0.00000, 0.29334, 0.00000, 0.95601>);
llSleep(0.2);
llSetLocalRot(_DEFAULT_ROT);
}
}
ここで、llSleep(0.2)が入っているのは、目をつぶった状態を自然に見せるためです。
また、llMessageLinked()を使っているのは、もう片方のまぶたと連動させるためです。
このスクリプトを組み込んで、まぶたを開けた状態にします。そうすると開けた状態の角度が_DEFAULT_ROTに入力されます。
で、同様にもう片方のまぶたも同様に作成してリンクして、以下のスクリプトを組み込みます。
rotation _DEFAULT_ROT ;
default
{
state_entry()
{
_DEFAULT_ROT = llGetLocalRot();
}
link_message(integer link_num, integer status, string command, key id)
{
if ( command == "BLINK" ) {
llSetLocalRot(<-0.09117, 0.38302, -0.12739, 0.91036>);
llSleep(0.2);
llSetLocalRot(_DEFAULT_ROT);
}
}
}
これで、片方のまぶたから送られたメッセージを受けとって、両方同時にまばたきできるようになりました。

※このまばたきするデカブリはまだ配布していません。他のポーズなどを組み込んで新しいバージョンとして配布します。
詳しくは、管理人のUsagi Pinkladyまでお問い合わせください。
まず、半円から形と大きさとテクスチャーを適当に作成します。
これがまぶたとなります。

で、目をつぶった状態にして、以下のスクリプトを実行します。
touch_start(integer total_number)
{
llOwnerSay((string)llGetLocalRot());
}
こうすると目をつぶった状態のリンクされたプリムの角度が表示されます。
この表示された角度を以下のスクリプトに組み込みます。
rotation _DEFAULT_ROT ;
default
{
state_entry()
{
llSetTimerEvent(6.0+llFrand(6.0));
DEFAULT_ROT = llGetLocalRot();
}
timer()
{
llMessageLinked(LINK_ALL_OTHERS, 0, "BLINK", NULL_KEY);
llSetLocalRot(<0.00000, 0.29334, 0.00000, 0.95601>);
llSleep(0.2);
llSetLocalRot(_DEFAULT_ROT);
}
}
ここで、llSleep(0.2)が入っているのは、目をつぶった状態を自然に見せるためです。
また、llMessageLinked()を使っているのは、もう片方のまぶたと連動させるためです。
このスクリプトを組み込んで、まぶたを開けた状態にします。そうすると開けた状態の角度が_DEFAULT_ROTに入力されます。
で、同様にもう片方のまぶたも同様に作成してリンクして、以下のスクリプトを組み込みます。
rotation _DEFAULT_ROT ;
default
{
state_entry()
{
_DEFAULT_ROT = llGetLocalRot();
}
link_message(integer link_num, integer status, string command, key id)
{
if ( command == "BLINK" ) {
llSetLocalRot(<-0.09117, 0.38302, -0.12739, 0.91036>);
llSleep(0.2);
llSetLocalRot(_DEFAULT_ROT);
}
}
}
これで、片方のまぶたから送られたメッセージを受けとって、両方同時にまばたきできるようになりました。

※このまばたきするデカブリはまだ配布していません。他のポーズなどを組み込んで新しいバージョンとして配布します。
詳しくは、管理人のUsagi Pinkladyまでお問い合わせください。
2008年05月04日
ネコじゃらしで遊べます
ペットビレッジには「ブリ」という野良猫がいますが、このブリとネコじゃらしで遊ぶポーズとスクリプトを作りました。
まずは、ネコじゃらしでしょー
RLで家にあるものを真似てちょこちょこっと作ってみました。

で、ネコじゃらしのポーズをPoserで作成します。編集中はこんな感じ。。。

ブリを出して。。。

ポーズが有効になるようにします。スクリプトはこんな感じ。。。

というと簡単そうですが、足を動かすスクリプトの値の微調整やらSitする場所の調整がとにかく時間がかかります。こればっかりはどうしようもないですねー、、、ひたすら地道に数値を打ち込んではテストを繰り返します。
ポーズも手首のスナップと効かせるところと動かす速度の調整に時間がかかります。
また、ソースコードの中でもコメントアウトしてありますが、ネコじゃらしをRezしてアタッチ(llAttachToAvatar)したかったのですが、アタッチはオーナーにしか適用できないので、あきらめました。
で、動かすと。。。

最後に自分で癒されてしまいましたーwww
で、調子に乗ってついでにこんなポーズも作りました~

が、管理人のUsagi Pinkladyには不評でした。。。(T_T)
「野良猫といきなり寝ないでしょー!」って。。。
でも、私は相当お気に入りです!!
この野良猫「ブリ」と遊べるのはこちらでーす!!
あ、ネコじゃらしは自分で持ってくるかUsagi Pinkladyにもらって自分で装着してください!!
まずは、ネコじゃらしでしょー
RLで家にあるものを真似てちょこちょこっと作ってみました。

で、ネコじゃらしのポーズをPoserで作成します。編集中はこんな感じ。。。

ブリを出して。。。

ポーズが有効になるようにします。スクリプトはこんな感じ。。。

というと簡単そうですが、足を動かすスクリプトの値の微調整やらSitする場所の調整がとにかく時間がかかります。こればっかりはどうしようもないですねー、、、ひたすら地道に数値を打ち込んではテストを繰り返します。
ポーズも手首のスナップと効かせるところと動かす速度の調整に時間がかかります。
また、ソースコードの中でもコメントアウトしてありますが、ネコじゃらしをRezしてアタッチ(llAttachToAvatar)したかったのですが、アタッチはオーナーにしか適用できないので、あきらめました。
で、動かすと。。。

最後に自分で癒されてしまいましたーwww
で、調子に乗ってついでにこんなポーズも作りました~

が、管理人のUsagi Pinkladyには不評でした。。。(T_T)
「野良猫といきなり寝ないでしょー!」って。。。
でも、私は相当お気に入りです!!
この野良猫「ブリ」と遊べるのはこちらでーす!!
あ、ネコじゃらしは自分で持ってくるかUsagi Pinkladyにもらって自分で装着してください!!
2008年04月27日
誰でも乗れるネコ その2
最近、カフェのオープンやら新しい入居者さんの対応などで、物作りが出来ていませんでしたが、やっと作りかけていたネコの乗り物がひとまずできました。

はじめはSitして乗るタイプを考えていたのですが、RezできないSIMがあるだろうことと、移動のスクリプトを書かなくてよいことから、装着タイプで作ってみました。
timer()
{
integer ai = llGetAgentInfo(_OWNER) ;
list anms = llGetAnimationList(_OWNER);
integer i;
if ( ai & AGENT_WALKING ) {
for ( i=0 ; i < llGetListLength(anms) ; i++) {
llStopAnimation(llList2Key(anms, i));
}
llStartAnimation(_ANIMATION_STEP);
if ( _STEP_START == FALSE ) {
llMessageLinked(LINK_ALL_CHILDREN, _STEP, "STEP_START", "");
_STEP_START = TRUE ;
}
} else {
for ( i=0 ; i < llGetListLength(anms) ; i++) {
llStopAnimation(llList2Key(anms, i));
}
llStartAnimation(_ANIMATION_STOP);
if ( _STEP_START == TRUE ) {
llMessageLinked(LINK_ALL_CHILDREN, _STEP, "STEP_STOP", "");
_STEP_START = FALSE ;
}
}
}
これまでのRezするタイプの自走型ペットに比べると、標準のアニメーションが作動しないようにすることくらいで、あっけなく出来てしまいました。足や耳は llSetLocalRot で動かしてます。
自走型のときには、
llSetPrimitiveParams([PRIM_POSITION, posSitStep2,
PRIM_ROTATION, rotSitStep2 / llGetRootRotation()]);
みたいにしていい感じに足とかを動かしていたのですが、これは装着型では使えませんでした (T_T)
アバターが回転すると足とかねじれちゃって、悲惨な状態になりました。
まだできたばっかりなので、一般には配布していませんが、管理人の「Usagi Pinklady」に連絡して頂ければ、お渡しいたします。Pet VillageのSIM群以外で装着した場合には、頭に「Pet Village Japan」と表示されます。

はじめはSitして乗るタイプを考えていたのですが、RezできないSIMがあるだろうことと、移動のスクリプトを書かなくてよいことから、装着タイプで作ってみました。
timer()
{
integer ai = llGetAgentInfo(_OWNER) ;
list anms = llGetAnimationList(_OWNER);
integer i;
if ( ai & AGENT_WALKING ) {
for ( i=0 ; i < llGetListLength(anms) ; i++) {
llStopAnimation(llList2Key(anms, i));
}
llStartAnimation(_ANIMATION_STEP);
if ( _STEP_START == FALSE ) {
llMessageLinked(LINK_ALL_CHILDREN, _STEP, "STEP_START", "");
_STEP_START = TRUE ;
}
} else {
for ( i=0 ; i < llGetListLength(anms) ; i++) {
llStopAnimation(llList2Key(anms, i));
}
llStartAnimation(_ANIMATION_STOP);
if ( _STEP_START == TRUE ) {
llMessageLinked(LINK_ALL_CHILDREN, _STEP, "STEP_STOP", "");
_STEP_START = FALSE ;
}
}
}
これまでのRezするタイプの自走型ペットに比べると、標準のアニメーションが作動しないようにすることくらいで、あっけなく出来てしまいました。足や耳は llSetLocalRot で動かしてます。
自走型のときには、
llSetPrimitiveParams([PRIM_POSITION, posSitStep2,
PRIM_ROTATION, rotSitStep2 / llGetRootRotation()]);
みたいにしていい感じに足とかを動かしていたのですが、これは装着型では使えませんでした (T_T)
アバターが回転すると足とかねじれちゃって、悲惨な状態になりました。
まだできたばっかりなので、一般には配布していませんが、管理人の「Usagi Pinklady」に連絡して頂ければ、お渡しいたします。Pet VillageのSIM群以外で装着した場合には、頭に「Pet Village Japan」と表示されます。
2008年03月24日
誰でも連れて歩けるネコ
だれでも連れて歩けるネコを作ったので、ペットビレッジのSIMに置いておきます。
SIMが9SIM あるので、どこに行くか分からないので、9匹用意しておきましたーww
クリックすると"Follow"か"Don't Follow"と表示されるので、"Follow"で連れて行って下さい。
物作りはペットビレッジのサンドボックスでやってますので、いつでもお声がけくださいね (^_^)/~~

Takeとかはできないので、ペットビレッジ内だけで連れて歩けるだけです~(ウチのRLのネコがモデルなので非売品です~)
SIMが9SIM あるので、どこに行くか分からないので、9匹用意しておきましたーww
クリックすると"Follow"か"Don't Follow"と表示されるので、"Follow"で連れて行って下さい。
物作りはペットビレッジのサンドボックスでやってますので、いつでもお声がけくださいね (^_^)/~~

Takeとかはできないので、ペットビレッジ内だけで連れて歩けるだけです~(ウチのRLのネコがモデルなので非売品です~)
2008年02月17日
llSetPrimtiiveParamsでハマってました
久し振りですが、今は、ネコのスクリプトでハマってました。
llSetPrimtiiveParams で四足歩行の足の角度を変えようとしていたのですが、
t=llGetPrimitiveParams([PRIM_ROTATION]);
rot = llList2Rot(t,0);
llSetPrimitiveParams([PRIM_ROTATION, rot]);
でへんてこりんな角度に足が向くんです。
でも、http://jira.secondlife.com/browse/SVC-93 にもあるように、
llSetPrimitiveParams([PRIM_ROTATION, (rot / llGetRootRotation()) / llGetRootRotation()]);
にしないといけなかったんですね。
# 知らなかっただけですが、、、
これでなんとか前に少し進みました。
llSetPrimtiiveParams で四足歩行の足の角度を変えようとしていたのですが、
t=llGetPrimitiveParams([PRIM_ROTATION]);
rot = llList2Rot(t,0);
llSetPrimitiveParams([PRIM_ROTATION, rot]);
でへんてこりんな角度に足が向くんです。
でも、http://jira.secondlife.com/browse/SVC-93 にもあるように、
llSetPrimitiveParams([PRIM_ROTATION, (rot / llGetRootRotation()) / llGetRootRotation()]);
にしないといけなかったんですね。
# 知らなかっただけですが、、、
これでなんとか前に少し進みました。
2008年01月13日
ペットお散歩&研究
Zoobyさんのところのダルマシアンとネコ、そしてU&R Medium Poodle HUDで散歩してみました。
スナップの茶色い猫が現在作成中のネコです。まだテクスチャもスカルプトも試作段階ですが、まずはスクリプトを作らねば、と格闘しています。
先に作ったクマノミのやりかたで llMoveToTarget()でオーナーを追尾していたのですが、この方法だと途中で転んだりして動作が安定しませんでした。スピードを上げるとなかなか止まれずにどっかに飛んで行ったり・・・
Zoobyさんのペットを連れていると、とても追尾性が高いのでどうやってるのかといろいろこちらで試したところ、できました!
物理属性+llMoveToTarget()ではなくて、非物理属性+llSetPos()だとうまくいきました。このようにプログラムしなおしたら同じような動きをするようになりました。
しかも、Zoobyさんのところは障害物に弱いのですが、この方法だと障害物も通り抜けることができて、なかなかいい感じです。というか、途中の障害物にPhantomみたいに通り抜けます。
動きが安定してきたので、今度はスカルプトのモデリングとテクスチャに取り組みます。

スナップの茶色い猫が現在作成中のネコです。まだテクスチャもスカルプトも試作段階ですが、まずはスクリプトを作らねば、と格闘しています。
先に作ったクマノミのやりかたで llMoveToTarget()でオーナーを追尾していたのですが、この方法だと途中で転んだりして動作が安定しませんでした。スピードを上げるとなかなか止まれずにどっかに飛んで行ったり・・・
Zoobyさんのペットを連れていると、とても追尾性が高いのでどうやってるのかといろいろこちらで試したところ、できました!
物理属性+llMoveToTarget()ではなくて、非物理属性+llSetPos()だとうまくいきました。このようにプログラムしなおしたら同じような動きをするようになりました。
しかも、Zoobyさんのところは障害物に弱いのですが、この方法だと障害物も通り抜けることができて、なかなかいい感じです。というか、途中の障害物にPhantomみたいに通り抜けます。
動きが安定してきたので、今度はスカルプトのモデリングとテクスチャに取り組みます。



