Unityティーチャートレーニングデイ -認定アソシエイト編-

290 Views

October 09, 20

スライド概要

Unity認定アソシエイトの試験範囲を念頭にUnityでのゲーム制作を行う上で、プログラマーやデザイナー、プランナーなどポジションに関係なく知っておきたいUnityの基本的な知識(Unity認定アソシエイト試験レベル)を横断的に身に付けることを目指します。

■こんな人におすすめ
・Unityの基本的な使い方、入門書レベルの理解はできている
・これからUnityの授業を学校で取り入れてみたいが、あまりUnityに詳しくない先生

■トレーニング環境と準備について
・使用するUnityのバージョン: Unity2019.4.8f1
・ AssociateTraning.unitypackageを追加する。
以下のURLからダウンロード可能です。
https://drive.google.com/file/d/1V3PzmZE7POf0_QEIIQIIPqVZV6rYmPDk/view?usp=sharing
※このトレーニングはすでにUnity入門書レベルの内容は理解されていることを前提に資料や内容をまとめています。そのため、基本的なUnityの情報は別途Unityの入門書などを読んでください。

profile-image

リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Generative Art — Made with Unity ティーチャートレーニングデイ 「認定アソシエイト編」 ユニティ・テクノロジーズ・ジャパン株式会社 荒川 巧也 1

2.

Unity認定アソシエイト試験 Unityに関する基本的な知識を幅広く持っている ことを示すことができる資格です。 * Unity2017.3で作問されています。 今回のトレーニングメニューは、試験合格レベ ルに達していただくことが目標ですが、今回のト レーニングメニューは学校の授業で取り上げて いただきたい内容をベースにまとめました。 2

3.

Unityはゲーム以外の分野での利用が増えている Unity Japan Office Project BMWでの採用事例 *Unityができることで学生の就職チャンスが広がるようになってきています。 3

4.

より詳しく知りたい場合はおすすめビデオ 様々に広がるUnityの世界 https://www.youtube.com/watch?v=6Dqm2qrU0Dk&t=614s 4

5.

実際にトレーニングを始める前に・・ Unityプロジェクトについて振り返ってみましょう。 5

6.

Unityプロジェクトとは? Unityプロジェクトは ”シーン”から成り立っています。 6

7.

Scene(シーン)とは? シーンは” GameObject (ゲームオブジェクト )”で成り立っています。 岩 木 草 ひよこ 床 7

8.

Scene(シーン)とは? Sceneに配置されている GameObjectはHierarchy Windowで確認することができる。 ←この場合だと ”main”シーンに配置されている GameObjectが表示されている。 ライトやカメラなど”目には見えないもの”もGameObjectになります。 8

9.

GameObject (ゲームオブジェクト) とは? GameObjectはComponent(コンポーネント )によって特徴付けされます。 コンポーネント 9

10.

ひよこを配置してシーンのセットアップする 10

11.

今回のトレーニング環境と準備について 使用するUnityのバージョン: Unity2019.4.8f1 ・ AssociateTraning.unitypackageを追加する。 以下のURLからダウンロード可能です。 https://drive.google.com/file/d/1V3PzmZE7POf0_QEIIQIIPqVZV6rYmPDk/view?us p=sharing このトレーニングはすでにUnity入門書レベルの内容は理解されていることを前提に資 料や内容をまとめています。 そのため、基本的なUnityの情報は別途Unityの入門書などを読んでください。 11

12.

パッケージを取り込んで始めましょう! 12

13.

Stageを追加します Assets -> Training -> Models 名前を”Stage”にする。 13

14.

FloorにMeshColliderを追加する 14

15.

FloorにFloorMaterialを追加する 15

16.

Floor(Stage)にマテリアルが追加された 16

17.

Hiyokoを追加する Assets -> Traning -> Models 17

18.

Hiyokoが追加された 18

19.

追加したHiyokoのコンポーネントを見てみる 19

20.

