セカCHU☆

SecondLifeのこと

チョコパイ作成 その3

2010年02月24日 02時57分54秒 | セカンドライフのすくりぷと
モノを投げるscriptはイロイロあるけど、ちょっと違った味付けが出来たかなぁって思います
甘くてちょっときちゃないパイ投げを、召し上がれ

pie-puff
pie-scratch

持つパイscriptここから
//臨時objectを打ち出すscriptです
//最初はゆっくり、時間が経つにつれてどんどん早く力が

float pow = 0;  //投げる力の初期値
float charge = 0.1;  //投げる力の現在値
float CHARGEINIT = 0.02; //溜める基本値の初期値(時間毎に増えます)
float POWMAX = 30;  //投げる力の最大値
float REZPOS = 0.5;  //Rezする地点の自分からの距離

rotation getPieRot(){
  //パイのクリーム地を前にして投げるために、回転角度を調整します
  //回転値を返します
  rotation rot = llEuler2Rot(<90,0,0> * DEG_TO_RAD);
  rot = rot * llEuler2Rot(<0,0,90> * DEG_TO_RAD);
  rot = rot * llGetRot();
  return rot;
}

throw(float power){
  //投げる部分をまとめて、コメントしやすいようにしてます
  vector relVec = llGetPos();  //投げ始める位置(方向含みます)
  rotation relRot = llGetRot(); //投げる方向(向いてる方向)
  vector fceVec = llRot2Fwd(relRot);  //投げる力の方向・大きさ

  llStartAnimation("pie-throw");
  llSleep(0.1);
  llSetTexture(TEXTURE_TRANSPARENT,0);

  relVec += fceVec;
  relVec.z += 0.7;    //投げ始める位置をちょこっと高くします
  fceVec *= power; //溜めた力を合成します
  llRezObject("throwing chocolate pie",relVec,fceVec,getPieRot(),0);
  llSleep(1);
  llStopAnimation("pie-throw");
  llSetTexture("pie-texture",0);
}

default
{
  state_entry()
  {
    llRequestPermissions(llGetOwner(),
      PERMISSION_TRIGGER_ANIMATION
    | PERMISSION_TAKE_CONTROLS);
  }

//装着した時の処理:パーミッションの取得
  attach(key uuid_av)
  {
    if(uuid_av != NULL_KEY){
      llOwnerSay("get mouselook & throwing pie!");
      llRequestPermissions(llGetOwner(),
        PERMISSION_TRIGGER_ANIMATION
      | PERMISSION_TAKE_CONTROLS);
    } else {
      llOwnerSay("CU~.");
    }
  }

//パーミッション取得処理
  run_time_permissions(integer perm)
  {
    if(perm & PERMISSION_TRIGGER_ANIMATION){
      llStartAnimation("pie-hold");
    }
    if(perm & PERMISSION_TAKE_CONTROLS){
      llTakeControls(CONTROL_ML_LBUTTON,TRUE,FALSE);
    }
  }

//コントロール処理
  control(key uuid2, integer held, integer edge)
  {
    if (held & CONTROL_ML_LBUTTON){
    //左ボタンを押し続けてる間の処理
      //ぐるぐるアニメスタート
      if(pow==0){
        llStartAnimation("pie-charge");
        llLoopSound("cartoon185SL",1);
      }
      //ちからを溜めるよ
      pow += charge;
      charge += CHARGEINIT;  //次に溜めるちからの値は、少しだけ多く
      if(pow > POWMAX){ pow = POWMAX;}  //最大値以上は溜めません
    } else if (edge & CONTROL_ML_LBUTTON){
      //左ボタンを離した時の処理
      //ぐるぐるアニメストップ
      llStopAnimation("pie-charge");
      llStopSound();
      throw(pow);  //投げる処理と投げアニメ
      pow = 0;
      charge = CHARGEINIT;
    }
  }
}
ここまで

