「授業用」カテゴリーアーカイブ

コインドーザーの作成2

つづき

  1. 各オブジェクトに名前をつける(画像を参考に)
  2. ここからはコインを押すプッシャーを作成する
  3. move_blockを選択し,Component>Physics>Rigidbodyを選択する
  4. 追加されたRigid BodyコンポーネントのUse Gravityオフにする(重力に影響されなくなる)
  5. (更新)2018バージョンに合わせて動画手順を掲載します
  6. (動画の解説)まずmove_blockを選択し,InspectorからAddComponentを選択しAnimatorを追加する
  7. (動画の解説)Animationウィンドウ(またはAnimationタブ)のCreateボタンを押す
  8. (動画の解説)Animationの名前をblockにする
  9. (動画の解説)次に表示されたタイムラインのSamplesを30にする
  10. (動画の解説)左にあるAdd Propertyをクリックする
  11. (動画の解説)表示された中からTransfomのPositionの右にある+ボタンをクリック
  12. (動画の解説)ここから2秒前身,2秒後退するアニメーションを作成する
  13. (動画の解説)まず1秒付近にあるキーフレームを選択し,2秒に移動させる
  14. (動画の解説)次に再生バーも2秒に移動
  15. (動画の解説)次にPosition.zのキーフレームを選択する
  16. (動画の解説)Position.zの値を2にする
  17. (動画の解説)Animationの再生(ゲームの再生ではなく)し確認する
  18. (動画の解説)4秒付近に再生バーを移動し,キーフレームを追加する
  19. (動画の解説)さきほどと同様にposition.zの値を変化させる.今回は元の位置に戻すため4を入力する
  20. (動画の解説)再生し確認する
  21. Asset内のblock(アニメーションファイル)を探し,InspectorのLoop Timeにチェックを入れる(デフォルトでチェックが入っているかと思います)
  22. コインを落として確認してみる

     

次へ

コインドーザーの作成1

コインドーザーの作成

コインドーザー(コインプッシャー)を作成してみましょう.この内容は

  • Physics(物理演算)の復習と応用
  • 簡単なスクリプトによる制御

を演習します.

作成手順

  1. 新規シーンを作成
  2. Planを作成する.位置は(0,0,0)
  3. Planeの上にCubeを作成し図のように変更する
  4. このCubeを複製し,図のような位置に移動させる
  5. Cylinderを作成し,ScaleのYを0.1にする
  6. Cylinderを選択したまま,Component>Physics>Rigidbody を選択しRigidibodyコンポーネントを追加する
  7. このまま再生するとコインの動きにはならない
  8. それはCylinderにCapsule Colliderコンポーネントがついているためである
  9. そこでCapsule Colliderを取り除く.Capsule Colliderコンポーネントの右にある歯車アイコンからRemove Componentを選択する
  10. 次にMesh Colliderをアサインする.Component>Mesh Colliderを選択する
  11. 衝突を正確に計算するためにConvexにチェックを入れる
  12. 再生し確認してみること
  13. ここで一旦保存すること

つぎへ)

Unity基本操作(2020)

 

練習

復習や練習を兼ねてピタゴラ装置的な物を作ってみること

 

作例

最後にオチがあることが望ましい.障害物は多いほどいい.

作成の流れ

  1. 床(Plane)作成
  2. 障害物作成
  3. ボール作成(Physics設定)
  4. 障害物のうち物理シミュレーションが必要なものにPhysicsを設定
  5. 再生し確認(うまくいくまでくり返し)
  6. Recorderアセットインポート
  7. Recorderによるキャプチャ
  8. 提出

※全ての作業はUnity再生中はできません

