Unity-クイックガイド
Unityは、最初にリリースされたクロスプラットフォームのゲームエンジンです。 Unity TechnologiesUnityの焦点は、2Dおよび3Dゲームとインタラクティブコンテンツの両方の開発にあります。Unityがサポートするようになりました20 最も人気のあるプラットフォームはPC、Android、iOSシステムですが、展開するためのさまざまなターゲットプラットフォーム。
Unityは、グラフィック、オーディオ、レベル構築ツールのインターフェイスを含む、ゲームを設計および構築するための完全なツールキットを備えており、プロジェクトで作業するために外部プログラムの使用を最小限に抑えます。
このシリーズでは、私たちは-になります
- Unityのさまざまな基礎の使い方を学ぶ
- エンジンですべてがどのように機能するかを理解する
- ゲームデザインの基本概念を理解する
- 実際のサンプルゲームの作成と構築
- プロジェクトを市場に展開する方法を学ぶ
さあ、始めましょう。
Unityでコンテンツを作成するための主な要件は、Unityエンジンと開発環境をダウンロードすることです。コアエンジンに加えて、オプションでダウンロードすることもできますmodules UnityスクリプトをVisualStudioに統合するためのツールだけでなく、さまざまな異なるプラットフォームにデプロイするため。
Unityをインストールするには、これに進んでください。そこに到達したら、-をクリックします。
Choose your Unity + Download.
次のページで、をクリックします Try Now 下のボタン Personal。これはUnityの無料バージョンであり、すべてのコア機能が含まれています。このシリーズを開始するときは、購入を検討する前にエンジンの使用方法を学ぶことをお勧めします。Plus または Pro。
次のページで、下にスクロールしてクリックし、あなたまたはあなたの会社の年間収益が100,000米ドルを超えていないことを確認します。そうした場合、Unity Freeを試すことはできませんが、Proバージョンの30日間の無料トライアルにサインアップすることはできます。
次に、Unityをインストールするための目的のプラットフォームをクリックします。このシリーズでは、Windowsエンジンのバージョン。Unityをにインストールすることも可能ですUbuntuおよびいくつかの追加のLinuxシステムについては、こちらを参照してください
それも highlyUnityに同梱されている標準のMonoDevelopIDEよりも多くの便利なツールを提供する最新バージョンのVisualStudioをインストールすることをお勧めします。
インストーラーがダウンロードされたら、Unityでインストールするコンポーネントを選択するためのメニューが表示されるまでインストーラーを実行します。
ここで、必要なコンポーネントを選択します。このシリーズでは、画像に表示されているコンポーネントをインストールします。この選択には、エンジン自体、エンジンのドキュメント、IDEが含まれます。Android用のビルドツールと、後でプロジェクトに追加できるアセットのコレクション。
[次へ]をクリックし、指示とオプションに従って、Unityに自分自身をダウンロードしてコンピューターにインストールさせます。
Unityを開き、次のレッスンで最初のプロジェクトを作成します。
最初のプロジェクトの作成
Unityは、2Dゲームと3Dゲームの両方に等しく適しています。Unityで作成されたすべてのゲームは、Projects 起動画面から。
新しくインストールしたUnityのコピーを開きます。以下のような画面が表示されます-
上の画像のように、既存のプロジェクトがぼやけた領域に表示されます。
ウィンドウの右上隅に、 New上に示すようなアイコン。アイコンをクリックすると、プロジェクト設定画面が表示されます。
ここでは、プロジェクトに名前を付けたり、保存場所を設定したり、プロジェクトの種類を設定したり、既存のアセットを追加したりできます。
今のところ、最初のプロジェクトに「HelloWorld!」という名前を付けましょう。に設定します2D モード。
クリック Create ProjectUnityにプロジェクトのコアファイルをセットアップさせます。コンピュータの速度、事前に追加されたアセット、プロジェクトの種類によっては、時間がかかる場合があります。
エンジンを知る
新しいプロジェクトが作成され、Unityが開くと、次の画面が表示されます-
このウィンドウに表示されているものを簡単に説明します。とりあえず、4つの主要な地域に関心があります-
このウィンドウは、私たちが構築する場所です Scenes。シーンはlevelsゲーム内のすべてが行われます。あなたが小さいをクリックするとGameタブをクリックすると、プレーヤーにとってゲームがどのように見えるかを示すプレビューウィンドウが表示されます。今のところ、それはシンプルな青い背景であるはずです。
この地域は Inspector。シーンにオブジェクトがないため、今のところ空です。インスペクターがどのように使用されるかは後で説明します。
このウィンドウは Scene Hierarchy。これは、現在開いているシーン内のすべてのオブジェクトが、それらの親子階層とともに一覧表示される場所です。このリストにオブジェクトをまもなく追加します。
最後に、この地域は Project Assets窓。現在のプロジェクトのすべてのアセットはここに保存および保持されます。テクスチャ、フォント、サウンドファイルなど、外部からインポートされたすべてのアセットも、シーンで使用される前にここに保持されます。
次のレッスンでは、Unityでのゲームのワークフローと動作について説明します。
Unityはどのように機能しますか?
Unityでは、すべてのゲームプレイは scenes。シーンは、ゲームレベル、タイトル画面、メニュー、カットシーンなど、ゲームのすべての側面が行われるレベルです。
デフォルトでは、Unityの新しいシーンには Camera と呼ばれるシーン内のオブジェクト Main Camera。シーンに複数のカメラを追加することは可能ですが、ここではメインカメラのみを扱います。
メインカメラは、と呼ばれる特定の領域で表示または「キャプチャ」するすべてのものをレンダリングします viewport。この領域に入ってくるものはすべて、プレーヤーに表示されます。
シーンビュー内にマウスを置き、下にスクロールしてシーンビューをズームアウトすると、このビューポートが灰色の長方形として表示されます。(Altキーを押しながら右クリックしてドラッグすることもできます)。
A scene それ自体はから作られています objects、と呼ばれる GameObjects。GameObjectsは、プレーヤーのモデルから画面上のGUIまで、ボタンや敵から音源のような目に見えない「マネージャー」まで、何でもかまいません。
GameObjectsには一連の components それらに添付されており、シーン内での動作と、シーン内の他のユーザーへの反応について説明しています。
実際、私たちは今それを探求することができます。クリックしてくださいMain Camera の中に Scene Hierarchy と見て Inspector。今は空ではありません。代わりに、一連の「モジュール」が含まれます。
GameObjectの最も重要なコンポーネントは、 Transform成分。シーンに存在するオブジェクトには、transform、ゲームの世界、または存在する場合はその親に対する位置、回転、スケールを定義します。
追加のコンポーネントは、をクリックしてオブジェクトにアタッチできます。 Add Component目的のコンポーネントを選択します。後続のレッスンでは、添付する予定ですScripts GameObjectsに、プログラムされた動作を与えることができるようにします。
コンポーネントのいくつかの例を考えてみましょう-
Renderer −オブジェクトのレンダリングと表示を担当します。
Collider −オブジェクトの物理的な衝突境界を定義します。
Rigidbody −重量や重力などのリアルタイムの物理プロパティをオブジェクトに提供します。
Audio Source −サウンドを再生および保存するためのオブジェクトプロパティを提供します。
Audio Listener −オーディオを実際に「聞き取り」、プレーヤーのスピーカーに出力するコンポーネント。デフォルトでは、1つはメインカメラに存在します。
Animator −オブジェクトにアニメーションシステムへのアクセスを許可します。
Light −オブジェクトを光源として動作させ、さまざまな効果をもたらします。
このチャートでは、Unityがどのように機能するかを確認できます composes GameObjectsを介してシーンにそれ自体。
次のレッスンでは、最初のGameObjectを作成し、スクリプトについて詳しく説明します。
Sprites グラフィックイメージを持つ単純な2Dオブジェクトです( textures) それらの上に。エンジンが2Dモードの場合、Unityはデフォルトでスプライトを使用します。3D空間で表示すると、スプライトにはZ幅がないため、紙のように薄く見えます。
スプライトは、3D空間で回転しない限り、常にカメラに垂直な角度で向きます。
Unityが新しいスプライトを作成するときは常に、テクスチャを使用します。次に、このテクスチャが新しいGameObjectに適用され、Sprite Rendererコンポーネントが付属しています。これにより、gameObjectがテクスチャで表示されるようになるだけでなく、画面上での外観に関連するプロパティも提供されます。
Unityでスプライトを作成するには、エンジンに texture。
まず、テクスチャを作成しましょう。使用したいPNGやJPGなどの標準画像ファイルを取得して保存し、画像をにドラッグします。Assets ユニティの地域。
次に、から画像をドラッグします Assets に Scene Hierarchy。マウスボタンを離すとすぐに、テクスチャの名前を持つ新しいGameObjectがリストに表示されます。また、画面の中央に画像が表示されます。Scene View。
スプライトを作成する際には、次の点を考慮してください。
外部ソースからUnityにドラッグすることで、 Asset。
このアセットは画像なので、 texture.
このテクスチャをシーン階層にドラッグすることで、スプライトレンダラーがアタッチされた、テクスチャと同じ名前の新しいゲームオブジェクトを作成しています。
このスプライトレンダラーは、そのテクスチャを使用してゲーム内の画像を描画します。
これで、 sprite 私たちのシーンで。
次のレッスンでは、いくつかを見ていきます modifiers 私たちが持っているスプライトのために。
インポートしたばかりのスプライトは、さまざまな方法で操作して、外観を変更することもできます。
エンジンのインターフェースの左上隅を見ると、以下のようなツールバーがあります-
これらのボタンの機能について説明しましょう。
ザ・ Hand ツールは、オブジェクトに影響を与えずにシーン内を移動するために使用されます。
次に、 Moveツール。これは、ゲームの世界でオブジェクトを移動するために使用されます。
中央には、 Rotate ツール。ゲームワールド(または親オブジェクト)のZ軸に沿ってオブジェクトを回転します。
ザ・ Scalingツールは上向きに配置されます。このツールを使用すると、特定の軸に沿ってオブジェクトのサイズ(スケール)を変更できます。
最後に、 Rectツール。このツールは、Move そしてその Scalingツールですが、精度が低下する傾向があります。UI要素を配置するのにより便利です。
これらのツールは、プロジェクトの複雑さが増すにつれて価値があることがわかります。
始めたばかりのとき、gameObjectの変換が間違いなくその最も重要なコンポーネントである方法について説明しました。この章では、コンポーネントについて詳しく説明します。さらに、の概念についても学びますObject Parenting。
変換には3つの目に見えるプロパティがあります- position、 rotation、 そしてその scale。これらのそれぞれには、3つの軸に対して3つの値があります。2Dゲームは通常、ポジショニングに関してはZ軸に焦点を合わせていません。2DゲームでのZ軸の最も一般的な使用法は、視差の作成です。
回転プロパティは、ゲームワールドまたは親オブジェクトに対してオブジェクトがその軸を中心に回転する回転量(度単位)を定義します。
オブジェクトのスケールは、 large元のサイズまたはネイティブサイズと比較した場合です。たとえば、2x2の寸法の正方形を考えてみましょう。この正方形をX軸に対して3で、Y軸に対して2でスケーリングすると、サイズは6x4の正方形になります。
次のセクションでは、何について説明します Object Parenting です。
オブジェクトの子育てとは何ですか?
Unityでは、オブジェクトは Hierarchyシステム。このシステムを使用すると、GameObjectsは他のGameObjectsの「親」になることができます。
GameObjectに親がある場合、ゲームワールドではなく、別のGameObjectに関してすべての変換変更を実行します。
たとえば、(10、0、および0)に親が配置されていないオブジェクトは、ゲームワールドの中心から10ユニットの距離にあります。
ただし、 gameObject with a parent placed at(10、0、0)は、 parent’s 現在の位置が中心になります。
GameObjectは、目的の親にドラッグアンドドロップするだけでペアレント化できます。「子」オブジェクトは、親オブジェクトの横にある矢印とともに小さなくぼみでオブジェクトリストに表示されます。
GameObjectsの子育てには、いくつかの用途があります。たとえば、タンクのさまざまな部分をすべて個別のGameObjectとし、「tank」という名前の単一のGameObjectの下にペアレント化することができます。このように、この「タンク」の親GameObjectが移動すると、親に応じて位置が常に更新されるため、すべてのパーツが一緒に移動します。
次のレッスンでは、内部資産について説明します。また、プロジェクトでアセットを作成および管理する方法についても学習します。
Unityは、オーディオファイル、画像、3Dモデルなどの他のプログラムからインポートする外部アセットに加えて、 Internal資産。Unity自体の内部で作成されるこれらのアセットは、そのため、作成または変更するための外部プログラムを必要としません。
のいくつかの重要な例 internal 資産は以下のとおりです-
Scenes −これらは「レベル」として機能します。
Animations −これらには、gameObjectのアニメーションのデータが含まれています。
Materials −これらは、照明がオブジェクトの外観にどのように影響するかを定義します。
Scripts −gameObjects用に記述されるコード。
Prefabs −これらはGameObjectsの「青写真」として機能するため、実行時に生成できます。
他のいくつかの重要なアセットは、プレースホルダー、スプライト、モデルです。これらは、後で適切なグラフィックやモデルに置き換えることができるように、迅速なプレースホルダーが必要な場合に使用されます。
内部アセットを作成するには、Assetsフォルダーを右クリックして[ Create。
この例では、 Triangle と Square。
上をスクロールします Sprites 選択してクリックします Triangle。
のプロセスを繰り返します Square、そして2つの新しいグラフィックアセットが必要です。
適切なゲームを構築するために不可欠であるため、これらの内部アセットをさらに詳しく調べていきます。
結局のところ、かなりの量の作業が終わったら、進捗状況を保存する必要があります。Unityでは、Ctrl + Sを押してもプロジェクトは直接保存されません。
Unityのすべてはシーンで起こります。保存と読み込みも同様です。現在の作業をシーン(.unity拡張子)としてアセットに保存する必要があります。
試してみましょう。Ctrl + Sを押してシーンに名前を付けると、アセットリージョンに新しいアセットが表示されます。これはシーンファイルです。
それでは、新しいシーンを作成してみましょう。これを行うには、アセットを右クリックして、作成→シーンに移動します。新しいシーンに名前を付けて、Enterキーを押します。
エディタモード(ゲームがプレイされていないとき)では、シーンをダブルクリックすることで、シーンをエディタにロードできます。現在のシーンに未保存の変更があるシーンをロードすると、変更を保存または破棄するように求められます。
あなたの最初のスクリプト
画像をインポートしてゲーム内で静止させても、実際にはどこにも行き着きません。それはおそらく素晴らしい額縁を作るでしょうが、ゲームではありません。
ScriptingUnityでゲームを作るために不可欠です。スクリプティングは書くプロセスですblocksシーン内のGameObjectsにコンポーネントのようにアタッチされているコードの。スクリプトは、自由に使える最も強力なツールの1つであり、優れたゲームを作成または中断できます。
Unityでのスクリプティングは、C#またはUnityのJavaScriptの実装(UnityScriptと呼ばれる)を介して行われます(ただし、2018サイクルで、UnityScriptは非推奨フェーズを開始しているため、使用しないことをお勧めします)。このシリーズでは、C#を使用します。
新しいスクリプトを作成するには、アセットを右クリックして、 Create → C# Script。また、使用することができますAssets エンジンのトップバーにあるタブ。
新しいスクリプトを作成すると、新しいアセットが表示されます。とりあえず名前はそのままにしてダブルクリックしてください。デフォルトのIDEがスクリプトとともに開くはずです。それが実際に何であるかを見てみましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
}
}
スクリプト名は次のように表示されます。 class から派生 MonoBehaviour。MonoBehaviourとは何ですか?これは、クラスとメソッドの膨大なライブラリです。Unityのすべてのスクリプトがいずれかの方法から派生するのに役立ちます。Unityでスクリプトを書くほど、MonoBehaviourが実際にどれほど役立つかがわかります。
先に進むと、戻り値の型を持たない2つのプライベートスクリプトがあります。 Start そして Updateメソッド。ザ・Start メソッドが実行されます once これが使用されるgameObjectが使用される最初のフレームでは、シーンでアクティブになります。
ザ・ Updateメソッドは、Startメソッドの後にゲームのすべてのフレームを実行します。通常、Unityのゲームは60 FPSまたはフレーム/秒で実行されます。つまり、Update オブジェクトがアクティブな間、メソッドは1秒間に60回呼び出されます。
Unityスクリプトを使用すると、MonoBehaviourクラス全体に加えて、ジェネリックコレクション、ラムダ式、XML解析などのコアC#機能を利用できます。次のレッスンでは、最初のコードを記述します。
このレッスンでは、ユーザーの入力に基づいてgameObjectを上下左右に移動させるコードを記述します。これは、Unityスクリプトのワークフローをより簡単に理解するのに役立つはずです。
すべてのGameObjectには少なくとも1つのコンポーネントがあることに注意してください- Transform。特別なのは、gameObjectのTransformがUnityのスクリプト側にも変数として表示されるため、コードを介して変更できることです。これも変換に限定されません。Unityのすべてのコンポーネントにはプロパティがあり、スクリプトの変数からアクセスできます。
移動スクリプトから始めましょう。新しいスクリプトを作成し、「Movement」という名前を付けます。
スクリプトを開くと、前のレッスンで見たものと同じものが表示されます。
名前の付いたパブリックfloat変数を作成しましょう speed。変数を作るpublic Unityには大きな利点があります-
変数はエディター内で変更可能なフィールドとして表示されるため、コード内の値を手動で調整する必要はありません。
public class Movement : MonoBehaviour {
public float speed;
}
他のメソッドに触れずにこのスクリプトを保存すると、Unityでコンパイルされるはずです。
(コンパイル
次、 drag and dropアセットからゲームオブジェクトへのスクリプト。正しく実行すると、これがGameObjectのプロパティに表示されるはずです-
速度の値は調整可能であり、コード内で常に変更する必要がないため、start()の代わりにupdate()メソッドを使用できます。
ここで、Updateメソッドの目的を考えてみましょう-
ユーザー入力を確認してください。
ユーザー入力がある場合は、入力の指示を読んでください。
オブジェクトの速度と方向に基づいて、オブジェクトの変換の位置の値を変更します。そのために、次のコードを追加します-
void Update() {
float h = Input.GetAxisRaw(“Horizontal”);
float v = Input.GetAxisRaw(“Vertical”);
gameObject.transform.position = new Vector2 (transform.position.x + (h * speed),
transform.position.y + (v * speed));
ここで、breifのコードについて説明します。
まず、次の名前の浮動小数点変数を作成します h (水平の場合)、その値はによって与えられます Input.GetAxisRaw方法。このメソッドは、プレーヤーが上/下/左/右矢印で押したキーに応じて、-1、0、または1を返します。
Inputクラスは、キーの押下、マウス入力、コントローラー入力などの形式でユーザーからの入力を取得する役割を果たします。GetAxisRawメソッドは少し理解しにくいので、後で説明します。
次に、 updating 新しいを作成することによって定義された新しい位置へのgameObjectの位置 Vector2。Vector2は2つのパラメーターを取ります。x and yそれぞれの値。x値については、オブジェクトの合計を提供しますcurrent 位置とその speed、キーがその位置に押されたフレームごとに効果的にいくらかの量を追加します。
このスクリプトを保存して、Unityに戻ります。Unityは、正常にコンパイルされるとすべてのスクリプトを自動的に更新するため、スクリプトを何度も再アタッチする必要はありません。
完了したら、の値を変更します speedGameObjectのプロパティで0.8と言います。値を大きくするとプレーヤーの動きが速くなりすぎるため、これは重要です。
次に、をクリックします Play そして、あなたの最初の小さなゲームが実際に動いているのを見てください!
矢印キーを押して移動してみてください。ゲームを停止するには、もう一度[再生]を押します。リアルタイムで速度を調整することもできるので、常に停止して開始する必要はありません。
次のレッスンでは、剛体と衝突について学習します。
Unityでの衝突は、実際のSprite自体から分離され、個別のコンポーネントとしてアタッチされ、独自に計算されます。この背後にある原因を学びましょう。
EverythingあなたのゲームにはGameObjectがあります。レベルを構成する個々のタイルでさえ、それ自体がGameObjectです。
すべてのコンポーネントをGameObjectと見なすと、 thousandsシーン内のGameObjectsの、何らかの方法で相互作用します。UnityがすべてのGameObjectに衝突を追加した場合、エンジンがそれらのすべての衝突を計算することは非現実的であると想像できます。
先に進み、プレイヤーキャラクターが衝突できる単純な「壁」を追加します。これを行うには、別のスプライトを作成し、Rectツールを使用してスケールアップします。また、を通して赤い色を与えますColor スプライトレンダラーコンポーネントのプロパティ。
さあ、 Add Componentインスペクターで、「BoxCollider2D」と入力します。表示される最初のコンポーネントをクリックすると、新しいコンポーネントが表示されます。
GameObjectの周囲に明るい緑色の線が表示されます。これはcollision boundary。それが実際の定義ですshape 衝突可能なオブジェクトの。
移動可能なGameObjectでも同じことを繰り返します。
もちろん、Unityでの衝突は単なるボックスに限定されません。それらはさまざまな形やサイズの範囲であり、必ずしもオブジェクトのパラメータのレプリカではありません。
また、多角形をとることもできます。
開発者やデザイナーが使用するのを見るのは珍しいことではありません approximate衝突境界の形状は、衝突型加速器を簡素化し、エンジンの不要な計算を回避します。コライダーを使ってさまざまな形やサイズを作成する方法をすぐに学びます。
衝突境界が設定されたので、再生を押して、実際の動作を確認します。
可動オブジェクトが正常に動作していないことに気付くでしょう。次の章では、オブジェクトの動作について説明します。
前の章での衝突の主な問題はコードにありました。 We will now modify the values of the GameObject’s position directly。プレーヤーがキーを押している場合は、単に位置に値を追加しているだけです。境界や他のゲームオブジェクトに適切に反応するようにプレーヤーを動かす方法が必要です。
そのためには、何を理解する必要があります rigidbodiesです。リジッドボディは、GameObjectが反応することを可能にするコンポーネントですreal-time physics。これには、力と重力、質量、抗力、運動量に対する反応が含まれます。
クリックするだけで、リジッドボディをゲームオブジェクトにアタッチできます。 Add Component 検索フィールドにRigidbody2Dと入力します。
Rigidbody2Dをクリックすると、コンポーネントがGameObjectにアタッチされます。添付されたので、多くの新しいフィールドが開かれていることに気付くでしょう。
デフォルト設定では、GameObjectは垂直に落下します down重力による。これを回避するには、Gravity Scale 0に。
GameObjectはまだその物理コンポーネントとは何の関係もないため、ゲームをプレイしても目に見える違いは表示されません。
問題を解決するために、コードをもう一度開いて書き直してみましょう。
public class Movement : MonoBehaviour {
public float speed;
public Rigidbody2D body;
// Update is called once per frame
void Update() {
float h = Input.GetAxisRaw(“Horizontal”);
float v = Input.GetAxisRaw(“Vertical”);
body.velocity = new Vector2(h * speed, v * speed);
}
}
作成したことがわかります reference宣言内のRigidbody2Dに変換し、更新コードはオブジェクトの変換ではなくその参照で機能します。これは、リジッドボディに移動の責任が与えられたことを意味します。
あなたは期待するかもしれません bodyNullReferenceExceptionをスローするための参照。これには、何も割り当てていないためです。ゲームをそのままコンパイルして実行すると、エディターの左下に次のエラーが表示されます。
これを修正するために、スクリプトによって作成されたコンポーネントについて考えてみましょう。パブリックプロパティは、speed変数で行ったように、Unityで独自のフィールドを作成することを忘れないでください。
速度を5前後の高い値に調整し、ゲームをプレイします。
これで、衝突が正しく機能するようになります。
この章では、カスタム衝突境界について学習しましょう。また、コライダーのサイズと形状を調整する方法についても学びます。
BoxColliderから始めましょう。ボックスコライダー(2D)には、調整可能な4つの側面があり、長方形のような形をしています。Colliderのコンポーネントで、このボックスをクリックします-
コライダーに4つの「ハンドル」が表示されます。これらのハンドルをドラッグして、サイズを調整できます。
単純な形状の場合、Unityは、適切な形状を選択すれば、コライダーの形状にも可能な限り最適なものを検出します。たとえば、サークルスプライトでサークルコライダーを選択すると、その半径に一致します。
より複雑な形状の場合、Unityは最も単純でありながら最も精巧なコライダー形状を作成しようとします。そのためには、を使用する必要がありますPolygon Collider 2D。
[コライダーの編集]ボタンをクリックして、コライダーの調整を試してみてください。
オブジェクトのインスタンス化と破棄は、ゲームプレイ中に非常に重要であると見なされます。インスタンス化とは、単に存在をもたらすことを意味します。アイテムはゲーム内に表示または「スポーン」し、敵は死に、GUI要素は消え、シーンはゲーム内で常に読み込まれます。不要なオブジェクトを適切に取り除く方法と、必要なオブジェクトを持ち込む方法を知ることは、さらに重要になります。
まず何を理解しましょう prefabsです。Unityでインスタンス化がどのように機能するかを理解するには、プレハブが重要であると考えられています。
Prefabs のような blueprintsGameObjectの。プレハブは、ある意味で、copyシーンの作成時に存在していなくても、複製してシーンに配置できるGameObjectの 言い換えれば、プレハブはdynamically generate GameObjects。
プレハブを作成するには、目的のGameObjectをシーン階層からプロジェクトにドラッグするだけです。 Assets。
ここで、GameObjectをインスタンス化するために、 Instantiate()スクリプトのメソッド。このメソッドは、MonoBehaviourは、GameObjectをパラメータとして受け取るため、作成/複製するGameObjectを認識します。また、新しくインスタンス化されたオブジェクトの変換を変更したり、ペアレント化したりするためのさまざまなオーバーライドもあります。
新しいインスタンス化を試してみましょう hexagon いつでも Space キーが押されました。
と呼ばれる新しいスクリプトを作成します Instantiatorそしてそれを開きます。の中にUpdate メソッド、以下のコードを入力します。
ここでは、 GetKeyDown の方法 Input最後のフレームでプレーヤーが特定のボタンを押したかどうかを確認するクラス。チェックし続けたいので入れますUpdate、1秒間に60回実行されます。GetKeyDownメソッドはtrue キーが指定されている場合 KeyCode 列挙型(標準キーボードで可能なすべてのキーを一覧表示)がそのフレームで押されます。
public class Instantiator : MonoBehaviour {
public GameObject Hexagon;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
Instantiate(Hexagon);
}
}
}
上部のパブリックGameObject宣言は、前のレッスンでRigidbody2D用に作成したものと同様のスロットを作成します。このスロットはprefabs (編集者の時間で)そして gameObjects (実行時)ただし。
スクリプトを保存して、コンパイルします。完了したら、新しいを作成します。empty オブジェクト階層の右クリックメニューに移動し、を選択してGameObject Create Empty。
このオブジェクトに、次のようなわかりやすい名前を付けます。 Instatiator Object新しく作成したスクリプトを添付します。GameObjectに表示されるスロットで、作成したプレハブをドラッグします。
ここでゲームを実行する場合、スペースバーを押すと、プレハブの作成に使用したものと同じ新しい六角形オブジェクトが作成されます。オブジェクト階層で作成されている各六角形を確認できます。それらがゲームに表示されない理由は、当分の間、それらがすべて作成されているためです。exactly 上下に。
次のレッスンでは、オブジェクト破壊の概念を理解します。
GameObjectsの破棄は、インスタンス化と同じくらい重要です。この章では、ゲームオブジェクトを破棄する方法を学習します。
幸い、GameObjectの破棄は、作成するのと同じくらい簡単です。破棄するオブジェクトへの参照が必要なだけで、Destroy() この参照をパラメーターとして使用するメソッド。
ここで、割り当てられたキーが押されたときに自分自身を破壊する5つの六角形を作成してみましょう。
と呼ばれる新しいスクリプトを作成しましょう HexagonDestroyerVisualStudioで開きます。公開することから始めますKeyCode変数。KeyCodeは、標準キーボードのキーを指定するために使用され、そのメソッドのInputクラスはそれを使用します。以前にRigidbodyとPrefabsで行ったように、この変数を公開することで、エディターからアクセスできるようになります。変数が公開されるとき、私たちは必要ありませんhardcode「KeyCode.A」などの値をコードに追加します。コードは、必要な数のオブジェクトを使用して柔軟にすることができます。
public class HexagonDestroyer : MonoBehaviour {
public KeyCode keyToDestroy;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(keyToDestroy)) {
Destroy (gameObject);
}
}
}
メソッドで「gameObject」(小さいg、大文字のO)という名前の変数をどのように使用したかを観察します。この新しいgameObject 変数(タイプ GameObject)は、このスクリプトがアタッチされているgameObjectを参照するために使用されます。このスクリプトを複数のオブジェクトにアタッチすると、この変数が関係する場合は常にすべて同じように反応します。
ただし、この2つを混同しないでください。
GameObject 大文字のGとOは class これはすべてのGameObjectを網羅し、Instantiate、Destroy、コンポーネントをフェッチするメソッドなどの標準メソッドを提供します。
gameObject とともに small gと大文字のOは特定のものです instance このスクリプトが現在アタッチされているgameObjectを参照するために使用されるGameObjectの。
コードをコンパイルして、Unityに戻りましょう。
次に、新しい六角形のスプライトを作成し、それにスクリプトを添付します。次に、階層内のgameObjectを右クリックして、Duplicate。新しいスプライトが階層に作成されます。あなたは使用する必要がありますMoveそれを再配置するためのツール。手順を繰り返して、同様の六角形を作成します。
それぞれの六角形をクリックして、それらのスクリプトコンポーネントを確認します。これで、個々のキーを設定して、そのキーが押されたときにGameObjectがそれ自体を破棄するようにできます。たとえば、5つの六角形を作成し、A、S、D、F、およびGキーが押されたときに破壊するように設定します。
複数の六角形に同じキーを設定できます。キーを押すと、すべての六角形が同時に破壊されます。これは、の使用例です。gameObject 参照。個別に設定しなくても、スクリプトを使用して個々のオブジェクトを参照するために使用できます。
同じキーを複数の六角形に設定でき、キーを押すとそれらはすべて同時に破壊されます。これは、の使用例です。gameObject 参照。個別に設定しなくても、スクリプトを使用して個々のオブジェクトを参照するために使用できます。
GameObjectを破棄しても、オブジェクトが粉々になったり爆発したりするわけではないことを理解することが重要です。オブジェクトを破壊すると、ゲーム(およびそのコード)に関する限り、その存在は単純に(そしてすぐに)停止します。このオブジェクトとその参照へのリンクは現在壊れており、それらのいずれかにアクセスまたは使用しようとすると、通常、エラーとクラッシュが発生します。
コルーチンは、Unityでゲームを作成するときに最も役立つツールです。コルーチンが何であるかを理解するために、以下に示すコード行を考えてみましょう。
IEnumerator MyCoroutineMethod() {
// Your code here…
yield return null;
}
一般に、Unity(または実際にはC#)で関数を呼び出すと、関数は最初から最後まで実行されます。これは、コードに関する限り、「通常の」動作と見なすものです。ただし、関数の速度を故意に遅くしたり、実行する1秒の長さより長く待機させたりする場合があります。コルーチンはまさにそれが可能です:コルーチンは次のことができる機能ですwaiting そして timing そのプロセス、およびそれを完全に一時停止します。
コルーチンがどのように機能するかを理解するための例を考えてみましょう。1秒間隔で赤と青の間で色が変わる正方形を作成するとします。
まず、スプライトを作成します。次に、新しいスクリプトを作成し、名前を付けますColorChanger。このスクリプトでは、への参照を取得しますSprite Rendererスプライトの。ただし、コンポーネントを取得する別の方法を使用します。これまでのようにコンポーネントをスロットにドラッグアンドドロップする代わりに、コンポーネント自体を検出するようにコードに要求します。
これは、 GetComponentメソッド。検出した最初の一致するコンポーネントを返します。オブジェクトごとに1つのスプライトレンダラーしか使用しないため、このメソッドを使用して、レンダラーへの参照を毎回自動的に検出して取得できます。
レンダラーは、スプライトを実際に画面に表示する責任があることを忘れないでください。レンダラーにはcolorスプライトのグローバルカラーに影響を与えるプロパティ。これは変更される値です。を作るColor 値publicを使用すると、オペレーティングシステムのデフォルトのカラーピッキングプログラムのエディターで値を選択できます。
private SpriteRenderer sr;
public Color color1;
public Color color2;
void Start () {
sr = GetComponent<SpriteRenderer>();
StartCoroutine(ChangeColor());
}
IEnumerator ChangeColor() {
while (true) {
if (sr.color == color1)
sr.color = color2;
else
sr.color = color1;
yield return new WaitForSeconds(3);
}
}
ここで、コルーチン関数をwhileループにトラップします。
C#でコルーチンを作成するには、次を返すメソッドを作成するだけです。 IEnumerator。また、yield returnステートメント。歩留まりのreturnステートメントは特別です。これは、実際にUnityにスクリプトを一時停止して次のフレームに進むように指示するものです。
リターンを生み出すために使用できる方法はいくつかあります。その1つは、のインスタンスを作成することですWaitForSecondsクラス。これにより、コルーチンは続行する前に実際の秒数だけ待機します。
コードをコンパイルして、Unityに戻りましょう。交互の色を選んで、プレイします。これで、オブジェクトは3秒間隔で2つの色を切り替えるはずです。間隔をパブリック変数にし、色の変更の頻度を調整することもできます。
コルーチンは次の目的で広く使用されています timed先ほど行ったような方法。の多様性WaitForXメソッドには独自の用途があります。コルーチンは、ゲームが同時に実行されている間に単独で実行される「サイド」プロセスを実行するためにも使用されます。これは、たとえば、プレーヤーが1つのポイントから開始しているときに、大きなレベルの画面外の部分をロードする場合に便利です。
コンソールは、私たちが読む場所です Developer出力。これらの出力を使用すると、テスト用の追加機能を提供しなくても、コードのビットをすばやくテストできます。
デフォルトのコンソールに表示されるメッセージには3つのタイプがあります。これらのメッセージは、ほとんどのコンパイラ標準に関連している可能性があります-
- Errors
- Warnings
- Messages
エラー
エラーは、コードの実行を妨げる問題または例外です at all。
警告
警告は、コードの実行を停止しない問題ですが、実行時に問題を引き起こす可能性があります。
メッセージ
メッセージは、ユーザーに何かを伝える出力です。通常、問題を強調することはありません。
コンソールに独自のメッセージ、警告、エラーを出力させることもできます。そのために、Debugクラスを使用します。ザ・Debug クラスはMonoBehaviourの一部であり、スタータープログラムで通常の出力メッセージを作成する方法と非常によく似た、コンソールにメッセージを書き込むためのメソッドを提供します。
コンソールは、アセット領域の上にあるラベル付きタブにあります。
コンソールの出力は、 programmer、エンドユーザーやプレーヤーではありません。
コンソールに簡単なメッセージを書いてみましょう。これにより、スペースキーが押されたときに通知されます。このために、Log メソッドは、 Object パラメータとして、で文字列を使用します。
新しいスクリプトから始めることも、既存のスクリプトを変更することもできます。
void Update() {
if (Input.GetKeyDown(KeyCode.Space))
Debug.Log(“Space key was pressed!”);
}
このコードを保存、コンパイル、および実行して(もちろん、ゲームオブジェクトにアタッチして)、スペースバーを押してみてください。
Note −メッセージがエディターの下部に表示されることを確認します。
[コンソール]タブをクリックすると、メッセージが印刷されます。
同様に、を使用して警告を出力することもできます LogWarning メソッドとエラー LogError method. These will prove to be useful for testing small bits of code without actually having to implement them, as you will see later on.
There is a reason games put emphasis on audio; it is quite crucial to add aesthetic value to the game. From the very first Pong, one can hear beeps and boops from the ball hitting the paddles alternatingly. It was a really simple short square wave sample at the time, but what more could you want from the grandfather of all video games?
In real life, many things affect the way you perceive sound; the speed of the object, what type of scenario it is in, and what direction it is coming from.
There are a number of factors that can create unnecessary load on our engine. Instead, we try to create an idea of how our sound would work in our game, and build around that. This becomes especially prominent in 3D games, where there are 3 axes to deal with.
In Unity, we have dedicated components for audio perception and playback. These components work together to create a believable sound system that feels natural to the game.
Unity provides us with an array of useful tools and effects like reverb, the Doppler effect, real-time mixing and effects, etc. We will learn about these in our subsequent chapters.
The Audio Components
In this section, we will learn about the 3 primary components related to audio in Unity.
AudioSource
The AudioSource component is the primary component that you will attach to a GameObject to make it play sound. It will play back an AudioClip when triggered through the mixer, through code or by default, when it awakes.
An AudioClip is simply a sound file that is loaded into an AudioSource. It can be any standard audio file, such as .mp3, .wav and so on. An AudioClip is a component within itself as well.
AudioListener
An AudioListener is the component that listens to all audio playing in the scene, and transfers it to the computer’s speakers. It acts like the ears of the game. All audio you hear is in perspective of the positioning of this AudioListener. Only one AudioListener should be in a scene for it to function properly. By default, the main camera has the Listener attached to it. The Listener doesn’t have any exposed properties that the designer would want to care about.
Audio Filters
The output of an AudioSource or intake of an AudioListener can be modified with the help of Audio Filters. These are specific components that can change the reverb, chorus, filtering, and so on. Each specific filter comes as its own component with exposed values to tweak how it sounds.
Playing a Sound
Let us try making a button that plays a sound when it is clicked. To get started, we will Create a Circle sprite, and make it red.
Now, let us attach an Audio Source to this sprite.
For the object to play a sound, we have to give it one. Let us use this sound effect for our purpose.
http://www.orangefreesounds.com/ding-sfx/
Download the sound effect, and drag it into the Assets.
When Unity imports this asset as a sound file, it automatically is converted into an AudioClip. Therefore, you can drag this sound clip from the Assets directly onto the Audio Clip slot in our sprite’s Audio Source.
After you drag the sound clip from the Assets directly onto the Audio Clip slot in our sprite’s Audio Source, remember to unselect “Play on Awake” in the Audio Source properties; not doing so will make the sound play the moment the game starts.
Now, let us jump into our code. Create a new script called “BellSound” and open it up.
Since our Audio Source is controlled through code, we want to first get a reference to it. We will use the GetComponent method like before.
public class BellSound : MonoBehaviour {
AudioSource mySource;
// Use this for initialization
void Start () {
mySource = GetComponent<AudioSource>();
}
次に、クリックされているオブジェクトを検出するメソッドを設定しましょう。MonoBehaviourは、OnMouseDownという名前の必要なメソッドを提供します。このメソッドは、マウスがaの範囲内でクリックするたびに呼び出されます。collider そのgameObjectの。
ボタンにはまだコライダーを取り付けていないので、今すぐ取り付けましょう。
これにはリジッドボディは必要ありません。また、コードでこのコライダーにアクセスする必要もありません。メソッドが機能するには、そこにある必要があります。
メソッドをテストして、機能しているかどうかを確認しましょう。スクリプトに次のコードを記述し、ボタンに添付します。
void OnMouseDown() {
Debug.Log(“Clicked!”);
}
スクリプトを保存して添付したら、ゲームをプレイします。ボタンをクリックすると、コンソールにメッセージが表示されます。
これで、サウンドの再生から一歩離れました。あなたが今しなければならないのは電話することだけですPlay オーディオソースインスタンスのメソッド。
void OnMouseDown() {
mySource.Play();
}
スクリプトを保存して、ゲームで実行します。ボタンをクリックすると、音が鳴ります!
Note−クリックするたびにピッチが上がるボタンを作成することを検討してください。使用するmySource.pitch とカウンターとあなたがそれを理解できるかどうかを確認してください。)
このセクションでは、UnityのユーザーインターフェイスまたはUI要素の設計プロセスについて学習します。これには、基本セットアップと、Unityに付属する一般的な要素の概要が含まれます。
UnityでUIを設計するためのワークフローは、これまで行ってきたものとは少し異なるパスをたどります。手始めに、UI要素は標準のGameObjectではないため、そのまま使用することはできません。UI要素の設計は異なります。4:3の解像度で正しく表示されるメニューボタンは、正しく設定されていないと、16:9の解像度で引き伸ばされたり歪んだりするように見える場合があります。
UnityのUI要素は、シーンに直接配置されません。それらは常に、と呼ばれる特別なGameObjectの子として配置されます。Canvas。Canvasは、すべてのUI要素がレンダリングされるシーン上のUIの「描画シート」のようなものです。からUI要素を作成するCreate 既存のCanvasがないコンテキストメニューは自動的に生成します。
ここで、Canvas GameObjectを見て、追加の新しいコンポーネントについて知ってみましょう-
ザ・ Rect Transform 上部には、標準のGameObjectのTransformにはない多くの新しいプロパティがあるように見えます。
これは、通常のGameObjectの変換が虚数を記述するのに対して point 3D空間では、 RectTransform 虚数を定義します rectangle。これは、長方形の位置、大きさ、向きを正確に定義するための追加のプロパティが必要であることを意味します。
高さや幅などの長方形のいくつかの標準プロパティと、という2つの新しいプロパティを確認できます。 Anchors。アンカーは、他のエンティティがCanvasで「ロック」できるポイントです。これは、UI要素(ボタンなど)が右側のキャンバスに固定されている場合、キャンバスのサイズを変更すると、ボタンが常に相対位置にあることを意味します。right キャンバスの。
デフォルトでは、キャンバス領域の形状を変更することはできず、比較的 gigantic シーンの周りの長方形。
次は Canvas成分。これは、UIの描画方法に関するいくつかのユニバーサルオプションを保持するマスターコンポーネントです。
私たちが見る最初のオプションは Render Mode。このプロパティは、Canvasをゲームのビューに描画するために使用されるメソッドを定義します。
ドロップダウンリストには3つのオプションがあります。以降のセクションでオプションについて学びましょう。
画面スペース-オーバーレイ
このモードは、メニュー、HUDなどの最も標準的なモードです。シーン内の他のすべての上に、例外なく正確に配置されたUIをレンダリングします。また、画面またはゲームウィンドウのサイズが変更されたときにUIを適切にスケーリングします。これは、Canvasのデフォルトのレンダリングモードです。
画面スペース-カメラ
画面スペース-カメラは、カメラから設定された距離にある架空の投影面を作成し、すべてのUIをその面に投影します。これは、シーン内のUIの外観が、カメラで使用される設定に大きく依存することを意味します。これには、遠近法、視野などが含まれます。
世界宇宙
ワールドスペースモードでは、UI要素はワールドに配置された通常のゲームオブジェクトであるかのように動作します。ただし、これらはスプライトに似ているため、通常、ゲーム内のモニターやディスプレイのように、プレーヤーではなくゲームの世界の一部として使用されます。この性質のため、このモードではCanvasRectTransformの値を直接変更できます。
ザ・ Canvas ScalerUI要素のスケールと外観をより明確な方法で調整できるオプションのセットです。UI要素の方法を定義できますresize画面のサイズが変わると自分自身。たとえば、UI要素は、画面サイズに関係なく、また画面サイズに比例して同じサイズのままにすることも、次のようにスケーリングすることもできます。Reference Resolution。
Graphics Raycasterは、主にUI要素のレイキャスティング(レイキャスティングのUnityドキュメントへのリンク)を扱い、クリックやドラッグなどのユーザーが開始するイベントが正しく機能するようにします。
この章では、UI要素をシーンに挿入し、それらを操作する方法を学びます。
まず始めましょう Button。ボタンを挿入するには、シーン階層を右クリックして、Create → UI → Button。既存のCanvasとEventSystemがない場合、Unityが自動的に作成し、Canvas内にもボタンを配置します。
で覚えておいてください Overlayデフォルトモードであるレンダリングモードでは、Canvasのサイズはカメラのサイズに依存しません。あなたはをクリックすることによってこれをテストすることができますGame タブ。
シーンを再生すると、ボタンの上にマウスを置いたときの検出や、ボタンを押すと色が変わるなど、ボタンにはすでにいくつかの標準機能があります。
ボタンは、UIで実際に役立つ機能を必要とします。この機能は、そのプロパティを介して追加できます。
新しいスクリプトを作成して、それを呼び出しましょう ButtonBehaviour。
public class ButtonBehaviour : MonoBehaviour {
int n;
public void OnButtonPress(){
n++;
Debug.Log("Button clicked " + n + " times.");
}
}
ボタンを押した回数を記録する簡単な方法を作成しました。
Note−このメソッドは公開されている必要があります。それ以外の場合、ボタンの機能によって認識されることはありません。
空のGameObjectを作成し、このスクリプトをそれに添付してみましょう。ボタンはそれ自体では何もしないため、これを行います。スクリプトで指定されたメソッドのみを呼び出します。
次に、ボタンのプロパティに移動して、 OnClick() プロパティ。
下部のタブにある+アイコンを押すと、新しいエントリがリストに表示されます。
このエントリは、ボタンを押すとどのオブジェクトが作用するか、およびそのオブジェクトのスクリプトのどの関数が呼び出されるかを定義します。ボタンを押すときに使用されるイベントシステムにより、リストに追加するだけで複数の機能をトリガーできます。
空のGameObjectをドラッグアンドドロップします。 ButtonManager 作成したスクリプトを None (Object) スロット。
ナビゲート No Function ドロップダウンリスト、および私たちの OnButtonPress方法。(任意の名前を付けることができることを忘れないでください。OnButtonPressは単に標準化された命名規則です。)ButtonBehaviour セクション。
今すぐゲームをプレイすると、ボタンをテストできます。確かに、コンソールはボタンを押した回数を出力します。
Unityに組み込まれているテキストUIは、より強力で効率的なコミュニティ構築のアセットによって影が薄くなる傾向がある場合でも、学習者がUIの設計に取り掛かるのに最適な出発点です。
私たちの目的では、バニラのText要素で十分に開始できます。
テキストが独自のUI要素であるのは、主に dynamismその要素の。たとえば、プレーヤーの現在のスコアを画面に出力するには、スコアの数値を文字列に変換する必要があります。通常は、.toString() 表示される前のメソッド。
テキストUI要素を挿入するには、シーン階層に移動し、 Create → UI → Text。
新しいText要素がCanvasリージョンに表示されます。そのプロパティを見ると、いくつかの非常に便利なオプションがあります。
ただし、最も重要なのは Text field。そのフィールドにテキストボックスに何を言いたいかを入力できますが、それよりも一歩進んでいきたいと思います。
テキストのフォントを変更するには、最初にをインポートする必要があります font fileコンピューターからUnityにアセットとして。フォントはシーン内の何かにアクティブにアタッチする必要はなく、アセットから直接参照できます。
Text要素には、スクリプトを介してアクセスすることもできます。これは、dynamic UIが入ります。
前の章のように、コンソールの代わりに、ボタンが押された回数を出力します。実際にゲーム画面に印刷してみましょう。そのために、前のレッスンのButtonBehaviourスクリプトを開き、いくつかの変更を加えます。
using UnityEngine;
using UnityEngine.UI;
public class ButtonBehaviour : MonoBehaviour {
int n;
public Text myText;
public void OnButtonPress(){
n++;
myText.text = "Button clicked " + n + " times.";
}
}
最初に行った変更は、新しい名前空間参照を追加することでした。このリファレンスはUnityのUIコンポーネントを操作するために使用されるため、UnityEngine.UI ライン。
次に、パブリックText変数を作成します。ここで、TextUI要素をドラッグアンドドロップできます。
最後に、このUI要素に含まれる実際のテキストにアクセスします。 myText.text。
スクリプトを保存すると、ButtonManagerにテキストUI要素の新しいスロットが表示されます。そのText要素を含むgameObjectをスロットにドラッグアンドドロップし、[再生]ボタンを押すだけです。
この章では、このシリーズの最後のUI要素について学習します。スライダーは通常、特定の値を最大値と最小値のペアの間に設定する必要がある場合に使用されます。これの最も一般的な使用法の1つは、音量または画面の明るさです。
スライダーを作成するには、「作成」→「UI」→「スライダー」に移動します。新しいSlider 要素がシーンに表示されるはずです。
このスライダーのプロパティに移動すると、カスタマイズするためのオプションがたくさんあることに気付くでしょう。
作ってみましょう volumeこのスライダーからスライダー。これを行うには、ButtonBehaviourスクリプトを開き(ButtonManager GameObjectの名前を変更できます。これは、ボタンを管理するだけではありません)、スライダーへの参照を追加します。また、コードを少し変更します。
public class ButtonBehaviour : MonoBehaviour {
int n;
public Text myText;
public Slider mySlider;
void Update() {
myText.text = "Current Volume: " + mySlider.value;
}
}
Updateメソッドを使用してmyText.textの値を常に更新する方法を理解します。
スライダーのプロパティで、「整数」ボックスをチェックし、最大値を100に設定します。
より見やすい色にするために、プロパティを使用してテキストの色を設定します。
Slider GameObjectを新しいスロットにドラッグするのと同じ手順に従って、再生を押してみましょう。
他のUIコントロールも調べて実験し、どのUIコントロールがどのように機能するかを確認することを強くお勧めします。
次のセクションでは、照明、マテリアル、シェーダーについて学習します。
この章では、マテリアルとシェーダーについて簡単に学習します。理解を深めるために、新しいものを作成します3D Project現在の2Dの代わりに。これは、さまざまな変更を確認するのに役立ちます。
新しいプロジェクトを作成したら、階層に移動して右クリックし、 3D Object → Cube。これにより、シーンの中央に新しい立方体が作成されます。シーンビューで右クリックしてマウスをドラッグすると、立方体を見回すことができます。スクロールホイールを使用してズームインおよびズームアウトすることもできます。
次に、立方体をクリックして、そのプロパティを確認します。
一番下のプロパティには、デフォルトのマテリアルと Standard シェーダー。
素材とは?
Unity(および多くの3Dモデリングの側面)では、 Materialは、そのマテリアルを使用したオブジェクトの照明に関する情報を含むファイルです。灰色の球がマテリアルを示し、上部から光が入っていることに注目してください。
さて、名前と混同しないでください。マテリアルは、質量、衝突、さらには一般的な物理学とは何の関係もありません。マテリアルは、照明がそのマテリアルを持つオブジェクトにどのように影響するかを定義するために使用されます。
独自の素材を作ってみましょう。[アセット]リージョンを右クリックして、[Create → Material 「マイマテリアル」などの名前を付けます。
これらの特性は、これまでに研究したものとは異なります。これは、これらがでプログラムされているプロパティであるためです。shader、素材ではありません。
マテリアルは、最初にオブジェクトを表示するものです。実際、2Dでも照明を必要としない特殊な素材を使用しています。もちろん、Unityはそれを生成してすべてに適用するので、そこにあることに気付くことさえありません。
シェーダーとは何ですか?
シェーダーは、方法を定義するプログラムです。 every single pixel画面に描画されます。シェーダーはC#で、あるいはOOPS言語でさえプログラムされていません。それらはでプログラムされていますC-like GLSLと呼ばれる言語。これは、高速処理のためにGPUに直接命令を与えることができます。
パーティクルシステムは、効率的な方法で、寿命の短い多数のパーティクルを生成するのに役立ちます。これらのシステムは、個別のレンダリングプロセスを経ます。数百または数千のオブジェクトがある場合でも、パーティクルをインスタンス化できます。
さて、 particlesパーティクルシステムのあいまいな用語です。aparticleパーティクルシステムによって生成される個々のテクスチャ、マテリアルインスタンス、またはエンティティです。これらは必ずしも空間に浮かんでいるドットではありません(可能性はありますが)。また、さまざまなシナリオで使用できます。
GameObjectは、パーティクルシステムコンポーネントがアタッチされたパーティクルシステムを管理します。パーティクルシステムでは、アセットを設定する必要はありませんが、必要な効果に応じて異なるマテリアルが必要になる場合があります。
パーティクルシステムを作成するには、コンポーネントを追加します Particle System [コンポーネントの追加]設定を使用するか、[階層]に移動して、[ Create → Effects → Particle System。これにより、パーティクルシステムがアタッチされた新しいゲームオブジェクトが生成されます。
パーティクルシステムのプロパティを見ると、多くのパーティクルシステムで構成されていることがわかります。 modules。デフォルトでは、3つのモジュールのみがアクティブです。インクルードEmission, Shape そしてその Renderer。他のモジュールは、名前の横にある小さな円をクリックしてアクティブ化できます。
一部の値の右側に、小さな黒い矢印が表示される場合があります。これにより、個々のパーティクルの値をより細かく制御できます。たとえば、Start Size に Random between Two Constants パーティクルシステムに、ウォーターホースのようにさまざまなサイズのランダムなパーティクルをレンダリングするように指示します。
Asset Storeは、ゲームエンジン市場におけるUnityの最大の強みの1つです。多数のアセット、ツール、スクリプト、さらにはダウンロード可能な既製のプロジェクト全体で構成されています。
アセットストアを使用するには、有効なものが必要です Unity ID。持っていない場合は、UnityのWebサイトで作成できます。
Unity IDを作成したら、をクリックします。 Asset Store と同じ行のタブ Scene View。
ログインすると、右上にユーザー名が表示されます。
この例では、をインポートします Survival Shooter Tutorial事業。これを行うには、タブでそれを検索し、Unityによって公開されたアセットをクリックします。
ダウンロードを押して、完了させます。それが終了すると、Download ボタンがに変わります Import; もう一度クリックして、現在開いているプロジェクトに新しいアセットをインポートします。
(注-この特定のケースでは、プロジェクト全体をインポートしています。Unityがこれについて警告した場合は、新しいプロジェクトを作成するか、必要に応じて既存のプロジェクトを上書きします。どちらの方法でも問題ありません。)
新しいウィンドウがポップアップし、インポートしたばかりの新しいアセットのすべてのコンテンツが一覧表示されます。ダウンロードしたものに応じて、これは単一のファイル、ファイルの束、またはフォルダーとファイルの階層を持つツリー全体になります。デフォルトでは、UnityはヒットするとすべてのアセットコンポーネントをインポートしますImport、それが私たちが望むものです。それでは、をクリックしてみましょうImporUnityのtはその仕事をします。
アセットにお金を払わずにダウンロードしようとすることは違法であり、ウイルス、バグ、またはアップデートの欠如の可能性が常にあります。