臨時objectの投げるパイscriptは、ここから
// クリーム跡をしっかり表示します。
// 30秒間テクスチャをその場所に表示
put_cream(){
  string texture = "pie-scratch";//テクスチャ名
  llParticleSystem(
  [PSYS_PART_FLAGS , ( 0 |
   PSYS_PART_EMISSIVE_MASK |
   PSYS_PART_INTERP_COLOR_MASK |
   PSYS_PART_INTERP_SCALE_MASK
   )
  ,PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE
  ,PSYS_PART_START_ALPHA, 1.0
  ,PSYS_PART_END_ALPHA, 1.0
  ,PSYS_PART_START_COLOR, <1,1,1>//色
  ,PSYS_PART_END_COLOR, <1,1,1>//色
  ,PSYS_PART_START_SCALE, <0.7,1.4,0.7>//大きさ 最大4x4x4
  ,PSYS_PART_END_SCALE, <0.7,1.4,0.7>//大きさ 最大4x4x4
  ,PSYS_SRC_MAX_AGE, 0.5
  ,PSYS_PART_MAX_AGE, 30.0
  ,PSYS_SRC_ACCEL, <0.0, 0.0, 0.0>
  ,PSYS_SRC_OMEGA, <0.0, 0.0, 0.0>
  ,PSYS_SRC_ANGLE_BEGIN, PI
  ,PSYS_SRC_ANGLE_END, 0*DEG_TO_RAD
  ,PSYS_SRC_BURST_PART_COUNT, 1
  ,PSYS_SRC_BURST_RATE, 1.0
  ,PSYS_SRC_BURST_SPEED_MIN, 0.0
  ,PSYS_SRC_BURST_SPEED_MAX, 0.0
  ,PSYS_SRC_TEXTURE,texture
  ]);
}
// クリーム跡をちょっと表示します。
// べちゃっとした感じに
scatter_cream(){
  string texture = "pie-puff";//テクスチャ名
  llParticleSystem(
  [PSYS_PART_FLAGS , ( 0 |
   PSYS_PART_EMISSIVE_MASK |
   PSYS_PART_INTERP_COLOR_MASK |
   PSYS_PART_INTERP_SCALE_MASK
   )
  ,PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE
  ,PSYS_PART_START_ALPHA, 1.0
  ,PSYS_PART_END_ALPHA, 1.0
  ,PSYS_PART_START_COLOR, <1,1,1>//色
  ,PSYS_PART_END_COLOR, <1,1,1>//色
  ,PSYS_PART_START_SCALE, <0.4,0.4,0.4>//大きさ 最大4x4x4
  ,PSYS_PART_END_SCALE, <0.7,0.7,0.7>//大きさ 最大4x4x4
  ,PSYS_SRC_MAX_AGE, 0.5
  ,PSYS_PART_MAX_AGE, 3.0
  ,PSYS_SRC_ACCEL, <0.0, 0.0, 0.0>
  ,PSYS_SRC_OMEGA, <0.0, 0.0, 0.0>
  ,PSYS_SRC_ANGLE_BEGIN, PI
  ,PSYS_SRC_ANGLE_END, 0*DEG_TO_RAD
  ,PSYS_SRC_BURST_PART_COUNT, 1
  ,PSYS_SRC_BURST_RATE, 1.0
  ,PSYS_SRC_BURST_SPEED_MIN, 0.0
  ,PSYS_SRC_BURST_SPEED_MAX, 0.0
  ,PSYS_SRC_TEXTURE,texture
  ]);
}

default
{
  state_entry()
  {
    float force = llVecMag(llGetAccel());
    if(630 < force){
      llPlaySound("Rico02SL",1);
    } else {
      llPlaySound("ZipIn+",1);
    }
  }

  on_rez(integer param){
    llResetScript();
  }

  collision_start(integer col_num)
  {
    //まず一度非物理にして勢いをなくして、もう1度物理にします
    llSetStatus(STATUS_PHYSICS,FALSE);
    //衝突した時にavatarかobjectか判別します。
    //今回は地面との衝突は判定しません
    if(llDetectedType(0) & PASSIVE){
      //止まってるモノに当たった場合
      //べちょ
      put_cream();
      llPlaySound("ZipFart",1);
    } else {
      //人、動いてるモノ、動きそうなモノに当たった場合
      //べちょ
      scatter_cream();
      llPlaySound("ZipFart",1);
    }
    //重力にまかせて落っこちます
    llSetStatus(STATUS_PHYSICS,TRUE);
    //script自体を停止させます
    llSetScriptState("collision script",FALSE);
    }
}
ここまで