マテリアル・シェーダー・テクスチャ Unity のレンダリングは マテリアル と シェーダー と テクスチャ によって行われます。 Unity のマテリアルとシェーダーとテクスチャは密接に関係しています。 ・マテリアル (最終的な描画設定を行うもの: 使用するシェーダーと使用するテクスチャもここで設定する。 ) マテリアル は、使用するテクスチャ、そのタイリング設定や色調などへの参照を含んで、どのようにモデル表面を描画するかを定義します。 マテリアルに用意されたオプションで、どのシェーダーをそのマテリアルに使用するかを決めます。 ・シェーダー(描画アルゴリズムのプログラム) シェーダー は、光源入力とマテリアル設定をベースにして、ピクセル毎の描画色を計算するための数学的な計算とアルゴリズムを内包した、小さなスクリプトです。 ・テクスチャ(画像データ) テクスチャ はビットマップ画像です。マテリアルにはテクスチャへの参照が含まれ、それによりマテリアルのシェーダーは、オブジェクト表面の色を計算するのに、テクスチャを使えるようになりま す。加えて、オブジェクト表面の基本色 (アルベド )では、反射率や粗さなどのマテリアル表面のさまざまな要素をテクスチャで置き換える事ができます。 https://docs.unity3d.com/ja/2017.4/Manual/Shaders.html 20

21.

Hiyokoに“Rigidbody”と”CapsuleCollider”を追加する 21

22.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

Hiyokoに追加する

PlayerController.cs

public class PlayerController : MonoBehaviour {
public float speed = 8f; //移動スピード
Rigidbody rigid; //Rigidbody型の変数
Vector3 moveDirection; //移動方向
// Use this for initialization
void Start () {
rigid = GetComponent<Rigidbody>(); //Rigidbodyを参照
}
private void FixedUpdate()
{
float v = Input.GetAxis("Vertical"); //上下のインプットを取る
float h = Input.GetAxis("Horizontal"); //左右のインプットを取る
moveDirection.Set(h, 0, v); //インプットを移動方向に変える
moveDirection = moveDirection.normalized * speed * Time.deltaTime; //移動スピードをかける
rigid.MovePosition(transform.position + moveDirection); //実際に移動させる
transform.LookAt(transform.position + moveDirection); //移動方向にひよこの顔を向ける
}
}
22

23.

転がりを防止する 23

24.

ひよこが動くようになった 24

25.

カメラの設定を行う 25

26.

Cinemachine追加しカメラの位置を調整する 26

27.

Cinemachineを追加する 27

28.

Cinemachineを使用する ← “Create Virtual Camera”をクリックする。 28

29.

VirtualCameraが追加された 29

30.

Cinemachineのパラメータを設定する カメラが斜め上からになるように offsetを調整する。 30

31.

カメラが追従するようになった 31

32.

PlayerControllerにAttributeを追加する public class PlayerController : MonoBehaviour { [Range(1,10)] // speedの範囲を指定 public float speed = 8f; Rigidbody rigid; Vector3 moveDirection; Animator animator; 32

33.

Unityのアニメーション機能について学ぶ 33

34.

AnimatorControllerを追加する Project Windowで右 クリックしてAnimator Controllerを追加す る。 34

35.

HiyokoControllerをControllerに追加する 2019.4 Animatorのアイコン 35

36.

Hiyokoを選択してAnimator Windowを開く 36

37.

Animator Windowが開く 37

38.

Bool型のパラメータを作成する 38

39.

AnimationClipを追加する 39

40.

Animation Clip どのように動かキーフレームが時間軸で打たれており、これはボーン構造がどのように 動 くべきなのかが定義されている。この情報によってアニメーションが再生される。 40

41.

状態遷移をつなぐ ステートを選択して右クリックする。 Idle←→Runでステートをつなぎます。 41

42.

Idle → Run のConditionsの設定について クリックする 42

43.

Run → Idle のConditionsの設定について 43

44.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
[Range(1,10)]
public float speed = 8f;
Rigidbody rigid;
Vector3 moveDirection;
Animator animator;

Hiyokoのアニメーションを制御

// Use this for initialization
void Start () {
rigid = GetComponent<Rigidbody>();
animator = GetComponent<Animator>();
}

void FixedUpdate()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
moveDirection.Set(h, 0, v);
moveDirection = moveDirection.normalized * speed * Time.deltaTime;
rigid.MovePosition(transform.position + moveDirection);
transform.LookAt(transform.position + moveDirection);
bool running = h != 0f || v != 0f; //矢印キーのインプットがあればTrueになる。
animator.SetBool("IsRunning", running); // IsRunningにrunningを代入
}
}