作成手順

  1. GameObject>3D Object>Plane で板を取り出す
  2. カメラの位置を調整し,全体が映るようにする
  3. Inspectorで原点に配置し,Scaleを10にする
  4. GameObject>3D Object>Sphere で球を作成し,選択した状態で Component>Physics>Rigidbodyを選択し,球にRigid Bodyを割り当てる
  5. 球を選択し,InspectorにRigidbodyのコンポーネントが追加されている.このRigidbodyのMass(重量)を50kgにしてみる.他の設定についてはこちらを参考のこと(質量は自由に変えてまわない)
  6. 再生ボタンを押しゲームを開始し,球が落下するか確認する
  7. 落下しない場合,RigidbodyコンポーネントのUseGravity(上図も参考)にチェックが入っているか確認すること
  8. その他にも,動作させる(つまり固定しない)オブジェクトにはRigidBodyの設定をする(作例ではシーソー部分の板や円柱)
  9. バウンスの設定をする.アセットフォルダ内で 右クリック>Create>Physic Materialを作成
  10. 作成したPhysic Materianを選択し,Bouciness(反発係数)を0.7くらいに設定する(参考サイト
  11. 作成したPhysic  Materialを球のインスペクタ内にあるSpecular ColliderコンポーネントのMaterialの欄に入力する(※他のオブジェクトの場合でもColliderに入れるとバウンスの設定ができる)
  12. Colliderは衝突判定の際に使用される簡易形状のこと.複雑な形状のオブジェクトも,簡易的なColliderを用いて衝突判定をおこなう.こうすることで計算資源を有効活用している.
  13. なお,Colliderが無いオブジェクトは動かしてもすり抜ける(アニメの幽霊みたくなる)ので注意.特にRigidbodyをつける際などは注意
  14. 再生し球が落下したあとバウンスするか確認のこと
  15. 各オブジェクトを配置し,おもいがけない動作をするように組んでみること

 

参考

こうした物理シミュレーションを応用して作成できそうなゲームやプロジェクトを考えてみてください.コインドーザーやピンボールなどもその一例です.

また物理演算を使いYoutubeで動画を作成している方もいます.(アンパンマンの頭をアニメのように入れ替え(以下略)や,竹コプターを(以下略)のような動画)

提出(進度によって変更の可能性あり)

動画のキャプチャーがうまく行きそうな場合,キャプチャーした動画を提出してもらう予定です.

Recorderによるキャプチャ方法

Unityから提供されているRecorderアセットを読み込み,作成したシミュレーションを動画にし提出してもらいます.

  1. Unity内のAssetStoreUnity Recorederと検索
  2. 無料でダウンロードできる
  3. ダウンロード後,ボタンがインポートに変わるので,インポートする(Unity再生中ににはできません)
  4. 現行バージョンの場合 Window>General>Recorder>ReorderWindow(※このメニューはUnity Recorederをインポートしないと表示されません)
  5. 現行バージョンの場合 +Add New Recorders>Movieを選択
  6. 図の設定(Windowsの場合設定が変更になる場合もある)にし,START RECORDINGをクリックし録画を始める
  7. Unityが再生され,録画が始まる
  8. Unity内の動作が終わるまで待ち,STOP RECORDINGをクリックし録画を終了させる(※Unityは再生モードのままになっているので,自分で停める
  9. 現行バージョンの場合 プロジェクトフォルダ内のRecordingsフォルダ内に録画された動画があるので再生する
  10. ※ビルド時(アプリ化する際)はUnity Recorderは取り除きましょう
  11. 以下は旧バージョンの場合の対処法です
  12. (旧バージョンの場合)メニューバーのTools>Recoreder>Video を選択(※このメニューはUnity Recorederをインポートしないと表示されません)
  13. (旧バージョンの場合)設定は図のとおり.Flip Image Verticallyは下図のようにオフにすること
  14. 最後にウィンドウ下部のstart recordingを押しキャプチャを始める.止めたい時はstop recordingを押す
  15. ウィンドウズのデスクトップからUnityのプロジェクトフォルダを探す.
  16. プロジェクトフォルダ内(アセットフォルダより上の階層)にRecordingフォルダができているので,その中のムービーを確認し,思い通りの動きをした成功映像をMaNaBoに提出

 

簡単なゲームにしてみる(2)

効果音をアサインする

  1. 音再生の準備をする
  2. scriptを選択Component>Audio>Audio Source を選択する
  3. scriptAudio Sourceが追加されます
  4. Audio Sourceは音再生装置と考えてください

myFishを少し改造する

  1. myFishを選択し,Component>Physics>sphereColider(当たり判定用球)を追加する
  2. edukitの中のhitObjSendermyFIshにアサインする
  3. このスクリプトはプレーヤー(myFish)に,当たったColliderが何なのかを,scriptに送るプログラムである
  4. 追加したコライダのisTriggerにチェックを入れる
  5. edukit内にあるArrow2PrefabをmyFishにアサインする
  6. ゲームを再生し,エサが自動向かい,音が出るか,時間表示は適切かなどを確認する
  7. Arrow2の矢印表示スクリプトは以下のサイトのスクリプトを参考にしています
    http://beatdjam.hatenablog.com/entry/2014/10/22/032751

シーン遷移の準備

  1. File>Build Settings… を選択
  2. Add open sceneをクリックし,ビルドするシーンの一覧に現在のシーンを追加する
    buidset1
  3. edukit内のopとendも追加し,edu/opのシーンが最上段にくるようにドラッグして移動させる
    build2
  4. BuildeSettingsのウインドウを閉じたあと,シーンを保存しておく

シーン遷移情報の設定

  1. edukit内opを開く
  2. opScriptを選択し,メインシーン名にゲームのメインシーン名を入力する(各自異なるので注意.画像例は02)
    opscne
  3. 保存し,ゲームを再生してみる
  4. ゲームスタートボタンが押せない場合、Canvas展開しsetsumeiPanelオフにするか(説明文が書けない),setsumeiPanelとその子のsetumeiのRaycast Targetをオフにする(パネルを残してマウスクリックを無視する設定)

レベル調整

  1. 何度かテストプレイし遊びやすく調整する
  2. また,プレイしたことのない人に遊んでもらい,難易度を調整すること
  3. オープニング→ゲーム→エンディング と1周する状態になりバグも出ないようであればビルドを実行する
  4. File>Build SettingsでBuild Settingsの画面を開き,Buildをクリックする
  5. 保存先を設定すればビルドが開始される
  6. ビルドが成功したら,早速アプリを実行してバグがないか確認すること
  7. 時間が0秒以下になってもゲームできてしまうバグを修正できる場合は修正してみること(ヒント
  8. Mulitipurposeカメラのpivotの位置などを修正しプレイしやすくする

提出について

  1. ビルド後,Mac版は1つのファイルが作成されるが,Windows版はアプリとそれが使用するファイルの入ったフォルダが作成される
  2. 提出時の際Windows版はアプリとそれが使うフォルダの3つを提出する必要があるので注意(Windows ではアプリケーションのすべてのリソースを含む Data フォルダーと共に実行可能なファイル (.exe) とdllファイルが生成されます)
    公式サイトにはまだ掲載されておりませんのでご注意ください

どのようなゲームにしますか?

  • 楽しい空間にすることはもちろんのこと
  • オリジナルのエサをMayaでモデリングする(テクスチャも)
  • エサとなる小魚をモデリングし,泳がせておいかける
  • 照明や地形や空気感にこだわる
  • オンライン対戦仕様に変更する
  • 魚以外のキャラクタも登場する
  • etc,,,,

簡単なゲームにしてみる(1)

概略

  • 複数シーンをまたぐゲーム化をおこなう
  • 今回は作成手順を理解するため,スクリプトは提供されたものを使用する
  • 画像等は古いものを使っている場合がある
  • 今回は指定個数のエサを何秒間でとることができるかを競うゲームとします

準備・パッケージの読み込み

  1. スクリプトなどが入ったedukit3.unitypackageをダウンロードする(ダウンロードはここから)
  2. Assets>ImportPackage>Custom Package… でダウンロードしたパッケージを読み込む
  3. Asset内にedukit3というフォルダが作成される

タグの準備

  1. Hierarchy内にある適当なオブジェクトを選択する
  2. InspectorのTagをプルダウンし,AddTagを選択する
  3. pointObjをというタグ追加する
    addtag2

スクリプトを空のオブジェクトに配置する

  1. Gameobject>Create Empty で空のオブジェクトを作成し名前をscriptにする

  2. Asset内にある(さきほど読み込んだ)Edukit>myQuest をscriptにアサインする
  3. baitPrefabbaitObjにアサインする(魚の下の矢印画像は後で表示できます)
  4. edukit3の中にあるSEフォルダを展開し,効果音をアサインする(画像参照)
  5. その他の数字も設定する
  6. ※時間がマイナス秒になっても動作するのは仕様です(追記)

解説

  1. GameObjectにどんなコンポーネントをアサインするかでそのオブジェクトの性質が変わる.カメラコンポーネントをアサインすればカメラに,Meshfilterをアサインすれば3Dオブジェクトに,今回はスクリプトだけをアサインしている
  2. この「空のオブジェクト」は便利な入れ物と考えてよい.CGソフトではNullや,ロケーターと呼ばれている

UIprefabを配置する

  1. Asset内にある(さきほど読み込んだ)Edukitの中のUIprefabをヒエラルキーにドロップする
  2. UIprefabを展開し,timeTextとnokorisuをmyQuestの該当の箇所にドロップする
  3. エンディングシーン名も指定する
  4. なおUIについてはこちらも参考に

つぎへ

 

 

Tapで泳ぐプログラムを追加する

概要

  • 移動できる範囲を決めるNavMeshを設定
  • 魚にNavigationAgentを設定する
  • Tap移動のプログラムを魚にアサインする

設定など

  1. 地面代わりのPlaneなどを置く.そのPlaneにNavMeshの設定こちらを参考に)をする
  2. HierarchymyFishを選択し,InspectorAdd Componentを押しnavで検索すると出てくるNav Mesh Agentを選択して追加する
  3. 追加したNav Mesh AgentのBase Offsetを0.5にする
  4. TapMove用UnityPackageをここからダウンロードする
  5. ダウンロードしたUnityPackageファイルをAssets>Import Package>Custom Packageで読み込む
  6. Assets内にTapMoveフォルダができる.この中のtapMoveスクリプトをステージ上のmyFishにアサインする
  7. 次にInspectorのtapMovecirclePrefabをアサインし,RayLengthを15くらいにする
  8. Multipurpose CameraRigを設定する(忘れた場合はこちら).ターゲットはmyFishとする.魚とカメラの距離はPivotで調整する.MainCameraを削除するのを忘れないこと
  9. 一旦保存し,ゲームを再生,Planeの上をクリックしてみる
  10. 魚が泳いでいきます.クリックはタップにも対応しているので,スマートホン用にビルドした場合はタップで魚が泳ぎます
  11. タップで誤動作がおきる場合は,myFishのレイヤーをDefautl以外にする.タップを検知するレイヤーはDefaultレイヤーのみになっているため
  12. 以下参考動画

(Unityへの読み込みはここまで)

UnityにFBXファイルを読み込む(2)

Animation Controllerの設定

  1. Assets>Create>AnimationControllerAnimationControllerを作成する.名前はfishControllerにしておく(名前は何でもかまわない)
  2. 作成したAnimationControllerをダブルクリックする
  3. Animation Contorller画面が開かれる
  4. この画面にFish内のTake 002をAnimation Contorller画面にドロップする
  5. 間違えてTake 001をドロップ場合は,Take 002をドロップし,Take 002の上で右クリックしSet As Layer Default Stateを選択する
  6. 緑のEntryのとTake 002が接続されていればOK
  7. この設定はこのシーンが始まった場合にTake 002を自動でループ再生させるという意味.キャラクタが何もしていない時の動作をIdle(アイドル)と呼ぶが,これでTake 002がIdleの動作となった
  8. 次にTake 001のアニメーションをドロップする
  9. ライトグリーンのAny Stateの上で右クリックし,Make Transitionを選択し,Take 001につなげる

  10. これでどんな動作の状態(Any State)からでもTake 001のアニメーションが再生できる
  11. 次に,Take 001の上で右クリックし,Take002につなげる

  12. これで.Take 001は1度しか再生しないため,再生が終わった後にIdleの動きに戻せた
  13. 跳ねる動きが長いため,Take001を選択しInspectorのSpeedを3にする(3倍速再生)
  14. 同様に尾びれを動かす動作の1サイクルが長いため,Take002を選択しInspectorのSpeedを2にする(2倍速再生)
  15. この再生速度は目安です.好きな値に設定してかまいません.
  16. 次にTake 001を再生するトリガーを設定する
  17. Parametersのタブの+ボタンからTriggerを選択しトリガーを追加,名前をswimにする(この名前は変えないこと)
  18. 次にAny StateからTake 001につながる矢印を選択し,InspectorConditions+ボタンを押し,swimを選択する
  19. これでswimのトリガーでTake001が再生され,その後Take 002のくり返し再生に戻る設定ができた.このように何か動作をしたら必ずIdleの動作に戻す必要がある

myFishをシーンに配置する

  1. InspectorAnimatorに上で作成したAnimationControllerをアサインする
  2. 保存してゲームを再生してみること.魚が泳いでいます(Idleの動き)

次へ

UnityにFBXファイルを読み込む(1)

概要

FBXファイルを読み込み,アニメーションを分割し動作に応じた動きの設定をする

Unityへの読み込み

  1. Assets内にドラッグ&ドロップ(以下D&D)してmyFish.fbxを読み込む
  2. myFishを選択し,Inspectorに魚が表示されるので,再生ボタンを押し,アニメーションが読み込まれているか確認する
  3. 以前作成した魚のテクスチャをD&Dで読み込む.これでテクスチャが反映される(※テクスチャがうまく貼れていない場合はUVを設定する前のモデルを使っている可能性がある)
  4. InspectorModelのタブにあるScale Factorを10(10倍の大きさ)にし,Applyを押す
  5. Rigのタブを選択し,Root nodejoint1にし,Applyを押す
  6. Animationのタブを選択
  7. Clipsの下のスライドバーまたはテキストボックスで,魚がジャンプしはじめ,終わるまでの範囲を指定する.Startが3,Endが25くらいでいい.これで200フレームあったアニメーションの最初部分が分けられた
  8. Applyをクリックする
  9. 次にClipsの右下にある+ボタンを押す.Take001(1)またはTake 002が作成されるのでそれを選択する(名前を変更する場合は下の入力フィールドを使うこと)
  10. これで読み込んだ200フレームのアニメーションが,Take 001とTake 002に分けられた
  11. 魚の尾びれが1サイクルするアニメーションの範囲を指定する.(参考値Startは128,Endは166)
  12. 次にLoop Timeにチェックを入れ,Loop Poseにもチェックを入れる
  13. loop matchのランプがグリーンになっていることを確認する
  14. Root Transform RotationBased Upon(at Start)をOriginalにする.またRoot Transform PositionBased UponOriginalにする
  15. 同様にTake 001を選択し,Root Transform RotationBased Upon(at Start)をOriginalに,またRoot Transform PositionBased UponOriginalにする
  16. Fishの右矢印を開いて展開すると中にTake 001Take 002のアニメーション2種類ができているのを確認すること

つづく

MayaのFBX exporterが選択できない場合

MayaのFBX exporterが選択できない場合

Mayaにプラグインをロードすることで対処できる

  1. ウィンドウ>設定/プリファレンス>プラグインマネージャを選択する
  2. fbxmaya.dll のロード自動ロードにチェックをいれ,Mayaを再起動する
  3. fbxmayaがロード済みの状態

参考WEB

https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/JPN/Maya/files/GUID-18A2CDD7-3334-4FC1-A1B3-A308AD331BB2-htm.html

Maya->Unity 2018版

概要

  • Unityに魚のアニメーションを取りこむ準備をする
  • 最初に,MayaのIKアニメーションをベイク(焼き付け)する
  • 次にUnity互換性のあるFBX(FilmBox)形式で書き出す
  • Unityはmaya形式のファイルにも対応しているが,FBXを使う事が多いので今回はFBX形式とする

書き出しの準備

  1. 最も上の階層のボーン(joint1)を選択する
  2. 次に編集>キー>シミュレーションのベイク処理>□を選択
  3. シミュレーションのベイク処理オプションが表示される
  4. 階層は下位を選択,コントロールポイント,シェイプ(今回シェイプアニメーションは使用していませんが,,)にチェックを入れ,適用を押す
  5. タイムラインに沢山のキーフレームが打たれる.IKやコンストレインアニメーションはそのままではUnityで使えないので,全て1フレ毎のキーフレームに変換される

FBX書き出し設定

  1. FBX形式で書き出す設定をする.ファイル>全て書き出し>□ を選択しオプションを表示させる.(通常は選択項目だけ書き出すが,こちらの方が簡単なので)
  2. オプションが表されるので,ファイルタイプをFBX exporterを選択,次にプリセットを編集を押す(FBX exporterが選択できないときはこちらを参考)
  3. プリセットをAutodesk Media & Entertaimentを選択
  4. ニメーションと組み込みメディア(これでMaterialを書き出される)にチェックが入っているか確認
  5. 設定を変えると,プリセットの部分がカスタムに変化するが気にしなくてよい(プリセットをカスタマイズしたからカスタムに変わる)
    閉じるを押し,プリセット編集を終わる
  6. 設定を保存して閉じる
  7. ファイル>全て書き出しを選択しファイル名を決め,ファイルの種類がFBX exporterになっているか確認し,すべて書き出しを押す
  8. コンストレイン系のエラーが出るがコンストレイン系はベイク済みなので気にしない
  9. ファイルが出力されたらひとまず完了

次へ