スキップしてメイン コンテンツに移動

ノイマンの軛 Von Neumann bottleneck が解けてきた

Unityでドアの開閉はAnimatorそれともiTween?


Mac Mini M2 の Unity で Sketchup のデータを復元したつづき。
以前、苦労して作成したドアの開閉が動作しないので修復する。
どうやって動かしていたのか、また忘れそうなので記録しておく。            



Animator


  1. 左右のドア PlaneL, PlaneR に Animator : PlaneL2, PlaneR2 を設定
  2. Animator はそれぞれ OpenDoor, CloseDoor, idleDoor の3つの Animation を制御
    Parameter : openDoor (Bool) を設定
  3. Animation には Transitions とその動作条件 Parameter : openDoor を設定
    Animation Window(cmd+6) で時間による動作を設定
  4. C# からの実行: "openDoor" の値を設定
 public Animator animatorBoschDoorRight;
 public Animator animatorBoschDoorLeft;

 public void animatorDoor(){
   SoundManager.Instance.PlaySE(23);  // ドアの開閉開始時の効果音
   animatorBoschDoorRight.SetBool("openDoor", !animatorBoschDoorRight.GetBool("openDoor"));
   animatorBoschDoorLeft.SetBool("openDoor", !animatorBoschDoorLeft.GetBool("openDoor"));
 }
 public void OnAnimationCompleted(string doorObj){
   SoundManager.Instance.PlaySE(24);  // ドアの開閉終了時の効果音
 }
ドアの開閉開始時の効果音は簡単だが、開閉終了時の実行はタイミングを測るのが難しい。
  1. Animation Windows でイベントを追加(OpenDoorR2, CloseDoorR)
  2. イベントの実行タイミングを指定
  3. 実行する Function を設定
  4. このとき Object はイベントを追加した Animation を含むものを指定しなければならないので注意。( OpenDoorR2 でも PlaneR2 でもOK)

    Function が設定済みの Object があるからといって、Animation に関係ないものを指定すると「AnimationEvent 'OnAnimationCompleted' has no receiver!のエラー」になる。


iTween

そもそも「ヘントの祭壇画」の開くのをやりたくてドアの開閉を始めたのだった。
iTween で実装したが、Cluster ではスクリプトが使えないため、Animator を学習しながら動かした。これが上手くいたので、絵だけ差し替えてヒエロムニス・ボスの「快楽の園」の扉を動かしたのだった。 


画像を回転させながら、横移動していたが、画像の横幅が2倍のObject を作成して、これの片側に寄せて画像を置けば回転だけで済むことにいまさら気がついた。


上下動を加えたが、基本は左右のドアを iTween.RateTo するだけ。

public void doorOpenClose(){
Debug.Log("L31 doorControl.cs right rot: " + doorRight.transform.localEulerAngles.z);
SoundManager.Instance.PlaySE(23); // ドアの開閉動時のギーーという音
float z = 180f;
float t = 5f;
float zz = 10f; // ドアの上下動の量
if(doorRight.transform.localEulerAngles.z == 180f){ // 開く
iTween.RotateTo(doorLeft, iTween.Hash("time", t, "z", -z,
"oncomplete", "onDoorRotateComplete", "oncompletetarget", this.gameObject));
iTween.MoveBy (doorLeft, iTween.Hash("time", t, "z", -zz));
iTween.RotateTo(doorRight, iTween.Hash("time", t, "z", z));
iTween.MoveBy (doorRight, iTween.Hash("time", t, "z", -zz));
}else if(doorRight.transform.localEulerAngles.z < 1f ){ // 閉じる
iTween.RotateTo(doorLeft, iTween.Hash("time", t, "z", z,"oncomplete",
"onDoorRotateComplete", "oncompletetarget", this.gameObject));
iTween.MoveBy (doorLeft, iTween.Hash("time", t, "z", -zz));
iTween.RotateTo(doorRight, iTween.Hash("time", t, "z", -z));
iTween.MoveBy (doorRight, iTween.Hash("time", t, "z", -zz));
}
}

void onDoorRotateComplete(){
SoundManager.Instance.PlaySE(24); // ドアが開閉終了時のバッタンという音
float t = 0.75f;
float zz = 10f;
iTween.MoveBy (doorLeft, iTween.Hash("time", t, "z", zz));
iTween.MoveBy (doorRight, iTween.Hash("time", t, "z", zz));
}











参考
【Unity】アニメーション終了時にメソッドを呼び出す
https://takap-tech.com/entry/2021/04/13/013635


コメント

このブログの人気の投稿

ノイマンの軛 Von Neumann bottleneck が解けてきた

ディープラーニング  で画像認識の精度が上がり第3次人工知能ブームが巻き起こった。1998年の論文から2012年の画像コンペディションまで14年。 第3次人工知能ブーム https://www.youtube.com/embed/UAlGNAx5ngo?si=tdyeHcNKBMl46HWA 生成AI  ( G enerative Artificial Intelligence )は2017年のトランスフォーマーの論文( "Attention is All You Need" )から2022年の  ChatGPT  ( Chat Generative Pre-trained Transformer )まで5年間。 第4次人工知能ブームというべきか第3次ブームは2段ロケットだというべきか。 概説 人工知能  生成AIは新しい技術なので解説本はまだ少ないが、  ちくま学芸文庫から文庫オリジナルの生成AIまで含めた本がでていた。 第8講 トランスフォーマー・生成 AIの心臓部 P204 この講を終わるにあたり、 トランスフォーマーは、現代のコンピュータとは別のタイプの全く新しい発想の計算のアーキテクチャである ことを指摘しておく. この新しいアーキテクチャでポイントとなるのは、メモリアクセスである.コンピュータの計算ではデータの記憶は要となるものである。現代のコンピュータが実行する命令を細かく分解していって、物質で言えば原子のレベルまで細分化したとする。すると、その働きは、既にあるデータに演算を施して新しいデータを計算することと、その際に必要となるデータをメモリから取り出すことと、計算の結果をメモリに記憶することからなる。メモリには番地がついていて、データを取り出したり、格納したりするときは、データのある場所を番地により指定する。 トランスフォーマーのメモリに相当するのは、翻訳対象の一文中の単語のセットである。トランスフォーマーでは、このメモリから読み出すときの番地を指定する必要はなく、ワードエンベーディング間の距離から自動的に決まるようになっている。トランスフォーマーでは、読み出し先も書き込み先もワードエンペーディングのベクトルの内容により自動的に決まる。 現代のコンピュータでは、書き込みや読み出しはデータが格納されている場所のアド...

