雪ん子パースペクティヴ

読むとちょっとタメになるエントリー。コメントあると嬉しいです。

Unityを久しぶりに触った。2Dと3Dのチュートリアルから再開。

やっぱり面白いんだなあ、Unity。


はろー、yukiです。


最後に触ったのが2年くらい前のことです。

今夏、久しぶりに何かを作ってみたくなり、チュートリアルから再開しました。

(ブログへの投稿は月が変わってしまいました)

 

これまでは3Dだけしか勉強していなかったのですが、今回は2Dへも挑戦。

公式から出ているチュートリアルをやってみて、メモとして残すことにしました。

結論から言うと、全体的にざっくり触れられて良い内容だったと思います。

 

ただ、全編英語なので、そこは覚悟しておいてください、苦手な方。

 

それでは順番にみていきましょう。

 

まずは、3Dから。

タイトルは「John Lemon's Haunted Jaunt: 3D Beginner」。

 

構成は次のようになっています。
ーーーーーーーーーーーーーー

  1. Setting up 3D Beginner
    プロジェクト作成、アセットのインポート、各種ウィンドウの説明

  2. The Player Character: Part 1
    キャラクターの追加、Prefabsの作成、アニメーション追加、Rigidbodyの追加、Colliderの追加

  3. Player Character: Part 2
    C#スクリプト作成、キャラクターをキーボードのキーで操作、歩くアニメーション追加、回転動作の追加、FixedUpdate関数、Unityのビュー設定

  4. The Environment
    ゲームステージ追加、Directional Light設定、Global Illumination Lightmappingの設定、Navigation Meshの設定

  5. The Camera
    カメラ設定、Virtual Camera作成、Post-Processingの設定

  6. Ending the Game
    UIの追加、Canvasの設定、C#スクリプト作成、ゲームエンディング追加

  7. Enemies, Part 1: Static Observers
    動かない敵を追加、キャラクター発見用の視野追加、C#スクリプト作成、キャラクター発見、発見された時のエンディング追加、ゲーム再スタート追加

  8. Enemies, Part 2: Dynamic Observers
    動く敵を追加、C#スクリプト作成、敵が動く、敵を複数配置、ヒエラルキーの整理

  9. Audio
    Ambient(環境音楽、BGM)追加、C#スクリプト編集、ゲームエンディング時のオーディオ追加、足音の追加、PrefabsのOverride、敵の音を追加、3D音響

  10. Build, Run, Distribute
    ビルド設定

ーーーーーーーーーーーーーー

このチュートリアルで躓いたのは、パート2だけですね。

このパートでは、主題でもあるキャラクターの「歩き」で、変数isWalkingを用意します。

これが、isWorkingになっている部分があり、isWalkingとちぐはぐしていました。

頭の中で「walk⇔work」になり、、、まあ、初歩的なミスですね。

 

完成後の画面はこちら。

f:id:yuki_sasano:20190913221337p:plain

 

 

次に、2D。

タイトルは「Ruby's Adventure: 2D Beginner」。

 

構成は下記の通りです。