44

45.

ひよこがアニメーションするようになった 45

46.

オーディオを追加する 46

47.

HiyokoにAudioSourceを追加する 47

48.

アセットストアからFootstep(SE)を追加 48

49.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{

[Range(1,10)]
public float speed = 8f;
public AudioClip clip; //オーディオクリップの変数

PlayerControllerに追記
足音を鳴らす

Rigidbody rigid;
Vector3 moveDirection;
Animator animator;
AudioSource audio; //オーディオソースの変数
// Use this for initialization
void Start()
{
rigid = GetComponent<Rigidbody>();
animator = GetComponent<Animator>();
audio = GetComponent<AudioSource>(); //オーディオソースを参照
}
void FixedUpdate()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
moveDirection.Set(h, 0, v);
moveDirection = moveDirection.normalized * speed * Time.deltaTime;
rigid.MovePosition(transform.position + moveDirection);
transform.LookAt(transform.position + moveDirection);
bool running = h != 0f || v != 0f;
animator.SetBool("IsRunning", running);
}
public void PlayRunningSe(){
audio.PlayOneShot(clip); //オーディオクリップを再生する
}
}

49

50.

オーディオクリップを追加する FootStep(grass and snow)のオーディオクリップを追加する。 50

51.

アニメーションのイベント機能を使います ↑クリックする。 51

52.

RunアニメーションのEventsに関数を設定 ←Runをクリックする クリック 先ほどPlayerControllerに追加した ”PlayRunningSe”関数 52

53.

Hiyokoの足音が鳴るようになりました 53

54.

Particleを使ってみよう 54

55.

火の玉を作ろう! 55

56.

Particle Systemを追加する 56

57.

パーティクルを作成する 57

58.

Color over Lifetimeを設定する 58

59.

Size Over Lifetimeを設定する クリックする。 59

60.

このような形になればOK!! 60

61.

FireにSphere Colliderを追加する 61

62.

FireにRigidbodyを追加する ←チェックをはずす。 62

63.

Fireの位置を調整する Z軸を前に配置する。 63

64.

Bulletタグを作成して設定する 64

65.

FireにBulletスクリプトを追加する 65

66.

Bulletスクリプトを追加する using System.Collections; using System.Collections.Generic; using UnityEngine; public class Bullet : MonoBehaviour { // Use this for initialization void Start () { Destroy(gameObject, 3.0f); //3秒後に削除 } } 66

67.

FireをPrefab化する 67

68.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerShoot : MonoBehaviour {
public GameObject bullet; //PrefabのFireを追加
public Transform muzzle; //空のオブジェクトの muzzleを設定

HiyokoにPlayerShootを追加
*NewScriptを追加してください。

public float bulletSpeed = 1000f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
// 左クリックが押された時に
if (Input.GetMouseButtonDown(0))
{
// Fireを生成する
GameObject bullets = Instantiate(bullet) as GameObject;
// Fireの位置を調整する
bullets.transform.position = muzzle.position;
Vector3 bulletDirection;
bulletDirection = gameObject.transform.forward * bulletSpeed;
// Fireに力を加えて発射
bullets.GetComponent<Rigidbody>().AddForce(bulletDirection);
}
}
}

68

69.

HiyokoのTagを”Player”にする 69

70.

空のゲームオブジェクト”Muzzle”を追加する 70

71.

PlayerShootにFireとMuzzleを追加する 71

72.

PlayerShootにFireとMuzzleが追加された 72

73.

Fireが発射されるようになった 73

74.

Attackアニメーションを追加する 74

75.

“Attack”アニメーションクリップを追加する 75

76.

Attackパラメータを追加 76

77.

Attackステートに関する状態遷移をつなぐ 状態遷移をつなぐ 状態遷移をつなぐ 77