御食国志摩の伊勢神宮

  伊勢神宮ははじめてでしたが、大嘗祭のとき皇居の大嘗宮をみに何時間も大行列に並んだことを思い出しました。  正式参拝(御垣内参拝/みかきうちさんぱい)される方々の姿には感銘を受けました。  内宮のガイドの方に「1000年ぶりの天皇の神宮参拝」について尋ねたら「明治天皇は軍艦に乗ってやってきた!」と返ってきて、後で調べたら上陸記念碑も建っているようでした。記紀と違うことも伊勢神宮の文献にはいろいろある、みたいなこともちょといっておられました。 その後、すぐ昼食で、伊勢神宮宇治橋正面「勢乃國屋」の入り口で「蘇民将来子孫門」のみやげ品陳列はかなりの違和感でしたが、そういえば伊勢ではこの注連縄を一年中飾っているという話を聞いたことがありました。 記紀には登場するけど神宮にはでてこない スサノオの気配 ですかね。  次回は早朝に参拝して、お昼はおかげ横丁でいろいろなものを少しづつ食べ歩きしたいものです。  ホテルの食事でも御食国(みけつくに)を感じ、豊かなところだから歴史的にいろいろなものを受け入れ、取り込んでこれたのだと舌で理解しました。五芒星やら蘇民将来子孫門やら。  外宮の多賀宮を参拝したら、元伊勢、籠神社に行かなくてはと、若狭も御食国ですし。 メモ ・   12年くらい前いろいろ調べてまとめたメモ           ・藤原不比等が神を入れ替えた?   本来なら、天皇家の守神にもなったであろう「伊勢の神」を、恐ろしい存在にしてしまったのは、持統天皇と藤原不比等だと思う。祟り神でも、祀りあげれば、恵みをもたらす神に代わるはずだからだ。しかしそれを怠り、伊勢に放逐したわけだ。それはどうしてなのか。  答えは簡単なことだ。スサノヲは天皇家にとって大切な神だったが、もうひとつ「蘇我系の神」の側面があった。乙巳(いっし)の変(645)で蘇我入鹿を滅ぼし、藤原氏は改革者・蘇我氏の手柄を横取りし、スサノヲに簑笠を着せて「悪神」に仕立て上げてしまった。そこで藤原不比等はスサノヲをアマテラスにすり替え、その上で伊勢に封印してしまったのだろう。 ※本記事は、『スサノヲの正体』(新潮新書)の一部を抜粋、再編集したものです。    https://news.yahoo.co.jp/a...

量子力学のはじまり

 2017に量子コンピュータ D-Wave 2000Q が報道された。 これに刺激され、量子力学関係の本を再読したり、量子コンピュータの本をいくつか読んだ。 量子力学のはじまり 炉の温度を確認するために炎を見つめると眼がやられる。鍛治の神は職業病として片目が不自由。産業革命以降、炉の温度を求める数式の研究が進められ、ようやく実験結果と一致する数式が完成した。 数式はできたが、これは「光の波のエネルギーはある決まった”とびとびの値”しかとらない」ことを意味していた。 こうして量子力学が始まった。 科学の発見   エネルギーを失い、原子核の中へと落ちてしまわないのはなぜなのだろう。 そんなことが起きるとすれば、安定した原子の存在があり得なくなるだけではない。 この小さな原子崩壊の際に放出される電磁波の周波数は連続スペクトルを形成するはずだ。 だがそれでは、原子が特定の飛び飛びの周波数(ガスのスペクトルの中で輝線または暗線として見られる)でしか電磁波を放出・吸収できないという観測結果に反することになる。何がこの特別な周波数を決定しているのだろう。 この疑問に対する答えは、 20世紀最初の30年間に、量子力学(ニュートン以来、物理学を最もラジカルに変えた理論)の発達とともに明らかになっていった。その名が示すとおり、 量子力学はさまざまな物理系のエネルギーの量子化つまり、飛び飛びの値にすることを必要とする。 1913年、二ールス・ボーア(訳注:1922年、原子構造とその放射についての研究でノーベル物理学賞)は、「原子は特定のエネルギー状態でしか存在できない」として、単純な原子についてそのエネルギーを計算するための数式を発表した。 それ以前のマックス・ブランク(1918年、エネルギー量子の発見なとでノーベル物理学賞)の研究に続いて、アインシュタインがすでに1905年に、「光のエネルギーは光量子のちに光子と呼ばれるようになったの中にある。光子は光の周波数に比例するエネルギーを持つ」 と指摘していた。 ボーアが説明したとおり、原子が光子1個を放出することによってエネルギを失うとき、その光子のエネルギーは最初の原子状態のエネルギーと最後の原子状態のエネルギーの差に等しくなければならない。この条件が光子の周波数を決定している。 光子を放出すること...