ーーーーーーーーーーーーーー

  1. Setting Up the Unity Editor
    プロジェクト作成、アセットのインポート、各種ウィンドウとUIの説明

  2. Main Character and First Script
    メインシーン作成、Spriteの作成、ユニットの座標設定、ユニットのサイズ設定、C#スクリプト作成、Update関数、キャラクターの移動

  3. Character Controller and Keyboard Input
    キーボード入力によるキャラクターの移動、キーボードのキー設定、時間とフレーム

  4. World Design - Tilemaps
    Tilemapの作成、Tileの作成、Tile Palette、Pixcel Per Unit、Sprite Editor、TilesetのSlice、Layerの設定

  5. Decorating the World
    グラフィックスの設定、Sprite Sort Point、Pivotの設定、Prefabsの作成

  6. World Interactions - Blocking Movement
    Rigidbody2D設定、Gravityの設定、Collidersの設定、Freeze Rotationの設定、Rigidbody2Dコンポーネント、Vector2Dコンポーネント、MovePositionメソッド、Collider範囲の編集、TileへのCollider設定、ColliderのComposite、Rigidbody2DのBody Type設定

  7. World Interactions - Collectibles
    キャラクターの体力設定、関数作成、public変数、ColliderのTrigger、Is Triggerの設定、OnTriggerEnter2D関数、Destroy関数、変数の{get {return 戻り値; }}ブロック

  8. World Interactions - Damage Zones and Enemies
    ダメージゾーンの追加、Sleeping Modeの設定、ダメージ後の無敵状態、Draw Mode、Mesh Type、敵キャラクターの追加、敵キャラクターの動作、OnCollisionEnter2D関数

  9. Sprite Animation
    Animatorコンポーネント、Animator Controllerの追加、Animation Window、Animationの作成、Animator Controllerの設定、Blend Treeの作成、Parameterの設定、Motionの追加、C#スクリプト作成、Transitionの設定

  10. World Interactions - Projectile
    発射物の作成、C#スクリプト作成、Instantiate関数、Quaternion、キー入力による発射、Awake変数、Layerの設定、敵キャラクターがHit時の動作

  11. Camera - Cinemachine
    Cinemachineインストール、Virtual Cameraの設定、Camera Modeの設定、解像力比の設定、Cinemachine Confiner、Layerの設定

  12. Visual Styling - Particles
    エフェクト追加、Particle Systemの追加、Random Between Two Constants、エフェクトのフェードアウト、敵キャラクターへのエフェクト追加、Simulation Space、Stop関数

  13. Visual Styling - UI - Head-Up Display
    UI Canvasの追加、Render Mode、Canvas Scaler、UIのイメージ編集、Anchor、キャラクターのポートレートと追加、体力バー、C#スクリプト作成、UnityEngine.UI宣言

  14. World Interactions - Dialogue Raycast
    NPCの追加、Raycastの追加、RaycastHit2D関数、NPCレイヤーの作成、ダイアログ用UIの作成、Text Mesh Proの追加、C#スクリプト作成

  15. Audio
    BGMの追加、Spatial Blend(2D/3D)、AudioSourceコンポーネント、PlaySound関数、敵キャラクターへサウンド追加、Audio Litenerの設定、3D Sound Settingsの設定、サウンドの遠近

  16. Build, Run, Distribute
    プレイヤー設定、ビルド設定、ビルド

ーーーーーーーーーーーーーー

このチュートリアルでは、パート12の「ProjectileがEnemyにhitした時の処理」で躓きました。

チュートリアルでは、ProjectileがEnemyにHitした時の処理にはOnCollisionEnter2D()が使用されています。

これはColliderを設定されたObjectが、同じくColliderを設定された別のObjectと衝突した時に使用される関数です。

僕がこれを使用した時、Projectileは衝突しても処理(Destroy)せず、Enemyもそのまま。

本来意図する動きとは異なる挙動でした。

そこで、Objectが衝突した時にTriggerを発動するOnTriggerEnter2D()を使用しました。

処理の中身は、何一つ変えていません。

すると、意図した動き(ProjectileのDestroy、EnemyへのHit判定)が実現できました。

OnCollisionEnter2D()が正しいとは思いますが、まあこういうこともあります。

そんな二つの違いは、下記を参考ください。

その他は特に問題なく進められたと思います。

チュートリアルを終えても、追加できるアニメーションやサウンドがあり、自分なりにアレンジもできます。

 

完成後の画面はこちら。

f:id:yuki_sasano:20190913221425p:plain

 

 

さてさて。

Unityを学ぶなら、まずはUnity Learnへアクセスするのが良いです。

勉強の仕方は色々ですが、勉強用の書籍を買わずとも、勉強はできます。

勉強が足りなくなったら、書籍に頼るのも一つの手ですね。


ちなみに、現在の僕はオリジナルゲームを開発中です。

3Dの簡単なものですが、チュートリアルをするだけで、結構できてしまうものですね。

(でも、その先の完成度を高めるまでが、これまた遠い)

 

たぶん、Android向けに公開するまでトライすると思います。

 


以上。