78.

“AnyState → Attack”と”Attack → Idle”のConditions設定 78

79.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerShoot : MonoBehaviour {
public GameObject bullet;
public Transform muzzle;
public float bulletSpeed = 1000f;
Animator animator;

PlayerShoot
赤字部分を追記する

// Use this for initialization
void Start () {
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
// z キーが押された時
if (Input.GetMouseButtonDown(0))
{
animator.SetTrigger("Attack");
// 弾丸の複製
GameObject bullets = Instantiate(bullet) as GameObject;
// 弾丸の位置を調整
bullets.transform.position = muzzle.position;
Vector3 bulletDirection;
bulletDirection = gameObject.transform.forward * bulletSpeed;
// Rigidbodyに力を加えて発射
bullets.GetComponent<Rigidbody>().AddForce(bulletDirection);
}
}
}

79

80.

Attackアニメーションが再生されるようになった 80

81.

ModelsフォルダのKarasuを追加する 81

82.

KarasuにCapsuleColliderを追加する 82

83.

KarasuにAnimation Controllerを追加する 83

84.

KarasuControllerをKarasuに追加する 84

85.

(カラスの)Animatorを開く 85

86.

Runアニメーション追加 86

87.

Runアニメーションが再生されるようになる 87

88.

ワークショップ アニメーション編 Ringoを配置してRingoを取ったらジャンプアニメーションをするようにアニメーション遷移を作ってみよう 88

89.

必要な素材はこちらにあります! ←Ringoのモデルはこちらです。 Jumpアニメーションはこちらです。 89

90.

ワークショップ ヒント 1 リンゴにColliderを追加する 90

91.

Animator ヒント2 91

92.

スクリプト (PlayerController)ヒント3 void OnTriggerEnter(Collider other) { if (other.CompareTag ("Item")) //Itemタグを付ける { Debug.Log("当たった!"); } } 92

93.

スクリプト (PlayerController)ヒント3 ログが出ることがわかります。 93

94.

このような形でアニメーション再生されればOK 94

95.

ナビゲーションシステムについて 95

96.

KarasuにNavimeshAgentを追加する 96

97.

StageをHierarchy Windowで選択する Navigation Staticにチェックを入れる 97

98.

Navigation Bakeを行う 98

99.

NavMeshが貼られました 99

100.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI; //名前空間追加

カラスにEnemyControllerを追加

public class EnemyController : MonoBehaviour
{
NavMeshAgent nav; //NavimeshAgent型の変数
GameObject target; //ターゲット追加
// Use this for initialization
void Start()
{
nav = GetComponent<NavMeshAgent>(); //自分自身のNavMeshAgentを参照
target = GameObject.FindGameObjectWithTag("Player"); //targetにPlayerを参照
}
void Update()
{
nav.SetDestination(target.transform.position);
}
}

100

101.

追いかけてくるようになった 101

102.

Navimeshのコストについて 102

103.

エリアの設定をする エリア名とコストを設 定する エリアを設定する。 103

104.

再度Bakeする 104

105.

コストの高いところは避けて動くようになる Hard Zone 105

106.

NavimeshAgentで動いた際にオブジェクトを無視して貫通する 106

107.

NavMesh Obstacleを追加する 107

108.

障害物を避けるようになる 108

109.

ここまでできたらKarasuをPrefab化する ここでHierarchy windowのKarasu削除する 109

110.

空のオブジェクトを追加して”GameManager”にする 110

111.
[beta]
GameManagerにEnemyManagerを追加する
using UnityEngine;
using System.Collections;
public class EnemyManager : MonoBehaviour
{
public GameObject enemyPrefab; //Karasuのプレハブを追加する
public Transform[] spawnPoints; //Karasuの生成ポイントを追加する
public float interval = 3.0f; //Karasuの生成インターバル
float time = 0.0f;
void Update()
{
time += Time.deltaTime; //時間をはかる
if(time > interval) //インターバルの時間以上に過ぎれば
{
int spawnPointIndex = Random.Range(0, spawnPoints.Length); //生成ポイントをランダムで選ぶ
GameObject enemy = Instantiate(enemyPrefab,spawnPoints[spawnPointIndex].position,spawnPoints[spawnPointIndex].rotation); //Enemyを生成する
time = 0f; //時間を0秒に戻す
}
}
}

111

112.

GameManagerにEnemyManagerを追加する 112

113.

空のオブジェクトを配置する (カラスの生成ポイント) 113

114.

EnemyManagerに設定する 114

115.

カラスが生成されるようになった 115

116.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI; //名前空間追加
public class EnemyController : MonoBehaviour
{
public int enemyHealth = 10;
public int damageAmount = 5;

EnemyControllerにライフを実装する
赤字を追記する

NavMeshAgent nav; //NavimeshAgent型の変数
GameObject target; //ターゲット追加
// Use this for initialization
void Start()
{
nav = GetComponent<NavMeshAgent>(); //自分自身のNavMeshAgentを参照
target = GameObject.FindGameObjectWithTag("Player"); //targetにPlayerを参照
}
void Update()
{
nav.SetDestination(target.transform.position);
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.CompareTag ("Bullet"))
{
Destroy(col.gameObject);
TakeDamage(damageAmount);
}
}
void TakeDamage(int damage)
{
enemyHealth -= damage;
if (enemyHealth <= 0)
{
Destroy(gameObject);
}
}
}

