Unityのtutorials:( John Lemon's Haunted Jaunt: 3D Beginner)

 ゲーム作るとしたら色々作ってみたいものはあるけど、 3Dだったら隠れながら目的を達成していくような、いわゆるステルスゲームが良いなぁなんて思っていたのでこれはタイミングが良いかもしれない。 ただ現時点では日本語訳がないようだ。

そんなわけでメモ代わりに色々書く。tutorialは10回に分けられている。
数日以内に終われば良い方だろうか。

learn.unity.com



John Lemon's Haunted Jaunt: 3D Beginner

 [雑訳]

 このプロジェクトではステルスゲームの作り方を知るだけではなく、10回に分けたtutorialのそれぞれで背後にある原理を説明する。 やったことがなくても心配はない。このプロジェクトはUnityの出発地点に最適だ。


重要そうなところだけ。 不安なところはGoogle翻訳
雑な訳なのである程度は見逃してほしいが明らかな誤りがあれば教えてほしい。

Tutorial : The Player Character: Part 1

2. Add a Character Model

  • 3DのモデルをUnityで扱うためにGameObjectとして追加します。(これをモデルのinstanceを作成すると言います。)
    Transform componentはScene内で位置と大きさを持つことを意味します。

  • Mesh Renderer キャラクターの可視化に必要。

  • Meshは三角形の集合。
  • Skinned Mesh RendererはMesh Rendererの一種でモデルのボーンの回転や位置でmeshが変形できる。
  • ボーンはモデルのGameObjectの子オブジェクト。(JohnLemonのRootがボーンの集合)



3. What are Prefabs?

  • Prefabは特別なAssetでComponentが付属したsetup済みのGameObjectの集合。
  • 同じもののinstanceを簡単に作れる。
  • 作られたinstanceそれぞれはPrefab Assetに紐づけられるため、Assetに変更があればすべてのSceneのPrefabに変更が加わる。
  • PrefabであることはHierarchy windowで名前とアイコンが青で表示されることからわかる。
  • だが、それに加えて白い紙のようなマークがアイコンにあることがある。
  • これは読み取り専用のPrefabで、modelなどをUnityではそう扱う。



4. Turn the Character into a Prefab

  • ?PrefabをOriginalにするかVariantにするかの違いは? (多分Originalを変更するとVariantも影響を受けるとかなんじゃないかと思受けど要調査。)

  • (変更前にSceneを保存!)

  • Prefabを変更するならPrefabをPrefab modeで開く。(Inspector->Open Prefab のこと)

  • (breadcrumb(パンくず)は通ってきた道筋、履歴くらいの意味?)

  • SceneではGameObjectを編集して、Prefab modeではPrefabを編集する、この切り替えに慣れることがUnityの利用では重要。



5.Animate your character

  • Animator componentは第一propertyにAssetの一種、Animetor Controllerを取る。
  • Animetor ControllerはいつでもAnimator componentが何のAnimationをするか決定する state machine を含んでいる。
  • AnimationはAnimator Controllerに用意されたAnimation clipsに基づく。



6. Create the Animator Controller

  • Animator Controllerのstate machineはAnimator Parametersの現在の値から(現在の状態なりAnimationなりを?)決定する



8. Create Animator Transitions

  • Has Exit Timeがチェック済みだと一定時間経過後に自動で次の状態へ遷移する



10. Assign the Animator Controller to the JohnLemon Prefab

まで終了するまでおよそ3時間ほど。

(Animetor関連の操作はSpaceShooterで少し触っていたので新規の情報がなかったから戸惑うことがなかった。 個人的にはSceneでGameObjectを使ってPrefabを作っていくのとScriptでGameObjectを管理したり操作することに慣れるのが動機の1つなので、今のところ物足りない。)



11.Make your Character React to Physics

  • GameObjectが物理学に則ってふるまうにはRigidBodyとColliderの2つのComponentがいる。
  • AnimatorのApplyRootMotionがチェック済みだとキャラクタが少しだけ落下してから停止する



12.What is Root Motion?

  • Animationで特定のHierarchyのGameObjectすべてが回転、移動する
  • ほとんどの移動と回転は自分の親GameObjectからの相対的なものになる
  • 親を持たないGameObjectはRootと呼ばれ、その移動(おそらく回転も?)は相対的ではない
  • この移動をRoot Motion という
  • 特に今回の場合では構造的にRootにあるものではなくAnimator ComponentをもつものがRoot

  • (確かにGameObject Xの下にAnimator ComponentをもつGameObject Aが複数あったとき(As, それぞれはA0, A1... )、A0の動きはA1とは独立だろうからRoot Motionを共有しないのはその通りだろう。ただし初期位置だとかはXのTransformからの相対値になるのかな?)

  • Apply Root Motion をチェックするとRootの動きのAnimationはフレームごとに適用される
  • したがってAnimatorはIdle状態で移動しない
  • ではなぜ落下が起きたのだろう?
  • これはAnimatorのUpdate Modeによるものだ



13. What is the Update loop?

  • スクリーンに表示する画像を一秒間に何度も変更することで移動を表現する
  • この画像それぞれをFrameと呼ぶ
  • Frameをスクリーンに表示する処理をRenderingと呼ぶ
  • 映画やテレビとは異なり、次に移すべき画像はユーザーの入力によって大きく変わるだろう
  • その素早い対応はUpdate Loopで行う
  • Update Loopによる更新は間隔が一定ではない。
  • Custom ComponentはUpdate methodを持っていて、それが呼ばれて新しい画像がRenderされる
  • それとは別にもう1つ、物理的な操作を行うループがある
  • これはFixedUpdateといい、後進の間隔がばらつかない。
  • したがってAnimatorがUpdateでキャラクタを動かし、同時にRigidBodyもキャラクタを動かしてしまう(?)



14. Fix John Lemon's Movement

  • AnimatorのUpdate ModeをAnimate Physicsに切り替えると落下は起こらなくなる
  • (つまり作る側がそのAnimationは物理的なものなのかどうかを判断してきめるということか?)
  • Use Gravityのチェックを外すと上か下から押されたときに落ちたり浮いたりするのでそれでいいのか考える
  • 代わりにRigidBodyのConstraitsでキャラクタの移動に物理学的な制約を課すことを考えよう



17. Add a Collider to John Lemon

  • Colliderはいくつかの異なるComponentの総称
  • Colliderは物理的な衝突の目的でオブジェクトの形状を定義する
  • (ぶつかったりぶつかられたり)

ここまで#10の続きから1時間くらいなので計4時間か。 1-18までで30分らしいのでなかなか厳しい。