お菓子の袋作成その2

2009年03月06日 23時48分45秒 | セカンドライフのすくりぷと
scriptを書いてなかったので、のせますね


テレポートしたときにアニメが外れちゃうのが嫌で、
お行儀悪いなとは思いながらも15秒毎にアニメのパーミッションを取得しまくっちゃってます
あと、計算方法はもっと簡単になるかも!
私おバカだからこれ以上よく分かりませんでした・・・

いちおう最初のListに落としたいobjectの名前と、
次のListに落とした時に出すsoundの名前を書けば、どんなのでも落とせるようになるよ
その時は、落し物が一時オブジェクトになってるかどうか気をつけてね

 scriptここから 
list drop = ["almondfoil","pocky","eda","kinoko","itachoco","chocopie","heart","heartchoco","almondc"];
list se = ["cartoonsplit","pop","BOING"];
integer status = 0;  //ステータス。{0 = 装着, 1 = Rez}

default
{
 
  state_entry()  //いちばんさいしょ
  {
    //パーミッションを取得して、タイマーをセットします
     llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
    llSetTimerEvent(12.0);
  }

 
  attach(key keyid)  //装着したとき
  {
    if (keyid != NULL_KEY){
      //装着した時にだけ、state_entryからやり直します
      llResetScript();
    }
  }


  on_rez(integer param)  //地面に置いたとき
  //インベントリから出した時も同じなので装着した時も動いていますが、
  //attachも動くのでステータスの内容は0にリセットされているみたいです
  {
    status = 1;  //ステータスに1をセットします
  }

   
  timer()  //タイマーの時間が来るたび
  {
    list details = llGetParcelDetails(llGetPos(),[
    PARCEL_DETAILS_NAME,
    PARCEL_DETAILS_DESC,
    PARCEL_DETAILS_OWNER,
    PARCEL_DETAILS_GROUP,
    PARCEL_DETAILS_AREA]);
    //全ての住人にBuild許可もしくは土地オーナーの場合にだけ、チョコポロリ
    //許可されたグループでもrezは可能ですが、今回は対応しません
    //ステータスが装着状態じゃないとポロリしません
    if((llGetParcelFlags(llGetPos()) & PARCEL_FLAG_ALLOW_CREATE_OBJECTS ||
       llGetOwner() == llList2Key(details,2)) &&
       status == 0){
      //念のためアニメのパーミッションを取得します
      llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
      //落し物をlistからランダムに取得して、1こ落っことします
      integer dropno = (integer)llFrand(9.0);
      //落とした音をlistからランダムに取得して、1つ鳴らせます
      integer dropse = (integer)llFrand(3.0);
      //装着するとアバターの座標が基準になるみたい。
      //x,yはSIM座標です。
      //このままではアバターの向きが変わっても座標は変わりません。
      //だから三角関数を使って、向きの角度を考慮に入れた座標を作成します。
      vector rezpos = llGetPos();
      float rezposx = rezpos * <1,0,0>;  // x座標取り出し
      float rezposy = rezpos * <0,1,0>;  // y座標取り出し
      float rezposz = rezpos * <0,0,1> + 0.7;  // z座標取り出し
      float rezrot  = llRot2Euler(llGetRot()) * RAD_TO_DEG * <0,0,1>;
      if (rezrot > 0){
        rezrot = -360 + rezrot; //3時の方向(東)を0度とした角度に変換します
      }                         //時計回りにするため、値をひっくり返します
      float rezrotrad = 1 * 2 * PI * llFabs(rezrot)/360; //角度をラジアン値に
      rezposx = rezposx + 0.3 * llCos(rezrotrad);  //SIM座標+自分の正面
      rezposy = rezposy - 0.3 * llSin(rezrotrad);  //SIM座標+自分の正面
      //自分の正面0.3mの距離に、listのチョコをrezします
      llRezObject("drop_"+llList2String(drop,dropno),<rezposx,rezposy,rezposz>,ZERO_VECTOR,ZERO_ROTATION,0);
      llPlaySound(llList2String(se,dropse),1);
    }
  }

 
  run_time_permissions(integer perm)  //パーミッションが取得できたら
  {
    //アニメーションを実行します
    if (perm & PERMISSION_TRIGGER_ANIMATION) {
      llStartAnimation("holdbag");
    }
  }

 
}
 scriptここまで 