116

117.

uGUIの特徴 ① ↓ UIオブジェクト ↓ UIオブジェクト ↓ UIオブジェクト ↓Canvas uGUIはHierarchy view上では、必ずCanvasの子供オブジェクト上としてUIパーツを配置 されます(Canvasの子供オブジェクトにしなければUIオブジェクトは描画されません)。 Scene view上でもCanvasの上にUIパーツが配置されます。 117

118.

uGUIの特徴 ② 様々な描画モードを搭載。 Canvas Render Mode Screen Space - OverLay ほかのGameObjectの中でUIが1番前に描画されるモード。 Screen Space - Camera カメラを指定してUIを描画するモード。複数のCanvasを準備した際にCanvasの描画する順番をSorting Layerで指定すること ができます。 World Space ほかの3Dオブジェクトと同じように描画されるモード。ほかモードだとGameObjectと同じようにTransform情報が適応されます。 118

119.

Karasuに頭の上にHPのUIを配置する 119

120.

Karasuの子供オブジェクトにCanvasとSliderを追加 120

121.

Render Modeを”WorldSpace”にする 121

122.

CanvasとSliderの位置を調整する 122

123.

このようにSliderが配置される 123

124.

HandSlideAreaを削除する HandSlideArea 124

125.

BackgroundとFillの色を設定する 125

126.

SliderのValueを1にする 126

127.

Fillのサイズを調整する 127

128.
[beta]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI; //名前空間追加
using UnityEngine.UI;
public class EnemyController : MonoBehaviour
{
public int enemyHealth = 10;
public int damageAmount = 5;
public Slider HpSlider;

EnemyControllerに赤字部分を追記
HP情報をSliderを連携する

NavMeshAgent nav; //NavimeshAgent型の変数
GameObject target; //ターゲット追加
// Use this for initialization
void Start()
{
nav = GetComponent<NavMeshAgent>(); //自分自身のNavMeshAgentを参照
target = GameObject.FindGameObjectWithTag("Player"); //targetにPlayerを参照
HpSlider.value = enemyHealth / 10;
}
void Update()
{
nav.SetDestination(target.transform.position);
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "Bullet")
{
Destroy(col.gameObject);
TakeDamage(damageAmount);
}
}
void TakeDamage(int damage)
{
enemyHealth -= damage;
HpSlider.value = (float)enemyHealth / 10;
if (enemyHealth <= 0)
{
Destroy(gameObject);
}
}
}

128

129.

Enemy ControllerのHpSliderにSliderを追加する 129

130.

HPのUIが機能するようになった HPのUIが機能するようになった。 130

131.

