小中高生向けプログラミングスクールTechChance!

【Unity 6対応】3Dキャラクターに歩行アニメーションを設定する方法を解説!【前編】

WRITER
 
【Unity 6対応】3Dキャラクターに歩行アニメーションを設定する方法を解説!【前編】
この記事を書いている人 - WRITER -
プログラミング教室「テックチャンス」代表取締役。広島大学 総合科学部 総合科学科(数理情報科学プログラム)卒業。大学受験進学塾「広大研」取締役として、数学科主任講師・情報科主任講師も務める。 大学受験指導15年、プログラミング指導10年。 指導領域はScratch・Minecraft・Unity・Webアプリ開発など幅広く、初心者から経験者まで段階的に伸ばす教材体系を設計。単なる操作習得や暗記に寄らず、「目的を定める→作る→動かして確かめる→直す→完成させる」という試行錯誤の型を重視し、子どもが自力で成果物を作り切る力を育てる。また、受験指導で培った学習設計・習慣化・伸び悩みの原因分析をプログラミング学習にも応用し、学年や個性に合わせた課題設計とフィードバックを行う。 近年はAIも取り入れ、発想支援・表現の拡張・改善サイクルの高速化を通じて、学びを作品と成長に結びつける指導・カリキュラム開発に取り組んでいる。

© Unity Technologies Japan/UCL

 

Unityを触り始めたら、まず一度は「自分の操作でキャラクターを歩かせてみたい」と思いませんか?

ゲーム画面の中でキャラクターが立ち、歩き、向きを変える。

一見すると難しそうですが、実はこの仕組みの中には、Unityで3Dゲームを作るための基本がたくさん詰まっています。

Unityとは、2Dゲーム・3Dゲームを作ることができるゲームエンジンです。

「プログラミングしてみたいけど、何から始めればいいかわからない」
「Unityの基本的な使い方を覚えたい」
「オリジナルのゲームを作ってみたい」
「自分でキャラクターを操作してみたい」

そんな人におすすめなのが、まずキャラクターを歩かせるところから始めることです。

今回はUnity初心者向けに、キャラクターを実際に動かすための準備として、次の内容を順番に作っていきます。

  • 3Dプロジェクトを作る
  • キャラクターをSceneに配置する
  • 地面を作る
  • RigidbodyやColliderを設定する
  • Animator Controllerを作る
  • IdleとWalkingを切り替えられるようにする

この記事を最後まで進めると、キャラクターが待機状態と歩行状態を切り替えられるところまで完成します。

後編の記事では、ここで作ったAnimatorに新Input Systemを組み合わせて、WASDキーで実際にキャラクターを操作できるようにしていきます。

つまり今回の記事では、キャラクターを動かす前の設定について徹底解説しています。

専門用語も一つずつ説明しながら進めるので、Unityを始めたばかりでも大丈夫です。

手元にUnityを動かせる環境があれば、ぜひ一緒に作ってみましょう!

今回の記事では、Unity 6を使用して解説します。

Unityの導入がまだ終わっていない場合は、先にUnityのインストール・初期設定を済ませておきましょう。

Unityのインストールについては以下の記事で解説しているので参考にしてください。

 

プロジェクトを作ろう!

まずUnity Hubを開きます。

New projectを選択して、新しいプロジェクトを作成しましょう。

UnityのNewProject設定画面

今回は、次の設定で進めます。

Editor Version:6000.3.23f1 Template:Universal 3D Project Name:UnityWalking

Unity HubでUniversal 3D・UnityWalkを設定した画面

設定できたら、Create projectをクリックします。

Unity Editorが開けば準備完了です。

UnityWalkを開いた直後のUnity Editor

 

キャラクターを用意しよう!

次に、ゲーム内で使用する3Dキャラクターを用意します。

今回はUnityChanのSDモデルを使用します。

UnityChanを利用する場合は、公式サイトの利用規約を確認してからダウンロードしてください。

Unityちゃんダウンロードページ|Unity公式

UnityChan公式サイト・ダウンロードページ

3Dモデルの中からSDユニティちゃん3Dモデルデータを選択してダウンロードします。

UnityChan公式サイト・ダウンロードページ

 

キャラクターをインポートしよう!

ダウンロードしたUnity PackageをUnityへ読み込みます。

Unity上部メニューからAssets → Import Package → Custom Package...を選択します。

Custom Packageを選択している画面

ダウンロードした.unitypackageを選択します。

ダウンロードした.unitypackageを選択します。

Importウインドウが表示されたら、必要なファイルを確認してImportをクリックします。