実験結果は成功だよ

2008年08月28日 23時55分04秒 | セカンドライフのすくりぷと
SecondLifeよりも綺麗なVirtualSpaceはいっぱいあるけれど、
SLほど自由に物を生み出す仕組みが揃ってるのって、ないよね。
唯一にして絶対的なアドバンテージだよね


前回のscript、実験してみたよ。
思ったとおりでしたぁ

2つのprimをlinkさせておいて、親primにはタッチとllLinkMessageを入れておいて、
もう1つの子primには、ownerの名前を調べてllSayするscriptを入れてっと。

それからprimをタッチするとー

こんなふうにメッセージが出たよ
後からprimの名前を見てみると、親primは最初のまんまobjectで、子primは私の名前に変わってました。
primが喋るからメッセージの色は緑色だけど、今までの中で一番違和感の無い方法なのかもしれないね

絶対遵守の力ももうすぐ完成かなっ
せめてアニメが終わっちゃわないうちに作らなきゃ


親primの実験scriptだよ
default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        llSay(0, "Touched.");
        llMessageLinked(LINK_ALL_OTHERS,0,"",NULL_KEY);
    }
}

子primの実験scriptだよ
key master_key = NULL_KEY;
string master_name = "";

default
{
    state_entry()
    {

    }

    link_message(integer send_num,integer num,string str,key key_id)
    {
        master_key = llGetOwner();
        master_name = llKey2Name(master_key);
        llSetObjectName(master_name);
        llSay(0,master_name+"が命じる!");
    }
}

ここまでー

LSLエディタが改良されてるね

2008年08月23日 19時25分48秒 | セカンドライフのすくりぷと
今まで漢字が使えなかったのが、いつの間にか使えるようになってますね
lslのコメントをローマ字で書くとすぐ1行いっぱいになっちゃってたから、漢字が使えるのすっごく便利
便利記念に、あんまり役に立たないscriptの覚書を書いてみようと思いまぁす

戦車の砲台script
integer stat = 0; //撃ってないか、撃ち終わったか
integer sex = 0; //最初に選択する性別
integer hundle; //聞き耳
list play_anim = ["canon-f","canon-m"]; //性別に対応したアニメの名前

default
{
  state_entry()
  {
//ここは空っぽでいいの?
  }

  attach(key id)
  {
    if (id != NULL_KEY)
    {//装着した時だけ、dialogを出してポーズが選べるよ
      hundle = llListen(-44,"",llGetOwner(),"");
      llDialog(llGetOwner(),"I am a....",["man","woman"],-44);
    }
  }

  touch_start(integer total_number)
  {
    if (stat == 0)
    {//まだ撃ってない時の処理
      stat = 1;
      if (llDetectedKey(0)==llGetOwner())
      {//タッチしたのが所有者の時だけ、弾発射ー
        llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
        llStartAnimation(llList2String(play_anim,sex));
        llSleep(1.9);
        llPlaySound("tankfire",1);
        llMessageLinked(LINK_ALL_OTHERS,0,"flash",NULL_KEY);
      }
    } else {//撃った後の処理
      stat = 0;
      if (llDetectedKey(0) == llGetOwner())
      {//タッチしたのが所有者の時だけ、アニメ終了
        llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
        llStopAnimation(llList2String(play_anim,sex));
      }
    }
  }
   
  listen(integer ch,string uname,key uid,string mes)
  {//装着してポーズを選ぶまでの間は聞き耳。
  //聞いたら性別をセットして聞き耳終わるよ。
    if (mes == "man")
    {
      sex = 1;
      llListenRemove(hundle);
    } else if (mes == "woman")
    {
      sex = 0;
      llListenRemove(hundle);
    }
  }
}

戦車の爆発script