SetUIPositionForCameraをCanvasに追加 using System.Collections; using System.Collections.Generic; using UnityEngine; public class SetUIPositionForCamera : MonoBehaviour { // Update is called once per frame void Update() { transform.LookAt(Camera.main.transform); //ライフゲージが相手のカメラを向く } } 131

132.

KarasuのApplyをクリックする Applyをクリックする *ここまでできたら HierarchyのKarasu削除 132

133.

HPのUIがカメラの方向を向くようになった 133

134.

スコアテキストを追加する 134

135.

テキストを設定する 135

136.

Anchorの設定を行う 136

137.

GameManagerにScoreManagerを追加する 137

138.

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ScoreManagerスクリプト public class ScoreManager : MonoBehaviour { public static int score = 0; public Text scoreText; // Update is called once per frame void Update () { scoreText.text = "Score: " + score.ToString(); } } 138

139.

ScoreManagerにTextを追加する 139

140.

EnemyController Scoreが入るようにする void TakeDamage(int damage) { enemyHealth -= damage; HpSlider.value = (float)enemyHealth /10 ; if (enemyHealth <= 0) { ScoreManager.score += 10; Destroy(gameObject); } } 140

141.

スコアが入るようになった 141

142.

TimeLineについて 142

143.

TimeLineについて プログラミング無しで、時系列にアニメーション、オーディオ、カメラワーク、パーティクル の発生などを視覚的に再生設定を行う機能。 ゲーム内ムービーや映像作品を作ることが簡単に行える。 143

144.

Timeline Windowを表示する 144

145.

空のオブジェクトを追加する TimelineWindowの”Create”する 145

146.

Timeline Windowが有効化されます 146

147.

Trackを追加する 147

148.

Activation Trackを使ってみる アクティブと非アクティブを時間軸で設定する。 ↑アクティブ化・非アクティブ化したいオブジェクトを Hierarchy Windowから追加する。 148

149.

Animation Trackを追加する アニメーションを追加する。 149

150.

Animation Trackにアニメーションクリップを追加 150

151.

アニメーションのブレンド アニメーションのブレンドも行えます。 151

152.

アニメーションが追加されます 152

153.

Default Playables Timelineのトラックの種類を追加できる 153

154.

追加されたトラック 154

155.

Transform Tween Track パスを設定してオブジェクトを動かすことができる。 155

156.

空のオブジェクトを追加してパスを設定する Z軸方向を前にする 156

157.

Transform Tween Trackを追加する パスで動かしたいオブジェクトを追加する。 157

158.

Waypointを使ってPathを設定する 158

159.

Path通りに動くようになる 159

160.

Text Switcher Track Text SwitcherはTextのテキスト内容とテキストの大きさを変えることができるようになる。 ↑テキストを追加する 160

161.

Text Switcher Track 161

162.

Text Switcher Track 162

163.

Time Dilation Trackを追加する 時間の流れをコントロールできる 163

164.

Cinemachine Trackを追加してCinemachineを制御 164

165.

VirtualCameraを複数台設置する 165

166.

VirtualCameraを複数台追加 166

167.

Cinemachine Shot Clipを追加する 167

168.

Main Cameraを追加する ↑ここにはMainCamera(CinemachineBrain)が 追加されたオブジェクトを追加する。 168

169.

Cinemachine Shotを追加する Shotを追加する。 169

170.

ワークショップ TimeLineを利用して映像を作成しよう 170

171.

知っておきたいUnityのサービス Unity Collaborate Unity Teams Basic 無料 少人数のチームのスタートアップに。1GB のクラウドストレージが付属し、最大で 3 人 のチームメンバーを追加できます。 171

172.

Unity Studentプランのご紹介 https://store.unity.com/ja/academic/unity-student Unity Student には、5 シートの Unity Teams Advanced が付属します。 172

173.

知っておきたいUnityのサービス Cloud Build 173

174.

知っておきたいUnityのサービス Unity Analytics 174

175.

【Unite Tokyo 2019】開発から運用まで、デベロッパーをサポートするUnity Services https://www.slideshare.net/UnityTechnologiesJapan002/unite-tokyo-2019unity-services 175

176.

もっとUnityを学びたい方へ https://unity.com/ja/products/learn-premium 176