Import Unity Package画面

 

UnityChanをSceneに配置しよう!

Importが完了すると、ProjectウインドウにUnityChan関連のフォルダが追加されます。

今回使用するPrefabを探します。

UnityChan → SD_unitychan → Prefabs → SD_unitychan_humanoid

SD_unitychan_humanoidをHierarchyへドラッグ&ドロップしてください。

SD_unitychan_humanoidをHierarchyへドラッグ

Sceneにキャラクターが表示されればOKです。

HierarchyでSD_unitychan_humanoidをダブルクリックすると、Sceneビューのカメラをキャラクターの位置へ移動できます。

Sceneに表示されたUnityChan

 

Consoleを表示しておこう!

ゲーム制作では、エラーが発生したときにConsoleを確認することが非常に重要です。

Unity上部メニューからWindow → General → Consoleを開きます。

Consoleを開くメニュー

開いたConsoleタブは、SceneやGameビューの横など、自分が見やすい場所へ配置しておきましょう。

Scene横へConsoleを配置した画面

Scene横へConsoleを配置した画面

赤いメッセージは主にError、黄色いメッセージはWarningです。

ゲームが思ったように動かない場合は、まずConsoleを確認する習慣を付けておきましょう。

 

Consoleに表示されるエラーを解決する

UnityChanを配置したときに、Console画面に次のような表示されることがあります。

Shader warning in 'Toon/Toon 3D as 2D (URP)': implicit truncation of vector type at Packages/com.unity.toonshader/Runtime/Shaders/URP/ToonURP_3Das2D.shader(210) (on metal)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Vertex program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_NEEDS_RENDERPASS_FBFETCH_FALLBACK UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: DEBUG_DISPLAY INSTANCING_ON SHADER_API_GLES30 SHADER_API_GLES31 SHADER_API_GLES32 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING USE_SHAPE_LIGHT_TYPE_0 USE_SHAPE_LIGHT_TYPE_1 USE_SHAPE_LIGHT_TYPE_2 USE_SHAPE_LIGHT_TYPE_3

これはUnityChan自体のバグではなく、Materialで使用しているShaderのバージョンが合っていない場合に起こる症状です。

今回のプロジェクトはUniversal 3Dなので、URP(Universal Render Pipeline)を使用しています。

Unity上部メニューからWindow → PackageManagement → Package Managerを開きます。

Package Managerを開く画面

Package Managerを開く画面

検索欄に toon と入力し、Unity Toon Shader を探します。

Version History をクリックし、表示されるバージョンから 0.15.1-preview の Update をクリックします。

環境やわずかなバージョンの違いによってエラーになる場合もあるので、開発に大きく影響しないエラーについては気にしなくても大丈夫です。

 

UnityChanの不要なデモ機能を整理しよう!

UnityChanの配布データには、キャラクターを見せるためのデモ用機能やGUIが含まれている場合があります。

今回作るのはシンプルな歩行ゲームなので、不要なものは無効にしておきます。

SD_unitychan_humanoidを選択し、Inspectorを確認してください。

デモ用のGUIやPreview系コンポーネントが付いている場合は、今回使用しないものを無効化します。

  • Idle Changer
  • GUI表示機能
  • Face Preview系
  • Random Wind
  • IK Look At

UnityChanの不要コンポーネントを無効化したInspector

UnityChanの不要コンポーネントを無効化したInspector

UnityChanのバージョンによって付属するコンポーネントは異なります。

今回は

  • Body Animation Previewer
  • Face Animation Previewer
  • Auto Blink for SD
  • Spring Manager
  • SD Random Wind

を無効化しています。

名前が見つからない場合は無理に探す必要はありません。

 

地面を用意しよう!

キャラクターが立つための地面を作ります。

Hierarchyの+から3D Object → Planeを選択します。

Planeを追加するメニュー

作成したPlaneのTransformを設定します。

Position
X:0
Y:0
Z:0

Scale
X:10
Y:1
Z:10

PlaneのTransform設定

これでキャラクターが歩くための地面ができました。

 

キャラクターにRigidbodyとColliderを付けよう!

次にキャラクターへ物理処理用のComponentを追加します。

HierarchyからSD_unitychan_humanoidを選択してください。

Inspector下部のAdd Componentから、RigidbodyとCapsule Colliderを追加します。

【画像挿入:RigidbodyとCapsule Colliderを追加する画面】

RigidbodyとCapsule Colliderを追加する画面

RigidbodyとCapsule Colliderを追加する画面

