3Dモデルを2D世界で動かしたいので
元動画の2.5D is Easier Than You Think
を見ながら何をやっているのかを確認しながら試してみる。
Unityは2020.3.21
とりあえず3Dモード(モバイル)で環境は作成した。
動画の画質をHDにしないと文字は見えない。
カメラ設定
普通に3Dカメラの設定の話。
背景色を付けている程度?背景にグラデーション設定が出来るのかと思ったけどそういうわけではない。
ライティングの設定は先日のチュートリアルにはなかった。
調べるとWindowの中にライティングというものがあったのでそれを開いて確認。
シーンの「新しいライティング設定」混合ライティングをOFFに。
フォグの設定は「環境」の方でとりあえず付けてみた。
スプライトシェイプ
スプライトシェイプというものは使ったことがない。
これはパッケージマネージャーからインストールして使うもの。
解説をみると、変形したりしているのは分かった。
プロジェクトでスプライトシェイプのプロファイルを作って、オブジェクトはこの当時と変わっているのか、openとcloseのようなものが存在しているので適当にopenを設定してみた。
Edgeコライダー2Dが設定されているので追加。
背景
マテリアル設定したパネル置いているのかと思ったら違った。
3DのTerrain(地形)を配置。山とかも作れる。
どうして緑色になっているのか⇒歯車マークの基本設定にマテリアル設定が出来た。
Terrainレイヤーのようなものを使うとリアルになるらしい。
キャラクター
動画ではスタンダードアセットのロボットの2Dキャラクターを配置している。
2.5Dでキャラクターも3Dモデルにしたいので、適当に猫をダウンロードして2Dコライダーをセットしてみると普通にスプライトシェイプとの衝突判定があるっぽいのでこれでいけそう。
インスペクタでplatformer characterをセットしているようなので、似たようなことをしたい。
スタンダードアセットの問題はこことかに書いてあって、最新には適合していないものもあるらしい。
2Dのコントローラを無理やり3Dモデルに適合してみたがエラーが出た。
エラー探しのついでにInputSystemに適応させる。
こんな感じでクロスプラットフォームから変更しといた
private void Update()
{
if (!m_Jump)
{
// Read the jump input in Update so button presses aren't missed.
//m_Jump = CrossPlatformInputManager.GetButtonDown("Jump");
m_Jump = inputAction.Player.Fire.triggered;
}
}
エラーの問題はバージョンではなく
m_GroundCheck = transform.Find("GroundCheck");
m_CeilingCheck = transform.Find("CeilingCheck");
これが返ってきてないため。
スクリプトしかインポートせず、元のロボット君を見ていないので分かっていなかったが、オブジェクトの子要素として判定用のGroundCheckがあるという事っぽい。
ので実際にロボットをインポートして中身を確認すると空のオブジェクトが入っていたので配置。
エラーは出なくなった。
アニメーション関係を全く設定していないのでジャンプの判定を
//if (m_Grounded && jump && m_Anim.GetBool("Ground"))
if (m_Grounded && jump )
に書き換える事で、3Dモデルを2Dの世界として動かす事はとりあえずできた。
このままだとアニメーション関係で警告が出るが、アニメーションの所を書き換えるのが面倒なので、
スタンダードアセットからアニメーターをインポートして、適当に3Dのモーションを割り当て。
後ろ向きに走るので、ここだけソースコードを書き換えて向きを反転させてやる。
実際のコード上はFlipメソッドで行っていて、
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
で反転しようとしているが、zに入れないと3Dモデルは左右反転してくれないので、zの反転も追加して対応。
インポートした猫モデルのアニメーションのループ設定がされていなかったので追加で(ジャンプモーションがなかったが)とりあえず動いた。
再度スプライトシェイプと背景の木
やはり動画と違いすぎるのでClosedのシェイプにしたら似たような感じになったので、こちらっぽい。
テクスチャとして適当にグネグネ作った芝生っぽい画像を使えばOKだが手元にないので適当に塗りつぶしで対応
木はスタンダードアセットの中にあるのでそれを利用してTerrainに配置=樹木はプレハブを作って、樹木を編集からツリーにADDしてやると選択可能になった。
※この樹木のアセット?の影響でビルドがめっちゃ時間かかった
動画にはないけど、2Dカメラを追加して猫を追いかけるようにして、今回のお試しは終わり。