Mayaを使ってキャラクタのウェイト調整をおこないます
「メディア工学特別講義A」カテゴリーアーカイブ
シーン遷移の基本
シーン遷移の基本を学びます.
ここでは,トップ画面>ゲーム画面>エンド画面の3つのシーンを移動しまたトップ画面へ戻ります.
ワークフロー
- シーンを作成
- ボタンを作成
- スクリプトを作成
- ボタンにスクリプトをアサイン
- ビルド設定をする
- 実行する
トップシーンを作成する
- トップ画面用シーンを作成する
- トップ画面用シーンに適宜UI>Textを入れて遷移時にどの画面にいるか分かるようにする
- トップ画面にGameObject>UI>Buttonでボタンを作成する
- 位置調整をする(参考画像)
スクリプト作成
- scnChangeというファイル名でスクリプトを作成する(※ファイル名とclass名は同一にすること)
- 全て以下に入れ替え保存する(※このスクリプトは他でも使い回しできます)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;//これを必ず追加しないと使えない public class scnChange : MonoBehaviour { public string scnName;//変数scnNameをInspectorからセットできるようにする public void goScene(){ SceneManager.LoadScene(scnName);//変数scnNameのシーンにシーン遷移する } }
スクリプトをボタンにアサインする
- GameObject>CreateEmpty で空のオブジェクトに上で作成したスクリプトをコンポーネントに追加する
- Scn Nameの欄にジャンプ先のシーン名を入力する(※これがInspectorに表示されるのは10行目の変数宣言をpublicにしているから)
- ボタンを選択し,OnClickの+ボタンでリストを追加する
- 追加したリストに作成した空のオブジェクト(1でスクリプトがついているもの)をアサインする
- NoFunctionのプルダウンからscnChange>goSceneを選択する(13行目のpublic void goScene を実行するという意味,publicがついているとボタンから押せる)
ビルド設定をおこなう
- File>Build Settings…でビルド設定を開き,ドラッグ&ドロップで,ここで作成した最初のシーンと,これまで作成しらゲームのシーンを追加する
- 保存し,トップ画面用シーンを再生し,ボタンを押してシーン遷移するか確認する
- シーン遷移後,ゲーム画面の明るさが少し暗いようでしたら,そのシーンのWindow>Lightingを選び,AutoGenerateのチェックを外し,Generateを一度押しておきます
実習
- エンドシーンを作成する
- ゲームシーンからエンドシーン,エンドシーンからトップシーンへとジャンプさせ3つのシーンを1周できるようにすること
コインドーザーの作成3
つづきです
次にボタンを押すとコインが落ちる仕組みを作成する
まず,
- GameObject>UI>Button でボタンを作成する
- ゲーム画面にボタンが表示される
- ヒエラルキーで作成されたボタンを選択する
- ボタンの位置調整をする.まず,右上を基準モードにする(画像1,2の順に選択)
- 次にゲーム画面を見ながら位置を調整し,画面の右端に移動させる(値は各自で自由に設定すること)
- GameObject>Create Emptyで空のオブジェクト(位置情報のみのオブジェクトになる)を作成する.後でこの位置からコインを生成させるための準備
- 名前はに変更しておくこと
- 参考の位置
- Asset内で右クリック>Create>C# Scriptを作成し,名前をcoin_genにする
- coin_genを開きスクリプトエディタ(Visual Studio等)を開き中身を以下に入れ替える
using System.Collections; using System.Collections.Generic; using UnityEngine; public class coin_gen : MonoBehaviour { public Transform spawnpos;//インスペクタに位置情報用のドロップボックスを表示 public GameObject coninPrefab;//プレファブをアサインするドロップボックスを表示 void Start () { } // Update is called once per frame void Update () { } //public化することでボタンからクリックで実行きるようになる public void genBtn(){ Vector3 pos = spawnpos.transform.position;//spawnposの位置をvector3形式にし,posに入れる Instantiate(coninPrefab, pos, Quaternion.identity);//coninPrefabを生成させる } }
- 再度空のオブジェクトを作成し,名前をscriptに変更する
- 作成したcoin_genをscriptにアサインする
- インスペクタに表示されたspawnposにspawnPointをアサインする
- (下図を確認)
- HierarchyにあるcoinをAssetsにドロップする. coinがPrefab化(青い色に変わる)する.Hierarchyのcoinはこの段階で取り除く
- ヒエラルキーにscriptを選択し,coinPreをCoinPrefabをにアサインする
- ゲームを再生し,ボタンを押しコインが落ちてくるのを確認する
時間があればさらに改造してみましょう.
追記(2018/10/12)
落ちてきたコインを消すスクリプト.コライダにアタッチする.ファイル名はdestroy.csとする.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class destroy : MonoBehaviour { public void OnTriggerEnter(Collider other){ Destroy(other.gameObject); } }
追記(2019/12/03)
move-blockがコインで弾かれる方は以下の設定をする
(A)move-block>RigidBody>Constrain のFreeze PositionをZ以外に全てチェックを入れる
(B)Coin(Prefab)のRigidBodyのMassをなるべく軽くする(0.05 kg)など
コインドーザーの作成2
つづき
- 各オブジェクトに名前をつける(画像を参考に)
- ここからはコインを押すプッシャーを作成する
- move_blockを選択し,Component>Physics>Rigidbodyを選択する
- 追加されたRigid BodyコンポーネントのUse Gravityをオフにする(重力に影響されなくなる)
- (更新)2018バージョンに合わせて動画手順を掲載します
- (動画の解説)まずmove_blockを選択し,InspectorからAddComponentを選択しAnimatorを追加する
- (動画の解説)Animationウィンドウ(またはAnimationタブ)のCreateボタンを押す
- (動画の解説)Animationの名前をblockにする
- (動画の解説)次に表示されたタイムラインのSamplesを30にする
- (動画の解説)左にあるAdd Propertyをクリックする
- (動画の解説)表示された中からTransfomのPositionの右にある+ボタンをクリック
- (動画の解説)ここから2秒前身,2秒後退するアニメーションを作成する
- (動画の解説)まず1秒付近にあるキーフレームを選択し,2秒に移動させる
- (動画の解説)次に再生バーも2秒に移動
- (動画の解説)次にPosition.zのキーフレームを選択する
- (動画の解説)Position.zの値を2にする
- (動画の解説)Animationの再生(ゲームの再生ではなく)し確認する
- (動画の解説)4秒付近に再生バーを移動し,キーフレームを追加する
- (動画の解説)さきほどと同様にposition.zの値を変化させる.今回は元の位置に戻すため4を入力する
- (動画の解説)再生し確認する
- Asset内のblock(アニメーションファイル)を探し,InspectorのLoop Timeにチェックを入れる(デフォルトでチェックが入っているかと思います)
- コインを落として確認してみる
(次へ)
コインドーザーの作成1
コインドーザーの作成
コインドーザー(コインプッシャー)を作成してみましょう.この内容は
- Physics(物理演算)の復習と応用
- 簡単なスクリプトによる制御
を演習します.
作成手順
- 新規シーンを作成
- Planを作成する.位置は(0,0,0)
- Planeの上にCubeを作成し図のように変更する
- このCubeを複製し,図のような位置に移動させる
- Cylinderを作成し,ScaleのYを0.1にする
- Cylinderを選択したまま,Component>Physics>Rigidbody を選択しRigidibodyコンポーネントを追加する
- このまま再生するとコインの動きにはならない
- それはCylinderにCapsule Colliderコンポーネントがついているためである
- そこでCapsule Colliderを取り除く.Capsule Colliderコンポーネントの右にある歯車アイコンからRemove Componentを選択する
- 次にMesh Colliderをアサインする.Component>Mesh Colliderを選択する
- 衝突を正確に計算するためにConvexにチェックを入れる
- 再生し確認してみること
- ここで一旦保存すること
(つぎへ)
Unity基本操作(2020)
練習
復習や練習を兼ねてピタゴラ装置的な物を作ってみること
作例
最後にオチがあることが望ましい.障害物は多いほどいい.
作成の流れ
- 床(Plane)作成
- 障害物作成
- ボール作成(Physics設定)
- 障害物のうち物理シミュレーションが必要なものにPhysicsを設定
- 再生し確認(うまくいくまでくり返し)
- Recorderアセットインポート
- Recorderによるキャプチャ
- 提出
※全ての作業はUnity再生中はできません
作成手順
- GameObject>3D Object>Plane で板を取り出す
- カメラの位置を調整し,全体が映るようにする
- Inspectorで原点に配置し,Scaleを10にする
- GameObject>3D Object>Sphere で球を作成し,選択した状態で Component>Physics>Rigidbodyを選択し,球にRigid Bodyを割り当てる
- 球を選択し,InspectorにRigidbodyのコンポーネントが追加されている.このRigidbodyのMass(重量)を50kgにしてみる.他の設定についてはこちらを参考のこと(質量は自由に変えてまわない)
- 再生ボタンを押しゲームを開始し,球が落下するか確認する
- 落下しない場合,RigidbodyコンポーネントのUseGravity(上図も参考)にチェックが入っているか確認すること
- その他にも,動作させる(つまり固定しない)オブジェクトにはRigidBodyの設定をする(作例ではシーソー部分の板や円柱)
- バウンスの設定をする.アセットフォルダ内で 右クリック>Create>Physic Materialを作成
- 作成したPhysic Materianを選択し,Bouciness(反発係数)を0.7くらいに設定する(参考サイト)
- 作成したPhysic Materialを球のインスペクタ内にあるSpecular ColliderコンポーネントのMaterialの欄に入力する(※他のオブジェクトの場合でもColliderに入れるとバウンスの設定ができる)
- Colliderは衝突判定の際に使用される簡易形状のこと.複雑な形状のオブジェクトも,簡易的なColliderを用いて衝突判定をおこなう.こうすることで計算資源を有効活用している.
- なお,Colliderが無いオブジェクトは動かしてもすり抜ける(アニメの幽霊みたくなる)ので注意.特にRigidbodyをつける際などは注意
- 再生し球が落下したあとバウンスするか確認のこと
- 各オブジェクトを配置し,おもいがけない動作をするように組んでみること
参考
こうした物理シミュレーションを応用して作成できそうなゲームやプロジェクトを考えてみてください.コインドーザーやピンボールなどもその一例です.
また物理演算を使いYoutubeで動画を作成している方もいます.(アンパンマンの頭をアニメのように入れ替え(以下略)や,竹コプターを(以下略)のような動画)
提出(進度によって変更の可能性あり)
動画のキャプチャーがうまく行きそうな場合,キャプチャーした動画を提出してもらう予定です.
Recorderによるキャプチャ方法
Unityから提供されているRecorderアセットを読み込み,作成したシミュレーションを動画にし提出してもらいます.
- Unity内のAssetStoreでUnity Recorederと検索
- 無料でダウンロードできる
- ダウンロード後,ボタンがインポートに変わるので,インポートする(Unity再生中ににはできません)
- 現行バージョンの場合 Window>General>Recorder>ReorderWindow(※このメニューはUnity Recorederをインポートしないと表示されません)
- 現行バージョンの場合 +Add New Recorders>Movieを選択
- 図の設定(Windowsの場合設定が変更になる場合もある)にし,START RECORDINGをクリックし録画を始める
- Unityが再生され,録画が始まる
- Unity内の動作が終わるまで待ち,STOP RECORDINGをクリックし録画を終了させる(※Unityは再生モードのままになっているので,自分で停める)
- 現行バージョンの場合 プロジェクトフォルダ内のRecordingsフォルダ内に録画された動画があるので再生する
- ※ビルド時(アプリ化する際)はUnity Recorderは取り除きましょう
- 以下は旧バージョンの場合の対処法です
- (旧バージョンの場合)メニューバーのTools>Recoreder>Video を選択(※このメニューはUnity Recorederをインポートしないと表示されません)
- (旧バージョンの場合)設定は図のとおり.Flip Image Verticallyは下図のようにオフにすること
- 最後にウィンドウ下部のstart recordingを押しキャプチャを始める.止めたい時はstop recordingを押す
- ウィンドウズのデスクトップからUnityのプロジェクトフォルダを探す.
- プロジェクトフォルダ内(アセットフォルダより上の階層)にRecordingフォルダができているので,その中のムービーを確認し,思い通りの動きをした成功映像をMaNaBoに提出
UnityにFBXファイルを読み込む(1)
概要
FBXファイルを読み込み,アニメーションを分割し動作に応じた動きの設定をする
Unityへの読み込み
- Assets内にドラッグ&ドロップ(以下D&D)してmyFish.fbxを読み込む
- myFishを選択し,Inspectorに魚が表示されるので,再生ボタンを押し,アニメーションが読み込まれているか確認する
- 以前作成した魚のテクスチャをD&Dで読み込む.これでテクスチャが反映される(※テクスチャがうまく貼れていない場合はUVを設定する前のモデルを使っている可能性がある)
- InspectorのModelのタブにあるScale Factorを10(10倍の大きさ)にし,Applyを押す
- Rigのタブを選択し,Root nodeをjoint1にし,Applyを押す
- Animationのタブを選択
- Clipsの下のスライドバーまたはテキストボックスで,魚がジャンプしはじめ,終わるまでの範囲を指定する.Startが3,Endが25くらいでいい.これで200フレームあったアニメーションの最初部分が分けられた
- Applyをクリックする
- 次にClipsの右下にある+ボタンを押す.Take001(1)またはTake 002が作成されるのでそれを選択する(名前を変更する場合は下の入力フィールドを使うこと)
- これで読み込んだ200フレームのアニメーションが,Take 001とTake 002に分けられた
- 魚の尾びれが1サイクルするアニメーションの範囲を指定する.(参考値Startは128,Endは166)
- 次にLoop Timeにチェックを入れ,Loop Poseにもチェックを入れる
- loop matchのランプがグリーンになっていることを確認する
- Root Transform RotationのBased Upon(at Start)をOriginalにする.またRoot Transform PositionのBased UponもOriginalにする
- 同様にTake 001を選択し,Root Transform RotationのBased Upon(at Start)をOriginalに,またRoot Transform PositionのBased UponもOriginalにする
- Fishの右矢印を開いて展開すると中にTake 001とTake 002のアニメーション2種類ができているのを確認すること
MayaのFBX exporterが選択できない場合
MayaのFBX exporterが選択できない場合
Mayaにプラグインをロードすることで対処できる
参考WEB
Unity入門-0ログイン編(2020)
※このステップ(Unity入門-0ログイン編)は一部環境下のみの設定です
※2020年にアップデート(ベースは2018年)
Unit Hubを起動する
インストールしている、Unityのバージョンを確認する。2019.3.10がインストールされていればよい。2019.3.15までは問題無く動作すると思います。
新規作成>▽>2019.3.10f1を選択し、指定のバージョンで作成する(※バージョンが違えば互換性が無い場合もあるので注意)※他の授業で違うバージョンを使用している場合はお知らせください。上位バージョンならそのまま使用、下位バージョンなら検討します。
テンプレートの画面が開きますので、3Dを選択、プロジェクト名に半角英数字で好きな名前を入れ、上位階層まで半角英数字の保存場所を選択し、作成ボタンを押します。
Unityをスタートする
- Sign in with googleを選択し,大学のアドレスを入力,いつもの入力画面になりますので,もう一度メールアドレス,パスワードを入力
- Project Nameは半角英数字で適宜設定すること
- Locationの…をクリックし保存先にUSBメモリ(またはSSD)の場所を選ぶ.あまりにもUSBメモリが遅くイライラする場合は,Dドライブに保存し終了時に自分のUSBメモリにバックアップを取るなどする.
(次へ)
アプリのビルドについて
概要
- アプリを生成することを「ビルド」と呼ぶ
- 一般に配布することを「リリース」と呼び、デベロッパ登録が必要になる
- Google Play Console(Google Play)でのリリースは初回のみ25$必要
- Apple Developperでのリリース毎年1万円前後必要(レートに合わせて改訂される)
Windows(またはMac)アプリを作成する場合
- File>Build Settings で使用するシーンを全て追加
- シーン間はボタンなどでジャンプできるとしても,最初に読み込むシーンは最上部に移動させる(ビルド順が0になるように)
- PlatformがPC,Mac & Linux StandAloneを選択
- Target PlatformでWindows(またはMacOSX)を選択
- Windowsの場合はArchitectureをx86_64(64bit版をターゲットにする場合)にする
- Buildボタンを押す
※Windowsの場合は,作成されたアプリとフォルダ両方が必用で同じ階層に入れておくこと
iOSの実機で動作確認
- 自分が所有しているiPhoneやiPadにのみインストールする場合は以下のとおり
- Windows→(Cloud Build使用)→ iPhone 有料※デベロッパ登録が必要
- Mac→ iPhone 無料
Android実機で動作確認
- Windows→Android 無料
- Mac→Android 無料
iOSで限定した人数に配布したい(リリースしない)
- DeployGateを使うとリリースせずとも少数限定の機種にインストール可能(各デベロッパ登録が必要となり有料)
- 新規利用希望者が出る度にビルドし直す必要がある(iOSのみ)