Rigidbodyは、重力や衝突などの物理演算をキャラクターへ適用するComponentです。

Capsule Colliderは、キャラクターが地面や壁などに当たる範囲を設定します。

 

Capsule Colliderを調整しよう!

Colliderがキャラクターの身体に合うように調整します。

例えば今回のSDモデルなら、次の値から調整します。

Center Y:0.5
Radius:0.3

【画像挿入:Capsule Colliderの設定】

Capsule Colliderの設定

Sceneビューで緑色のCollider範囲を確認し、キャラクターの身体を大きく外れていないか確認してください。

モデルやバージョンによって適切な値は変わるため、数値そのものより「身体を適切に覆っているか」を優先してください。

 

ゲームを実行して確認しよう!

※ HierarcyでMain Cameraを選択した状態で、Unity上部メニューからGameObject → Align With Viewをクリックすると、キャラクターの様子がチェックしやすくなります。

Main CameraのGame ObjectをAlignWithViewに

Unity上部の再生ボタンをクリックします。

キャラクターが地面に落ち、そのまま立っていればOKです。

Gameビューで地面に立っているキャラクター

この段階ではまだ移動しません。

ここからAnimatorを設定して、IdleとWalkingの2種類のAnimationを用意していきます。

 

Animatorを設定しよう!

Animatorは、キャラクターのAnimationを管理する仕組みです。

今回作るのは、非常にシンプルなState Machineです。

Animator Controllerでは、StateとStateの間にTransitionを作り、そのTransitionにParameterを条件として設定することでAnimationを切り替えます。

イメージとしては、次のようになります。

Idle / Walking / isWalkingの関係を示す図

Animator Controllerを作ろう!

Projectウインドウで右クリックし、Create → Animator Controllerを選択します。

Animator Controllerを作成している画面

名前はPlayerAnimatorとします。

PlayerAnimator.controller

作成したPlayerAnimatorを、SD_unitychan_humanoidのInspectorにあるAnimator → Controllerへドラッグ&ドロップします。

Animator Controllerを設定したInspector

 

Idle Animationを作ろう!

PlayerAnimatorをダブルクリックしてAnimatorウインドウを開きます。

ウインドウが誤って閉じてしまわないように、Animatorウインドウの右上で鍵マークをクリックして固定しておきましょう。

Animatorウインドウの右上で鍵マークをクリックして固定

Animator上で右クリックし、Create State → Emptyを選択します。

Create State → Empty

作成したStateを選択して、次のように設定します。

Name:Idle
Motion:Standing@loop

Idle StateとStanding@loopを設定

Stateがオレンジ色になっていれば、そのStateが最初に再生されるDefault Stateです。

必要であればIdleを右クリックしてSet as Layer Default Stateを選択してください。

 

Standing@loopを確認しよう!

UnityChanのデータ構成によっては、似た名前のAnimation Clipが複数存在する場合があります。

今回使うUnityChanはhumanoidなので、humanoid用のAnimation Clipを選択しましょう。

設定したあと一度ゲームを再生して、キャラクターの姿勢を確認してください。

Idle状態で正常に立っているキャラクター

次のような状態になっていればOKです。

  • 地面に立っている
  • 身体が大きく崩れていない
  • 不自然に地面へ埋まっていない

もし姿勢がおかしい場合は、選択しているAnimation Clipを確認します。

 

Walking Animationを作ろう!

次に歩行用Stateを作ります。

Animatorウインドウの空いている場所で右クリックし、Create State → Emptyを選択します。

Stateの設定を次のようにします。

Name:Walking
Motion:Walking@loop

Walking StateとWalking@loopを設定

これでIdleとWalkingという2つのStateができました。

 

IdleとWalkingをつなごう!

Animationを切り替えるため、Transitionを作ります。

Idleを右クリックしてMake Transitionを選択し、そのままWalkingをクリックします。

Idle→Walking Transition

次に、Walking → IdleのTransitionも同じように作ります。

IdleとWalkingを双方向につないだAnimator

最終的に、次のようになっていればOKです。

相互Transition

 

isWalking Parameterを作ろう!

次に、「いつIdleからWalkingへ切り替えるのか」という条件を作ります。

AnimatorウインドウのParametersから+ → Boolを選択します。

isWalking Bool Parameter

名前はisWalkingとしてください。

【画像挿入:isWalking Bool Parameter】

isWalking Bool Parameter

ここは非常に重要です。

次の記事のScriptでは、

animator.SetBool("isWalking", isWalking);

を使用します。

そのため、isWalkingの名前で設定するようにしてください。