default
{
  state_entry()
  {
//ここは空っぽでいいの?
  }

  link_message(integer sender_number, integer num, string str, key id)
  {
    if (str == "flash")
    {//"flash"のLinkMessageが来たら爆発表示するよ
      llSetTexture("muzzleflash",ALL_SIDES);
      llSleep(0.2);
      llSetTexture(TEXTURE_TRANSPARENT,ALL_SIDES);
    }
  }
}


どっちから見ても正面に見える看板
default
{
  state_entry()
  {

  }

  touch_start(integer total_number)
  {
    llOwnerSay("touched");
    string texture = "Snapshot";//POPのテクスチャ名
    llParticleSystem(
    [  PSYS_PART_FLAGS , ( 0 |
        PSYS_PART_EMISSIVE_MASK |
        PSYS_PART_INTERP_COLOR_MASK |
        PSYS_PART_INTERP_SCALE_MASK
        )
       ,PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE
       ,PSYS_PART_START_ALPHA, 1.0
       ,PSYS_PART_END_ALPHA, 1.0
       ,PSYS_PART_START_COLOR, <1,1,1>//色
       ,PSYS_PART_END_COLOR, <1,1,1>//色
       ,PSYS_PART_START_SCALE, <2,2,2>//大きさ 最大4x4x4
       ,PSYS_PART_END_SCALE, <2,2,2>//大きさ 最大4x4x4
       ,PSYS_SRC_MAX_AGE, 0.0
       ,PSYS_PART_MAX_AGE, 3.0
       ,PSYS_SRC_ACCEL, <0.0, 0.0, 0.0>
       ,PSYS_SRC_OMEGA, <0.0, 0.0, 0.0>
       ,PSYS_SRC_ANGLE_BEGIN, PI
       ,PSYS_SRC_ANGLE_END, 0*DEG_TO_RAD
       ,PSYS_SRC_BURST_PART_COUNT, 1
       ,PSYS_SRC_BURST_RATE, 1.0
       ,PSYS_SRC_BURST_SPEED_MIN, 0.0
       ,PSYS_SRC_BURST_SPEED_MAX, 0.0
       ,PSYS_SRC_TEXTURE,texture
    ]);
  }
}

touchで飛び跳ねる箱
integer TOUCH=0;  // touch hantei
integer DOCCHI=0;

default
{
  state_entry()
  {

  }
  
  touch_start(integer total_number)
  {
    if (TOUCH == 0){
      llSetTimerEvent(1.5);
      TOUCH = 1;
      llSetText("hop",<1,1,1>,1);
    } else {
      llSetTimerEvent(0.0);
      TOUCH = 0;
      llSetText("off",<1,1,1>,1);
    }
  }

  timer()
  {
    llApplyImpulse(<0,0,10>,FALSE);
  }
}

足跡ってこんなの?

2008年06月02日 01時00分12秒 | セカンドライフのすくりぷと
お友達から質問されたので、足跡発生装置を作ってみたよ


rez禁止のトコロでも使えるように、particleで作ってみたんだぁ。
一定時間ごとにparticleを出せばいいというのはスグ分かったんだけど、なかなか出した所に止まったままになるparticleが出来ません
webを探しても、あんまりそういうscriptの説明も無いみたい。うーん。
何時間かパラメータをいじってみて、原因判明
PSYS_SRC_ACCEL と PSYS_SRC_BURST_SPEED_MIN と PSYS_SRC_BURST_SPEED_MAX の数値を0にしても、PSYS_PART_FOLLOW_VELOCITY_MASKを指定してたらparticleが表示されないみたいだよ。
VELOCITY_MASKを指定すると、必ず動いてなきゃいけないようです。
どこにも書いてないけれど、排他パラメータだねこれって

出した位置で止まったままのscriptが出来れば、あとは左と右を一定間隔で出すだけだよね。
なるべく歩いたときに足元の高さをキープできるように、chestに箱を2つ装着して
最初に、右足scriptにだけsleep0.5秒入れてみたけれど、上手く均等に足跡が付きませんでした。
wearするのは同時のタイミングでも、scriptが動き始めるのは同時じゃないんだねー。
今回は安易にtimerイベント使っちゃったけど、もっと他にいい方法があるんじゃないかなぁ。

