Top Page(最新5件)
MY ALBUM (画像付一覧) [ 全記事タイトル一覧 ]
りあるらいふ漫画【 *P's Hobby* 商品一覧ページ 】 RED's STORE にて販売中。(正面入口から入って一階の左奥上段にあります)
★Pickup カテゴリ★ その他のカテゴリはサイドバーの「カテゴリ」または カテゴリTOP 一覧 からどうぞ。

★Pickup Diary★(独断と偏見の日記選り抜き一覧)

サムネイル付記事一覧:2008 2009

★Pickup Diary★(独断と偏見の日記選り抜き一覧)

サムネイル付記事一覧:2008 2009
2009年01月14日
フェイスアニメを作ろう:その1
カテゴリ:■ ものづくり ■
1月も半ばとなり、正月気分もすっかり抜けた頃かと思いますが、お正月はどの様に過ごされましたでしょうか。
Q実家(現住居)も ぴたろ実家も都内にあり、盆と正月に実家へ帰ってのんびりするという習慣のない私は、
正月三が日、すきあらばコタツや布団でぬくぬくしながらテレビを見ておりました。 >いつもとさほど変わらないとも言う

ほとんど外出することがなかった3日と4日は、まさに↓こんな感じ。

誕生日に頂いた めぷ&ちゃぷ合作テレビのおかげで、ますますSLがRLくさくなっちゃったわ(´ノ▽`) おほほほほ
*月と星のミラー付チェストと、縁が青い畳はリアルぴたろ部屋にあるものを再現したものです

さて本題。SL開始当初は、たまたま見つけた大型フリービー店で訳も分からずあらゆるものをもらってくる毎日だったが、
ある時、荷物整理中に「Face Anime」というアイテムを発見。
SLに関してまったくの無知だった当時の私は「こんな面白いもんがあるのか〜」と大喜びで、めぷ&ちゃぷにもお裾分け。
↓こちらがその「Face Anime」。

このSSは、ぴたろ小屋が消えてしまった時にめぷさんが撮って日記に載せていたのをお借りしたもの。
インベントリを探してみたけど、私は既に この「Face Anime」を持っていなかった

個人的に この「Face Anime」は、Rezタイプであることや
Rezすると出て来るダイアログが3つも重なってしまうところに使いづらさを感じていた。

左の二つは黄色い「>>>」マークで切り替えられるので問題ないが、右端のものは完全に隠れてしまう。
そこで、自作したオブジェクトの中に「Face Anime」に入っていたスクリプトを入れ、アバターに装着してみたら、
↑のダイアログのうち、左の2つ(メニュー)だけが出る様になり、フェイスアニメもちゃんと再現された。
この自作「Face Anime」は、便宜上「P's Face Anime_01」と呼ばせて頂きます (´▽`)ノ

↑これは分かりやすい様に右手に球体を装着しているが、装着場所を変えたり透明テクスチャを貼ることで見えなくすることが可能。
また、HUDへの添付による使用も可能。
これを作った時に、最初にもらった「旧Face Anime」は削除してしまったのでした。
尚、「P's Face Anime_01」に使用したスクリプトは「続きを読む」に折り畳みましたので、興味のある方は自作してみてね。
ここで簡単にスクリプト入りオブジェクトの作り方。
・右クリック→「作成」で適当なオブジェクトを用意する。
・編集画面のタブ(「一般」とか「オブジェクト」とかってやつ)を一番右端(「テクスチャ」の更に右)の「コンテンツ」にする。
・「新しいスクリプト」をクリックし、コンテンツ内に現れた「New Script」を開き、必要なスクリプトをペーストして保存。
・編集画面の「一般」タブでオブジェクトに適当な名前をつけ、オブジェクトをTake(右クリック→Take)する。
・インベントリに入ったオブジェクトを選択して右クリックすると添付先が選択出来る。(参照記事:オブジェクトの添付先)
昨年末に荷物整理をしていたら、半年以上前にもらったまま忘れていたらしい別バージョンの「新Face Anime」も発見。
「(wear)」と書いてあるので装着してみたら、HUDに添付するタイプ。(参照記事:オブジェクトの添付先)
最初の装着時のみ「アバターに動きをつける」かを問うダイアログが5種類出るので「はい」を選択。(次回からは出ない)
画像左:各アニメの表情をしたアバターの顔がボタンになっていて分かりやすい。
画像右:画面上でフェイスボタンが邪魔な時は、ON/OFFボタンをクリックすれば消すことが出来る。

添付先はHUDの「bottom right」
ボタンが消える仕組みが知りたくて装着位置をずらすと、OFF時には すべてのボタンが右にズレることが分かった。

画像左:選択されているボタンは色が変わるので一目瞭然。
画像右:しかしこの「新Face Anime」は最初、19種類の表情のうち5種類しか有効ではなかった。