Animator Parameter名は大文字・小文字まで完全に一致させる必要があります。

 

Idle → Walkingの条件を設定しよう!

Idle → WalkingのTransition矢印をクリックします。

InspectorのConditionsで、次のように設定します。

Idle→Walking / isWalking=true

これによって、isWalking = trueになるとWalkingへ移行します。

 

Walking → Idleの条件を設定しよう!

次にWalking → IdleのTransitionを選択します。

Conditionsを次のようにします。

Walking→Idle / isWalking=false

これで、isWalking = falseになるとIdleへ戻ります。

 

Has Exit TimeをOFFにしよう!

今回のような操作キャラクターでは、キーを押したらすぐ歩き、キーを離したらすぐ止まってほしいですよね。

そこで、両方のTransitionでHas Exit TimeをOFFにします。

Has Exit Time OFF

Has Exit Time OFF

Has Exit TimeがONの場合、現在のAnimationが一定位置まで再生されるのを待ってからTransitionするため、入力に対する反応が遅く感じることがあります。

 

Animatorを手動で確認しよう!

まだScriptは作っていませんが、Animatorが正しく動くか確認できます。

ゲームを再生してください。

AnimatorウインドウのisWalkingを確認します。

isWalkingをONにすると、Idle → Walkingへ変わります。

isWalking=trueでWalking State

OFFにすると、Walking → Idleへ戻ります。

isWalking=falseでIdle State

ここまで正常なら、Animatorの設定は完成です。

 

今回作った仕組みを整理しよう!

今回設定したAnimatorは、次のようになっています。

Animator全体構成の図解

次の記事では、このisWalkingをScriptから変更します。

例えば、animator.SetBool("isWalking", true);とすればWalkingへ、animator.SetBool("isWalking", false);とすればIdleへ切り替えられます。

つまり今回作ったAnimatorと、次回作るPlayerControllerをつなぐと

入力からキャラクターの動き反映までの簡単な流れ

という仕組みが完成します。

まとめ

今回はUnity 6でキャラクターを動かす準備として、

  • UnityChanをSceneへ配置
  • 地面を作成
  • Rigidbodyを追加
  • Capsule Colliderを追加
  • Animator Controllerを作成
  • Idle Stateを作成
  • Walking Stateを作成
  • Transitionを設定
  • isWalking Parameterを作成

しました。

特に覚えておきたいのは、次の関係です。

State ↓ キャラクターのAnimation状態 Transition ↓ Stateを切り替える仕組み Parameter ↓ Transitionを動かす条件

これを理解しておくと、今後Running、Jump、Attack、DamageなどのAnimationも同じ考え方で追加できます。

次の記事では、新Input Systemを使って、WASDキーで今回作ったキャラクターを実際に歩かせます。

【Unity 6対応】3Dキャラクターをキーボードで移動・回転させる方法を解説!【後編】

 

テックチャンスでは無料のプログラミング体験を実施しています!

プログラミング教室テックチャンスでは、子どもたちが実際に作品を作りながらプログラミングを学べる授業を行っています。

Scratchを使ったプログラミングから、Minecraft、そして今回紹介したようなUnityを使った本格的なゲーム開発まで、経験に合わせてステップアップできます。

「ゲームを遊ぶだけではなく、自分で作ってみたい」
「プログラミングに興味はあるけれど、何から始めればいいか分からない」

という方は、ぜひ一度無料体験に参加してみてください!

この記事を書いている人 - WRITER -
プログラミング教室「テックチャンス」代表取締役。広島大学 総合科学部 総合科学科(数理情報科学プログラム)卒業。大学受験進学塾「広大研」取締役として、数学科主任講師・情報科主任講師も務める。 大学受験指導15年、プログラミング指導10年。 指導領域はScratch・Minecraft・Unity・Webアプリ開発など幅広く、初心者から経験者まで段階的に伸ばす教材体系を設計。単なる操作習得や暗記に寄らず、「目的を定める→作る→動かして確かめる→直す→完成させる」という試行錯誤の型を重視し、子どもが自力で成果物を作り切る力を育てる。また、受験指導で培った学習設計・習慣化・伸び悩みの原因分析をプログラミング学習にも応用し、学年や個性に合わせた課題設計とフィードバックを行う。 近年はAIも取り入れ、発想支援・表現の拡張・改善サイクルの高速化を通じて、学びを作品と成長に結びつける指導・カリキュラム開発に取り組んでいる。

Copyright© TechChance! 公式ブログ , 2022 All Rights Reserved.