試作品はこんなふうになりました
欠点といえば、timerイベント使ってるから少し負荷を掛けちゃう事と、
particleは常に正面に見えちゃうから、地面に近い位置から見た時に影が立ってるように見えちゃう事かな。
それ以前に、足跡のしくみってこれで合ってたんでしょうか


ルートプリムの左足scriptだよ
float KANKAKU = 0.5;     // 1po ni kakaru jikan (sec)
integer NAGASA = 10;     // asiato nokoru jikan (sec)

integer NUM = 1;

default
{
    state_entry()
    {     
      llSetTimerEvent(KANKAKU);
    }
   
    timer(){
      llMessageLinked(NUM,NAGASA,"","");
      if (NUM == 1) {
          NUM = 2;
      } else {
          NUM = 1;
      }
    }
   
    link_message(integer sendnum,integer num, string str, key id){
        llParticleSystem(
        [  PSYS_PART_FLAGS , (  0 |
            PSYS_PART_INTERP_COLOR_MASK |
            PSYS_PART_INTERP_SCALE_MASK
            )
           ,PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE
           ,PSYS_PART_START_ALPHA, 1.0
           ,PSYS_PART_END_ALPHA, 1.0
           ,PSYS_PART_START_COLOR, <0.0, 0.0, 0.0>
           ,PSYS_PART_END_COLOR, <0.0, 0.0, 0.0>
           ,PSYS_PART_START_SCALE, <0.1, 0.1, 0.1> // particle ookisa
           ,PSYS_PART_END_SCALE, <0.1, 0.1, 0.1>   // particle ookisa
           ,PSYS_SRC_MAX_AGE, 0.5                      
           ,PSYS_PART_MAX_AGE, (float)num
           ,PSYS_SRC_ACCEL, <0,0,0>
           ,PSYS_SRC_ANGLE_BEGIN, PI
           ,PSYS_SRC_ANGLE_END, PI
           ,PSYS_SRC_OMEGA, <0.0, 0.0, 0.0>
           ,PSYS_SRC_BURST_PART_COUNT, 1    // asiato kazu(ikutu?)
           ,PSYS_SRC_BURST_RATE, 1.0        // asiato kankaku(nan byou?)
           ,PSYS_SRC_BURST_SPEED_MIN, 0.0
           ,PSYS_SRC_BURST_SPEED_MAX, 0.0
           ,PSYS_SRC_TEXTURE,"asiato-dogL"  // asiato texture namae
        ]);
    }
}

右足scriptだよ
default
{
    state_entry()
    {

    }
   
    link_message(integer sendnum,integer num,string str, key id){
        llParticleSystem(
        [  PSYS_PART_FLAGS , (  0 |
           PSYS_PART_INTERP_COLOR_MASK |
           PSYS_PART_INTERP_SCALE_MASK
           )
          ,PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE
          ,PSYS_PART_START_ALPHA, 1.0
          ,PSYS_PART_END_ALPHA, 1.0
          ,PSYS_PART_START_COLOR, <0.0, 0.0, 0.0>
          ,PSYS_PART_END_COLOR, <0.0, 0.0, 0.0>
          ,PSYS_PART_START_SCALE, <0.1, 0.1, 0.1> // particle ookisa
          ,PSYS_PART_END_SCALE, <0.1, 0.1, 0.1>   // particle ookisa
          ,PSYS_SRC_MAX_AGE, 0.5                      
          ,PSYS_PART_MAX_AGE, (float)num
          ,PSYS_SRC_ACCEL, <0,0,0>
          ,PSYS_SRC_ANGLE_BEGIN, PI
          ,PSYS_SRC_ANGLE_END, PI
          ,PSYS_SRC_OMEGA, <0.0, 0.0, 0.0>
          ,PSYS_SRC_BURST_PART_COUNT, 1   // asiato kazu(ikutu?)
          ,PSYS_SRC_BURST_RATE, 1.0       // asiato kankaku(nan byou?)
          ,PSYS_SRC_BURST_SPEED_MIN, 0.0
          ,PSYS_SRC_BURST_SPEED_MAX, 0.0
          ,PSYS_SRC_TEXTURE,"asiato-dogR"  // asiato texture namae
        ]);
    }
}

scriptここまでー