以下スクリプトです。
// Set deafult animation here
string sitting_animation = "hmn-sit02-Seesaw";
// Set Position to sit on chair
vector pos = ;
// Set Rotation to sit on chair
vector rot = ;
//-----------------------------------------------------------------------
default{
state_entry(){
llSitTarget(pos, llEuler2Rot(rot * DEG_TO_RAD));
}
on_rez(integer i){
llResetScript();
}
run_time_permissions(integer permission){
if(permission>0){
llStopAnimation("sit");
llStartAnimation(sitting_animation);
}
}
changed(integer change) {
if (change & CHANGED_LINK) {
if (llAvatarOnSitTarget() == NULL_KEY) {
llStopAnimation(sitting_animation);
llSetAlpha(1.0, ALL_SIDES);
}else{
llRequestPermissions(llAvatarOnSitTarget(),
  PERMISSION_TRIGGER_ANIMATION);
llSetAlpha(0.0, ALL_SIDES);
}
}
}
}
まず、前回と同様スクリプトの処理の流れです。
1.着席位置と方向の設定を行う
2.もし誰かが座れば
3.その誰かに設定されているアニメーションを実行してもよいかどうかの許可を
もらいにいく。
4.許可がされれば
5.現在のデフォルトの座るアニメーションを止めて
6.箱に入れたアニメーションを実行する
7.同時に箱を透明にする
8.もし誰かが箱から立ち上がれば
9.箱に入れたアニメーションをとめる
10.同時に箱を表示する
といった流れになります。
さて、前回と今回の2回に渡って解説しているポーズボールですが、
覚えておいて欲しい重要なポイントは二つと書きました。
・どうやって座ったか、立ち上がったかを検知するのか
・ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか
前回に「どうやって座ったか、立ち上がったかを検知するのか」を解説しましたので、
今回は後者「ユーザーにアニメーション実行の許可をもらうにはどうすればいいのか」について
解説していきます。
この許可をもらうという部分ですが、上記のスクリプト内では
llRequestPermissions(llAvatarOnSitTarget(),PERMISSION_TRIGGER_ANIMATION);
と
run_time_permissions(integer permission){
if(permission>0){
}
}
の部分にあたります。
最初の部分
llRequestPermissions(llAvatarOnSitTarget(),PERMISSION_TRIGGER_ANIMATION);
は
対象に対して何らかの許可をもらいに行く関数です。
今回のスクリプト講座はポーズボールに関してなので、座った人にアニメーションを実行して
良いかどうかの許可をもらいに行くようになります。座った人の指定は前回にも利用した
llAvatarOnSitTarget()という関数を使います。これは座った人のID(key)を教えてくれます。
また、アニメーションのための許可というのを二つ目に指定します。
これはPERMISSION_TRIGGER_ANIMATIONと指定しておけばいいです。
さて、これで座った人にアニメーションの実行を許可するかどうかの
ダイアログをおくることができました。
(ここで、ユーザーにダイアログで許可するかしないかを促すと書きましたが、
アニメーションの実行の場合はダイアログはでません。
アニメーションの実行許可に限った場合、座ったと装着したというイベントの際は
自動的に座った人、装着した人の意思を無視して許可が下されます。)
さて、それでは相手が許可したかどうかを知って、それを元に次の処理を
していく必要があります。その部分が先ほど示した
run_time_permissions(integer permission){
if(permission>0){
}
}
の部分になります。
まず、
run_time_permissions(integer permission){
}
の部分で座った人が
許可ボタンまたは不許可ボタンを押すという
イベントを感知します。許可したかどうかは変数のpermissionという箱に
許可なら1以上の値を不許可なら0という値を入れて知らせてくれます。
その変数permissionを元にユーザーが許可した場合に
アニメーションの実行を行えばよいだけです。
それが先ほども示した
run_time_permissions(integer permission){
if(permission>0){
}
}
になります。
ここまでがスクリプトしての流れになります。
残るはアニメーションを実行する・停止するという方法と
座ったときにボールを透明にする・非透明にする方法がわかれば
スクリプトとして利用できるものになります。
それではアニメーションを実行・停止するにはどうすればよいでしょう?
それが以下のコマンドです。
llStartAnimation("animation"); //アニメーションをスタート
llStopAnimation("animation"); //アニメーションを停止
ここでanimationには実際に利用するアニメーションまたはポーズの名前を
入れてください。ただし、今回の講座で利用したスクリプトは
以下のように変数を使ってアニメーション名を指定しています。
string sitting_animation = "hmn-sit02-Seesaw"; //変数を指定
llStartAnimation(sitting_animation);
llStopAnimation(sitting_animation);
実は直接アニメーションを書いても良いのですが、
アニメーションが別のものに変わったときに書き換える手間が
減るので、こうしています。
さて、最後に透明・非透明ですが以下のコマンドを利用します。
llSetAlpha(0.0, ALL_SIDES); //透明に
llSetAlpha(1.0, ALL_SIDES); //非透明に
()内の一つめに書かれたのが透明度です。0に近づくほど透明になります。
また二つ目のALL_SIDESとかかれたものですが、オブジェクトのすべての面を
対象にするという意味です。普段はこれしか使わないと思うので
いつもALL_SIDESにしておくとよいです。
さて、今回は2回にわたってポーズボールを作るためのスクリプトについて
解説しました。利用者に許可をとるという作業はスクリプトを書いていると
結構よくでてきます。やや難解な部分ではありますが、しっかり理解しておきましょう。
それでは。また次回。