考えてみれば、最初にこれを装着した時に5種類のダイアログしか出なかった。
だからその他は無効になってしまうのか!と思い、無効ボタン内のスクリプトを確認してみたが、特に問題は無さそう。
試しに一度スクリプトをインベントリに移し、ボタン内のスクリプトを削除してインベントリからボタンへスクリプトを入れ直すと、
「アバターに動きをつける」かを問うダイアログが出た。「はい」を選択し、再度ボタンをクリックすると有効になった。
その後、この「新Face Anime」を参考にして、「P's Face Anime_02」を自作し、別アカに渡してみた。
するとやはり最初の装着時に出る「アバターに動きをつける」かを問うダイアログは5種類のみで、
ダイアログが出なかったアニメは無効になった。
理由は分からないが、とにかく今回分かったのは、ダイアログは5個までしか出ないのかも、ということ。
そして、ダイアログが出ず、そのままだと無効になるボタンも、スクリプトを入れ直せば有効になるということ。
ということで、「新Face Anime」タイプを自作して友達にあげたとしても、
すべてのアニメを有効にするためにはひと手間、いや14手間(19種類ひく5種類)かけて頂かなくてはならないという
ちょっと面倒な代物ですが、それでも作って使ってみたいという方もいらっしゃるかも知れないので、
次回は「P's Face Anime_02」に使用したスクリプトを掲載致します。 Coming Soon (´▽`)ノ
《「P's Face Anime_01」に使用したスクリプト》
このスクリプトを入れたオブジェクトを装着すると、ダイアログが出て表情を選択することが出来ます。
// Seagel improved to make this keep animation. Inspired by Gattz Gilman.
// Made channle number be assigned randomly.
// Leanne Burleigh improved this script.
// Seagel added an event "changed" by way of precaution
// Created by Seagel Neville
// Thanks to Catherine Omega, the dialog boxes came to keep showing.
// You can not only just put this script in your attached object, but also
// put into a prim you rez to execute.
integer CHANNEL = 13579; // dialog channel. This is supposed to be changed channel numbers randomly.
string ANIMATION;
list MENU_UNHAPPY = // The limit of dialog is only twelve. So I cannot help
[ // separating the list.
"disdain", "repulsed", "anger",
"bored", "sad", "cry",
"embarrased", "frown","shrug",
"afraid", "worry", "surprise"
];
list UNHAPPY_EMOTES = // List of the emotes each command triggers; same order as MENU_UNHAPPY
[
"express_disdain","express_repulsed_emote","express_anger_emote",
"express_bored_emote","express_sad_emote","express_cry_emote",
"express_embarrassed_emote","express_frown","express_shrug_emote",
"express_afraid_emote","express_worry_emote","express_surprise_emote"
];
list MENU_HAPPY =
[
"wink", "toungue out", "kiss",
"toothe smile", "smile", "laugh",
"open mouth", " ", "stop"
];
list HAPPY_EMOTES = // List of the emotes each command triggers; same order as MENU_HAPPY
[
"express_wink_emote","express_tongue_out","express_kiss",
"express_toothsmile","express_smile","express_laugh_emote",
"express_open_mouth", " ", "stop"
];
opendialog_unhappy()
{
llDialog(llGetOwner(), "What do you want to express?", MENU_UNHAPPY, CHANNEL);
}
opendialog_happy()
{
llDialog(llGetOwner(), "What do you want to express?", MENU_HAPPY, CHANNEL);
}
default {
state_entry()
{
llListen(CHANNEL, "", llGetOwner(), "");
opendialog_unhappy();
opendialog_happy();
llOwnerSay("If you want to quit and remove the menu, press \"Ignore\" button.");
if (!(llGetPermissions() & PERMISSION_TRIGGER_ANIMATION))
{
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}
}
on_rez(integer total_number)
{
llResetScript();
}
changed(integer change) // You'd better put the this changed() event when you use llGetOwner
{ // by way of precaution.
if (change & 128)
{
llResetScript();
}
}
timer()
{
llStopAnimation(ANIMATION);
llStartAnimation(ANIMATION);
}
listen(integer channel, string name, key id, string message)
{
if(message == "help")
{
llGiveInventory(llGetOwner(), llGetInventoryName(INVENTORY_NOTECARD, 0));
//Giving help note card.
}
else if (llListFindList(MENU_UNHAPPY, [message]) != -1) // verify dialog choice
{
llOwnerSay("You can change emotions. Press \"stop\" button.");
opendialog_unhappy(); // The dialog box keeps showing until you choose "Ignore".
ANIMATION = llList2String(UNHAPPY_EMOTES, llListFindList(MENU_UNHAPPY, [message]));
llSetTimerEvent(0.5);
}
else if (llListFindList(MENU_HAPPY, [message]) != -1) // verify dialog choice
{
if(message == "stop")
{
opendialog_happy(); // The dialog box keeps showing until you choose "Ignore".
llSetTimerEvent(0);
llOwnerSay("Stop animation. Press \"Ignore\" button if you want to remove the menus.");
}
else
{
llOwnerSay("You can change emotions. Press \"stop\" button if you want to stop this animation.");
opendialog_happy(); // The dialog box keeps showing until you choose "Ignore".
if(message != " ")
{
ANIMATION = llList2String(HAPPY_EMOTES, llListFindList(MENU_HAPPY, [message]));
llSetTimerEvent(0.5);
}
}
}
else if (message == "menu")
//If you cleard the dialog boxes, you could recall them by /42menu.
{
opendialog_unhappy();
opendialog_happy();
}
}
}
この記事へのトラックバックURL
http://peewee.slmame.com/t491501






