Unityを使用したゲームのプログラミング:ビギナーズガイド

Unityを使用したゲームのプログラミング:ビギナーズガイド
このガイドは無料のPDFとしてダウンロードできます。 このファイルを今すぐダウンロード 。これをコピーして、お友達やご家族とお気軽に共有してください。

インターネット経済の驚くべき特徴は、インディーズビデオゲームの台頭です。かつては数千人、数百万ドルのトリプルAスタジオの独占的な領域でしたが、最新のゲーム開発リソースを個人またはプログラマーやデザイナーの小規模なアドホックコレクションに提供するツールセットが数多く開発されました。最高のインディーゲームについては以前に説明したので、Unityなどのツールで何が達成できるかについてのインスピレーションを得るためにそれらをチェックしてください。





これらのインディーゲーム開発チームは、敏捷性とリスク許容度を実証しており、多くの場合、大規模な予算のチームよりも早くゲームプレイの革新を推進することができます。近年、衝撃的に成功した多くのインディーズタイトルが初公開されました。 マインクラフトリンボ 、 と スーパーミートボーイ 、このようなゲームを作成するスキルがなくても、Buildboxを使用してゲームを作成できます。





インディーゲーム開発の急速に進化する風景の中で、 団結 はデファクトスタンダードのようなものとして浮上しています。その低コスト、使いやすさ、幅広い機能セットにより、迅速なゲーム開発に理想的です。 Unityは非常に柔軟なので、 独自のカスタムゲームコントローラーを作成する 少しのDIYノウハウで!





CCP(の開発者 Eve Online )ゲームのコンセプトを迅速にプロトタイピングするために使用します。 Unityは、「ボックス内のゲームエンジン」を提供します。これは、事実上あらゆるジャンルのビデオゲームに適応できる、いくつかのスクリプト言語用のフックを備えた物理およびレンダリングエンジンです。

Unityはゲーム環境を操作するためのビジュアルエディターを提供しますが、Unityは「ゼロプログラミング」ゲームクリエーターツールではありません。結果を生成するためにプログラムする必要がありますが、「ゲームメーカー」プログラムよりもはるかに柔軟で強力なツールを提供します。



Unityはあなたに代わって仕事をしませんが、参入障壁を大幅に下げます。 C ++とOpenGLを使用して完全にゼロから始めて、実際に画面に何かがレンダリングされるようになるまでに数日かかる場合があります。 Unityを使用すると、約10秒かかります。 Unityは、ゲーム作成の基本要素を、すばやく直感的な方法で初心者プログラマーの手に委ねます。

今日は、Unityでゲームを作成するために知っておく必要のあるすべてのことをご案内します。Unityは10の主要な章に分かれています。





§1-Unityのバージョン

§2–Unityのインストール





§3–オブジェクト指向パラダイムの簡単な紹介

§4–統一の基本

§5–例:ゲームの基本要素

§6–Unityでのスクリプト

§7–例:スクリプトポン

§8–ドキュメントの探索/詳細

§9–ゲームの構築/スタンドアロンアプリケーションへのコンパイル

§10-クロージングノート

1.Unityのバージョン

Unityには、プロバージョンと無料バージョンの2つの基本的なフレーバーがあります。あります 違いの数 、しかし、大まかに言えば、プロバージョンは多くの視覚的な改善(リアルタイムのソフトシャドウや後処理など)と、より複雑なゲームに非常に役立つ多数の比較的マイナーな機能をサポートしています。

とは言うものの、あなたが構築したいと思うかもしれないほとんどの比較的単純なゲームには、Unityの無料バージョンが完全に適切です。興味のある方のために、以下の主な違いを詳しく説明します。

1.1価格

もちろん、Unityの無料バージョンは無料です。ただし、いくつかの制限があります。Unityの無料バージョンは、年収が以上の企業にライセンス供与することはできません。 100,000ドル 。そのような組織はこのガイドの範囲を超えていますが、そのような組織になる可能性があると思われる場合は、Proバージョンを利用することをお勧めします。

UnityのProバージョンは 75ドル 月、または 1500ドル 永久ライセンスの場合、それを使用して作成されたゲームで何ができるかについての制限はありません。利用可能な機能の概要を可能な限り完全に提供するために、このガイドで使用する30日間の無料トライアルも利用できます。 1年間の学生ライセンスも 勉強 にとって 129ドル

1.2機能

Unityの無料バージョンにはない多くの機能があります。ただし、最も重要な違いは次のとおりです。Unityの無料バージョンには、見栄えが良く、実行速度の速いゲーム(LODサポート、画面スペース後処理、高度なシェーダー、リアルタイムソフト)を可能にするレンダリングオプションがいくつかありません。シャドウ、および遅延レンダリング)。それはまた完全に欠けています メカニムアニメーションシステム 、およびいくつかのAIツール。

一般に、複雑で大規模なプロジェクト、またはグラフィックのパフォーマンスが重要なプロジェクトの場合、プロバージョンは価値があります。 Oculus Rift用のバーチャルリアリティゲームを開発しているため、プロバージョンを使用しています。ヘッドセットを正しく操作するには、画面スペースの後処理のサポートが必要です。

2.Unityのインストール

Unityのインストールは簡単です。実行可能ファイルはからダウンロードできます unity3d.com/get-unity/download

ダウンロードしたら、それを実行し、インストーラーの指示に従います。インストールが完了すると、「Unityライセンスをアクティブ化する」というタイトルのウィンドウが表示されます。 「UnityProの30日間無料トライアルを有効にする」とマークされたチェックボックスをオンにしてから、「OK」をオンにします。

おめでとう!これで、UnityProの30日間の試用版があります。試用期間が終了したときに、プロバージョンを購入したくない場合は、無料バージョンに切り替えて、既存のコンテンツを保持できます。

あなたの壁紙としてビデオを置く方法

3.オブジェクト指向パラダイムの簡単な紹介

Unityの使用を開始する前に、基本を少し説明することが重要です。 Unityは両方をサポートします NS #JavaScript にとって ゲームプログラミング ;このチュートリアルでは、C#を使用します。

まず、これまでにプログラミングしたことがない場合は、このチュートリアルを脇に置いて、Microsoftの C#言語入門書 簡単な作業にこの言語を使いこなせるようになるまで。

C#とは少し異なるものが必要な場合(ただし、Unityで使用できる言語である必要はありません)、初心者向けの6つの最も簡単なプログラミング言語のガイドをご覧ください。

以前にCやJavaなどの命令型言語またはオブジェクト指向言語でプログラミングしたことがある場合は、入門書をざっと読み、C#が過去に使用した他の言語とどのように異なるかをよく理解してください。いずれにせよ、C#で簡単な問題を解決できるようになるまで、チュートリアルを進めないでください(たとえば、最初の100個の素数を出力するプログラムを作成するように依頼した場合、そのプログラムを作成せずに作成できるはずです。 Googleに相談する)。

ここで理解する最も重要な概念は、オブジェクト指向のパラダイムです(略して 開いた )。オブジェクト指向言語では、プログラムは次のような機能単位に分割されます。 オブジェクト 。各オブジェクトには、独自のプライベート変数と関数があります。オブジェクト固有の関数が呼び出されます メソッド

ここでの考え方はモジュール性です。各オブジェクトを分離し、そのメソッドを介して他のオブジェクトと相互作用するように強制することで、意図しない相互作用の可能性、ひいてはバグの数を減らすことができます。後で変更せずに再利用できるオブジェクトを作成することもできます。 Unityでは、これらのオブジェクトをビルドしてアタッチします ゲームエンティティ (彼らが支配する行動)。

オブジェクトはからインスタンス化されます クラス :クラスは、オブジェクトの定義をレイアウトする単なるファイルです。だから、あなたがしたい場合 ムック ゲーム内の敵のAIを処理するオブジェクトの場合、「Mook」クラスを作成し、そのファイルをすべての敵エンティティに添付します。ゲームを実行すると、各敵に「ムック」オブジェクトのコピーが装備されます。

オブジェクトに新しいスクリプトを添付すると、次のようになります。

初め、 オブジェクトを選択します に行きます インスペクター 。クリックしてください コンポーネントを追加 ボタン。

に移動 新しいスクリプト 、必要な名前を入力して、をクリックします 作成して追加

これで、ダブルクリックして編集できる新しいスクリプトができました。

クラスファイルは次のようになります。

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

これを分解しましょう:

  • UnityEngineの使用: この行は、Unityのライブラリを使用することをC#に通知します。これにより、Unityゲームエンジンに接続できます。
  • パブリッククラスムック:MonoBehaviour: この行は、クラスとその名前を宣言しています- ムック
  • プライベートフロートヘルス: これにより、プライベートクラス変数が宣言されます(クラス内からのみ変更できます)。変数には次の値が与えられます 始める
  • Void Start(): これは、と呼ばれるメソッドを宣言します 始める 。 Startは、ゲームが最初に起動したときに1回だけ実行される特別なメソッドです。
  • Void Update(): 更新は、すべてのフレームで実行されるもう1つの特別な方法です。ゲームロジックのほとんどはここにあります。
  • //道路でプレーヤーに遭遇した場合は、彼を殺します: この行はコメントです(二重スラッシュで始まる行はC#では無視されます)。コメントは、コードの特定のビットが何をするかを思い出させるために使用されます。この場合、このコメントは、コメントの説明を実際に実行する、より複雑なコードブロックの代わりに使用されます。

一緒に 始めるアップデート 、ほぼすべての名前で独自のメソッドをインスタンス化できます。ただし、作成したメソッドは、呼び出されない限り実行されません。と呼ばれる架空のクラスのメソッドを宣言しましょう addTwoNumbers それは2つの数字を足し合わせます:

public float addTwoNumbers(float a, float b) {
return a+b;
}

これは、呼び出されたfloatを返すパブリック(他のオブジェクトにアクセス可能)メソッドを宣言します addTwoNumbers 、入力として2つのfloatを取ります( NS )。次に、2つの値の合計を出力として返します。

同じクラス内から(たとえば、内部から)このメソッドを呼び出す アップデート )は次のようになります:

float result = addTwoNumbers(1, 2);

別のクラスからメソッドを呼び出すのも同様です。

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

繰り返しますが、これはクラスのインスタンスを作成し、適切なメソッドにアクセスして、追加する数値をフィードし、結果をに格納するだけです。 結果 。単純。

スクリプトが、通常のGameObjectパラメーターのセットではアクセスできない特別なプロパティ(パーティクルエミッターなど)を持つオブジェクトにアタッチされている場合は、を使用して、スクリプトを別の種類のゲームエンティティとして扱うことを選択できます。 GetComponent 方法。

その構文は次のようになります。

GetComponent().Play();

これらのいずれかがよくわからない場合は、戻ってC#入門書を確認してください。私たちが進むにつれて、それはあなたに多くの欲求不満を救うでしょう。

4.Unityの基本

このセクションでは、Unityエンジンの基本的な仕組みについて説明します。 Unityのワークフローは次のようになります。

  1. ゲームで役割を果たすエンティティを作成します(空白 GameObjects 抽象論理タスクに使用できます)。
  2. クラスファイルを作成または検索し、スクリプトとしてエンティティに追加します( コンポーネントを追加 のボタン インスペクター 見る。
  3. 走る >> テスト >> デバッグ >> 繰り返す それが機能し、ゲームの次の要素に進むまで。

Unityには、ユーザーの好みに合わせてさまざまな方法でレイアウトできるいくつかの基本的なビュータブが付属しています。ビッグファイブは次のとおりです。

  1. ゲーム: 対話してテストできるゲームの実行中のインスタンスを表示します。
  2. シーン: の静的で編集可能なバージョンを提供します ゲームの世界
  3. 検査官: で選択することにより、ゲームの世界で個々のエンティティを変更できます 編集者 タブ。
  4. 計画: プロジェクトのファイルを参照し、モデル、マテリアル、およびその他のリソースをにドラッグできます。 編集者 それらをゲームの世界に配置するためのタブ。
  5. 階層: このタブには、ワールド内のすべてのオブジェクトが表示され、シーン内の離れたオブジェクトと、クリックしてドラッグすることで相互に親エンティティを見つけることができます。

これらすべての場所については、以下の図を参照してください。

4.1Unityエンティティ

4.1.1メッシュ

メッシュは方法です 3Dジオメトリ Unityで表されます。 Unityの組み込みを使用することができます 原生的 オブジェクト(立方体、球体、円柱など)、または次のようなモデリングパッケージから独自の3Dモデルをインポートします。 ブレンダー また マヤ 。 Unityは、次のようなさまざまな3Dフォーマットをサポートしています。 .fbx 、 と .3ds

メッシュを操作するための基本的なツールは、インターフェイスの左上隅にあるスケーリング、回転、および平行移動ボタンです。これらのボタンは、エディタービューのモデルにコントロールアイコンを追加し、空間でモデルを操作するために使用できます。オブジェクトのテクスチャまたは物理プロパティを変更するには、それらを選択して、 インスペクター 分析するためのビュー 材料リジッドボディ 要素。

4.1.2GUI要素

従来のGUIスプライトとテキストは、 GUIテキスト そしてその GUIテクスチャ エディターのGameObjects。ただし、UI要素を処理するためのより堅牢で現実的な方法は、 3Dテキストクワッド HUD要素をエンティティとしてゲームワールドに配置するためのGameObjects(透明なテクスチャと消灯した透明なシェーダー)。

の中に 階層 ビューでは、これらのゲームプレイ要素をメインカメラにドラッグして子にすることができ、カメラと一緒に移動および回転することができます。

GUI要素(テキストとテクスチャ)は、[インスペクター]タブの関連フィールドを使用してサイズとスケールを調整できます。

4.1.3材料

マテリアルはテクスチャとシェーダーの組み合わせであり、プロジェクトタブからゲームオブジェクトに直接ドラッグできます。 Unity Proには多数のシェーダーが付属しており、適用先のオブジェクトのインスペクタータブを使用して、シェーダーにアタッチされているテクスチャを調整できます。

テクスチャをインポートするには、テクスチャをに変換します .jpg.png 、 また .bmp 、そしてそれをにドラッグします 資産 Unityプロジェクトディレクトリの下のフォルダ( 私の文書 デフォルト)。数秒後、読み込みバーがエディターに表示されます。終了すると、下のテクスチャとして画像を見つけることができます。 事業 タブ。

4.1.5ライト

ライトは GameObjects 輝きを世界に投影します。シーンにライトがない場合、すべてのポリゴンが同じ明るさレベルで描画され、世界が平らで色あせた外観になります。

ライトは配置、回転が可能で、カスタマイズ可能ないくつかの内部特性があります。 NS 強度 スライダーはライトの明るさを制御し、 範囲 フェードアウトの速さを制御します。

のガイドライン シーンビュー 照明の最大範囲を表示します。両方の設定で遊んで、目的の効果を達成してください。ライトの色、パターンを調整することもできます( クッキー ライトが向けられている表面に表示され、ライトを直接見たときに画面にどのようなフレアが表示されます。 Cookieを使用して、よりリアルな光のパターンを偽造したり、劇的な偽の影を作成したり、プロジェクターをシミュレートしたりできます。

光の3つの主な種類は スポット 、 と 指向性

スポットライト 3D空間に位置があり、可変角度の円錐で一方向にのみ光を投影します。これらは懐中電灯、サーチライトに適しており、一般に、照明をより正確に制御できます。スポットライトは影を落とす可能性があります。

ポイントライト 3D空間に位置を設定し、すべての方向に均等に光を当てます。ポイントライトは影を落としません。

指向性ライト 最後に、太陽光をシミュレートするために使用されます。これらは、無限に遠くからの方向に光を投影します。指向性ライトはシーン内のすべてのオブジェクトに影響を与え、影を生成する可能性があります。

4.1.6パーティクルシステム

パーティクルシステムGameObject 数百または数千の粒子を同時に生成および制御します。パーティクルは、3D空間に表示される小さな最適化された2Dオブジェクトです。パーティクルシステムは簡略化されたレンダリングと物理学を使用しますが、何千ものエンティティを途切れることなくリアルタイムで表示できるため、煙、火、雨、火花、魔法の効果などに最適です。

これらの効果を達成するために微調整できるパラメータはたくさんあり、パーティクルシステムを下にスポーンすることでそれらにアクセスできます。 コンポーネントエディタ >> パーティクルシステムの選択 >> インスペクタータブを開く 。各パーティクルのサイズ、速度、方向、回転、色、テクスチャを変更し、それらのパラメータのほとんどを時間の経過とともに変更するように設定できます。

衝突 属性、それを有効にしてシミュレーション空間をに設定した場合 世界 世界のオブジェクトと衝突するパーティクルを取得します。これは、雨、移動する水、火花など、さまざまなリアルなパーティクルエフェクトに使用できます。

5.例:ゲームの基本要素

このチュートリアルでは、次の簡単なゲームを作成します。 ポン -これまでDIYで何度か取り上げたことがあること:

  • Arduinoクラシックポン
  • ArduinoOLEDポン

このセクションでは、コア要素の配置について説明します。スクリプトのチュートリアルは後で説明します。

まず、Pongのゲームを基本的なコンポーネントに分解してみましょう。まず、2つのパドルと1つのボールが必要です。ボールは画面外に飛ぶので、リセットするメカニズムが必要です。また、テキストに現在のスコアを表示する必要があります。また、Unityのすべてのコア要素を表示するために、ボールを打ったときに派手なパーティクル効果が必要になります。ゲーム全体を劇的に照らす必要があります。

それはに分解されます ボールオブジェクト (球)、 スポナー 、2つのパドルプロップ パーティクルエミッター 添付、 3Dテキストエンティティ 、および スポットライト 。このチュートリアルでは、デフォルトの物理マテリアルを使用します 跳ねる、弾む 、 と バウンスコンバイン に設定 かける 。 10個のスクリーンショットで、セットアップは次のようになります。

まず、を作成します キューブプロップ パドル用。

適切にスケーリングし、 それを複製する 、そして置く ボールのパドルの間。

次に、を作成します 3DTextオブジェクト規模ポジション それを正しく、変更します フォントサイズ ピクセル化されていない画像を取得するための属性。

次に、2つ作成します パーティクルシステム 、必要な特性を選択し、それらをパドルに取り付けます。

次に、あなたはしたいと思うでしょう カメラを配置して回転させる シーンを正しくフレーム化するようにします。カメラが選択されている間、右下隅にカメラのビューの小さなプレビューが表示されます。

終了する前に、ボールがゲーム領域から跳ね返らないように、バンパーとなる2つの追加の立方体を作成する必要があります。チェックを外すことで、それらを非表示にすることができます メッシュレンダラー の中に インスペクタータブ

プレイを押すと、ゲームの基本的な要素がレイアウトされているのがわかります。彼らはまだ何もしませんが、私たちはそれに到達します!

これでセットアップが完了したので、ゲームを作成するためにこれらの要素のスクリプトを作成する際に何が関係するかについて説明します。

6.Unityでのスクリプト

オブジェクトにスクリプトを添付したら、でスクリプトをダブルクリックして修正できます。 インスペクター 。これが開きます MonoDevelop 、Unityのデフォルトの開発環境。本質的に、Monodevelopは、プログラミング向けに特別に最適化された機能を備えたテキストエディタです。

キーワードとコメントはで強調表示されています 、および数値と文字列はに表示されます ネット 。使用したことがある場合 Eclipse または他のIDEのMonoDevelopは非常に似ています。あなたはできる 建てる 次のように、エディター内からスクリプトを実行して、構文エラーをチェックします。

一般に、スクリプトをUnityと対話させるには、スクリプトを保持しているオブジェクトが所有する要素を参照する必要があります(これらの要素のリストは、 インスペクター 関連するオブジェクトが選択されている場合はタブ)。次に、メソッドを呼び出すか、これらの各要素の変数を設定して、必要な変更を適用できます。

オブジェクトのスクリプトが別のオブジェクトのプロパティに影響を与えるようにしたい場合は、空のオブジェクトを作成できます GameObject スクリプトで変数を使用し、 インスペクター シーン内の別のオブジェクトに割り当てます。

オブジェクトが持つ可能性のある要素のリストは次のとおりです(上記の例のパドルの1つのインスペクタービューから取得)。

  1. 変身
  2. キューブ(メッシュフィルター)
  3. ボックスコライダー
  4. メッシュレンダラー

オブジェクトのこれらの各側面は、スクリプト内から影響を受ける可能性があります。次に、正確な方法を見ていきます。

6.1変換

UnityのGameObjectの変換関数は、そのオブジェクトの物理パラメーターを制御します。 規模 、 これは ポジション 、およびその オリエンテーション 。次のようなスクリプト内からそれらにアクセスできます。

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

上記の例では、名前付き変数は名前で指定されたタイプです。ここにはいくつかの重要な詳細があります。位置とスケールは、ご想像のとおり、次のように保存されます。 Vector3s 。あなたはアクセスすることができます NS 、 と それぞれのコンポーネント(たとえば、 transform.position.y ゼロ平面上のオブジェクトの距離を示します)。

ただし、避けるために ジンバルロック 、回転は次のように処理されます クォータニオン (4成分ベクトル)。クォータニオンを手動で操作するのは直感的ではないため、オイラー角を使用して回転を操作するには、 Quaternion.Euler そのような方法:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

オブジェクトをある場所から別の場所にスムーズに移動したい場合は、 スラープ クォータニオンとvector3sのメソッドが役立ちます。 Slerpは、現在の状態、最終状態、変化の速度の3つの引数を取り、指定された速度でそれらの間をスムーズに補間します。構文は次のようになります。

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2レンダラー

Unityのレンダラー関数を使用すると、小道具の表面を画面上にレンダリングする方法を制御できます。テクスチャを再割り当てし、色を変更し、オブジェクトのシェーダと可視性を変更できます。構文は次のようになります。

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

これらのほとんどはかなり明確な機能を持っています。最初の例では、問題のオブジェクトを非表示にします。これは、さまざまな状況で役立つトリックです。 2番目の例では、新しい RGBカラー (つまり、緑)問題のオブジェクトに。 3つ目は、メインの拡散テクスチャを新しいTexture変数に割り当てます。最後の例では、オブジェクトのマテリアルのシェーダーを新しく定義されたシェーダー変数に変更します。

6.3物理学

Unityには、統合された物理エンジンが付属しています。これは、物理サンドボックスゲームがすべて使用するものです。これにより、オブジェクトの物理プロパティを割り当てて、シミュレーションの詳細を処理できるようになります。一般に、教科書と変換システムを使用して独自の物理演算を実装しようとするよりも、Unityの物理演算エンジンを可能な限り使用する方が簡単で堅牢です。

すべての物理学の小道具は必要です コライダー 。ただし、実際のシミュレーション自体は、 リジッドボディ 、に追加できます インスペクター 見る。リジッドボディは キネマティック また 非運動学的

キネマティック物理小道具は、周囲の非キネマティック物理小道具と衝突(および影響)しますが、衝突自体の影響を受けません。静的な運動学的小道具は、ことわざの動かせないオブジェクトであり、動く運動学的オブジェクトは、ことわざの止められない力です(記録として、それらが衝突すると、それらは単に互いに通過します)。

さらに、オブジェクトの角抗力(回転するのに必要なエネルギー量)を調整したり、質量を変更したり、重力の影響を受けるかどうかを指定したり、力を加えたりすることができます。

例:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

これらはすべてかなり自明です。ここで注意するのは、 transform.forward 。 Vector3にはすべて3つのコンポーネントがあります( 。前方。上 、 と 。右 )それらに関連付けられており、アクセスして回転させることができます( 前方 エディターの青い矢印の方向です)。 NS transform.forward キーワードは、マグニチュード1の現在のオブジェクトの単純な順方向ベクトルです。floatを掛けて、オブジェクトにさらに力を加えることができます。参照することもできます transform.uptransform.right 、およびそれらを否定して、それらの逆を取得します。

6.4衝突

多くの場合、ゲームを構築するときに、物理シミュレーションだけでなく、衝突によってコードの状態が変化することを望んでいます。このためには、 衝突検出方法

Unityで衝突を検出するには、ある程度の準備作業が必要です。まず、衝突のオブジェクトの少なくとも1つが必要です 非キネマティックリジッドボディ それに付属。両方のオブジェクトには、非トリガーに設定された正しいコライダーが必要です。両方のオブジェクトの合計速度は、単に互いにスキップするのではなく、実際に衝突するのに十分な速度である必要があります。

すべての処理が完了したら、衝突をチェックするオブジェクトにアタッチされたスクリプトに特別な衝突検出メソッドを配置することで、衝突をチェックできます。メソッドは次のようになります。

void OnCollisionEnter(Collision other) {
//do things here
}

このメソッドは、別のオブジェクトがオブジェクトに接触する最初のフレームで自動的に実行されます。衝突エンティティ 他の ヒットしたオブジェクトへの参照です。たとえば、そのを参照することができます gameobjectリジッドボディ 、 と 変身 さまざまな方法でそれを操作するための特性。その間 OnCollisionEnter おそらくあなたが使用する最も一般的な機能です、あなたはまた使用することができます OnCollisionExitOnCollisionStay (構文と使用法は同じです)。これは、オブジェクトとの衝突を停止する最初のフレームと、オブジェクトとの衝突するすべてのフレームでそれぞれアクティブになります。

場合によっては、いわゆることを行うことも役立つことがあります レイキャスティング 。レイキャスティングでは、無限に細い線( レイ )は、ある原点からあるベクトルに沿って世界にキャストされ、何かに当たると、最初の衝突の位置とその他の詳細が返されます。レイキャストのコードは次のようになります。

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

これにより、現在のオブジェクトの位置から-Vector3.up(真下)に沿って光線が投影され、変数がリンクされます。 打つ 衝突する最初のオブジェクトに。光線が何かに当たると、アクセスできます hit.distance それがどれだけ離れているかを判断するため、または hit.GameObject ヒットしたオブジェクトを操作します。

このようなレイキャストは、射手が銃が何を指しているかを判断したり、カメラがオブジェクトを見たときにオブジェクトを選択したり、特定のスタイルの移動メカニズムに使用したりできます。

6.5時間修正

この方法でオブジェクトを操作するときに覚えておくべき重要な要素の1つは、 フレームレート 。どれだけ注意深く最適化しても、フレームレートは常に変化するため、それに応じてゲームの速度を変化させたくありません。他の誰かがあなたが開発したよりも速いコンピュータであなたのゲームを実行する場合、あなたはゲームを2倍の速度で実行することを望まないでしょう。

これを修正する方法は、使用している値に最後のフレームのレンダリングにかかった時間を掛けることです。これはを使用して行われます Time.deltaTime 。これにより、フレームごとにインクリメントする変数の速度が効果的に変更されます。 フレームごとに変更1秒あたりの変化 、そしておそらく、フレームごとにインクリメントまたはデクリメントする任意の値にこの変更を加える必要があります。

6.6オーディオソースとリスナー

オブジェクトの作成、レンダリング、および制御の方法について説明したので、コンピュータゲームが提供できるもう1つの意味について説明しましょう。 。 Unityは2種類のサウンドをサポートしています。 2D3D 音。 3Dサウンドは距離に基づいて音量が変化し、カメラに対して移動すると歪んでしまいます。 2Dサウンドはそうではありません。

2Dサウンドはナレーションやバックグラウンドミュージックに適しており、3Dサウンドは世界のイベントによって生成されたサウンドに適用されます。サウンドが3Dであるかどうかを変更するには、でサウンドを選択します。 事業 表示し、に切り替えます インスペクター ドロップダウンメニューから適切なオプションを表示して選択し、を押します。 再インポート ボタン。

実際に音を鳴らすには、 オーディオソース 小道具(3Dサウンドの場合は、サウンドの元となる小道具)。次に、を開く必要があります オーディオクリップ フィールドに移動し、サウンドファイルを選択します。

写真のファイルサイズを小さくする方法

あなたが使用することができます myAudioSource.Pause()myAudioSource.Play() それらのサウンドファイルを制御します。サウンドのフォールオフ動作、音量、ドップラーシフトを調整できます。 インスペクター オーディオソースのタブ。

6.7入力

ユーザーからの入力をまったく受け取らないゲームは、あまりゲームではありません。読み込むことができる入力にはさまざまな種類があり、それらのほとんどすべてにアクセスできます。 入力キーコード オブジェクト。いくつかのサンプル入力ステートメント(フレームごとに評価される値があります)を以下に示します。

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

これらの行の機能はほとんど自明です。これらの3種類の入力参照を使用して、最新の3Dコンピューターゲームの制御スキームを再構築できます。

6.8スクリプトのデバッグ

スクリプトが機能しないとしましょう。良い医者が言うように、強打とハングアップはあなたに起こる可能性があります。 C#に完全な構文エラーがある場合、通常、プレイを押したときにゲームの実行が拒否されます。次の場合は、かなり役立つエラーメッセージが表示されます。 建てる エディター内からのスクリプト。下記参照:

これらのバグは通常、修正するのが最も難しいことではありません。さらに問題になる可能性があるのは、有効なC#でいっぱいのファイルを正常に書き込んだ微妙なセマンティックエラーです。思ったとおりに実行するファイルではありません。これらのエラーのいずれかがあり、それを追跡するのに問題がある場合は、状況を改善するために試みることができるいくつかのことがあります。

1つ目は、ゲームの実行を一時停止し、コンソールを確認することです。をクリックすると、ゲームを一時停止できます。 一時停止 エディターの上部中央にあるアイコンをクリックし、 コンソール 下から メニュー(またはを押す NS >> シフト >> NS )。エラーがない場合でも、警告は何が問題になっているのかについていくつかの手がかりを与えるのに役立ちます。

これが機能しない場合は、内部変数の状態を出力して、プログラムが想定どおりに動作していることを検証することにより、スクリプトの状態についてのアイデアを得ることができます。あなたが使用することができます Debug.Log(String) プログラムの実行がその行に達したときに、文字列の内容をコンソールに出力します。一般に、発生するはずのことから、発生するはずのことまで逆方向に作業すると、最終的には、デバッグ出力が期待どおりに機能しないようになります。それはあなたのエラーがどこにあるかです。

7.例:スクリプトポン

Pongを構築するには、ゲームをコア要素に分解しましょう。パドル間を高速で跳ね返るボールが必要です。ボールがパドルを通過したことを認識するスコアボードが必要です。また、次のメカニズムが必要です。それが起こったときにボールを再開します。良い最初のステップは、ボールに非キネマティックリジッドボディを追加し、パドルに2つのキネマティックリジッドボディを追加し、それらすべての重力を無効にして、標準アセットから適切な物理マテリアルを割り当てることです( 跳ねる、弾むバウンスコンバイン に設定 かける )。

以下に、説明コメント付きのボールのスクリプトを表示できます。ボールはいくつかの基本的な目標を達成する必要があります。複雑なパターンで跳ね返り、常に両方の軸の動きを維持し、水平方向に挑戦的ではあるが不可能ではないペースで加速する必要があります。

BallHandler.cs

次に、パドルのスクリプトを作成する必要があります。これは以下で確認できます。パドルは、キーの押下に応じて上下に移動する必要があります(ただし、特定の範囲外ではありません)。また、何かと衝突したときにパーティクルシステムをトリガーする必要があります。

PaddleHandler.cs

次に、敵のAIが必要です。これは、敵のパドルが一定の速度でボールに向かって追跡するようにするものです。そのために、最大限の単純さのためにVector3.Slerpを使用します。また、自分のパドルで見られるのと同じパーティクルの動作が必要です。

EnemyAI.cs

最後に、スコアボードを更新し、ボールが範囲外になったときにボールをリセットするためのスクリプトが必要です。

ScoreboardUpdater.cs

これらのスクリプトを添付し、参照を入力すると、Pongのゲームを実行すると、ゲームプレイが体験できます。

あなたはできる Pongデモをダウンロードする 、私が概説したすべての動作を確認したい場合。 Windows、Mac、Linuxシステムで動作します。

8.ドキュメントの探索/詳細

Unityは、このスタイルのガイドでカバーできるよりもはるかに多くの機能を備えた複雑なエンジンです。これは、インターネットで利用可能な(無料および商用の)Unity拡張機能の幅広い範囲を含める前のことです。このガイドは、ゲームを開発するための強力な出発点を提供しますが、独学はあらゆる努力において重要なスキルであり、ここでは二重にそうです。

ここで重要なリソースは Unity ScriptReference 。 ScriptReferenceは検索可能なデータベースであり、C#とJavascriptの両方で使用できます。このデータベースには、すべてのUnityコマンドと機能のリストがあり、それらの関数の説明と構文の簡単な例が含まれています。

Unityのエディターとインターフェースに問題がある場合、または好みの問題としてビデオチュートリアルのように、高品質のリストがたくさんあります。 Unityビデオチュートリアル 利用可能。より広範(ただし広範ではない) Unityのテキストチュートリアル CatLikeCodingからも入手できます。

最後に、ドキュメントやチュートリアルの範囲を超える質問がある場合は、次のURLで特定の質問をすることができます。 Answers.Unity3d.com 。回答はボランティアによって提供されることを忘れないでください。彼らの時間を尊重し、最初にデータベースを検索して、質問がまだ回答されていないことを確認してください。

9.ゲームの構築/スタンドアロンアプリケーションへのコンパイル

誇りに思うものを作成したら(または練習用に少し危険なPongの例のクローンを作成し終えたら)、ゲームをエディターから移動して、インターネットに投稿して強制できるものに変換します。お友達やご家族で遊んでください。そのためには、スタンドアロンアプリケーションを構築する必要があります。幸いなことに、Unityではこれは非常に簡単です。ただし、注意が必要な潜在的な問題がいくつかあります。

手始めに、エラーのないプロジェクトしかビルドできないことを知っておいてください。そのためには、ビルド時にコンソールが開いていることを確認してください。ゲームがエディターで無視するエラー条件がいくつかありますが、それでもビルドの試行は中止されます。これはエラーメッセージをコンソールにダンプするだけで、画面に結果は表示されません。チェックを忘れるとイライラする可能性があります。ただし、エラーのないゲームのコンパイルができたら、次を選択できます。 ビルド設定ファイル メニュー、またはを押します NS >> シフト

>> NS 。これにより、いくつかのプラットフォーム用のゲームを構築できる簡単なダイアログが表示されます。

そこからのプロセスは自明です:オプションを選択して、 建てる ;ゲームはインストール先のディレクトリの入力を求め、実行可能ファイルとデータディレクトリの両方をそこに配置します。これらの2つのファイルは、一緒に圧縮して配布できます(Unityデモで構築されたゲームの料金を請求していないことを確認してください。これは、利用規約に違反します)。

10.クロージングノート

他のゲーム開発ツールと同様に、Unityで成功するための鍵は反復型開発です。管理可能な増分を構築する必要があります-必ず野心的ですが、小さなチャンクで野心的であり、最終的な野心に達していない場合でも、少なくとも一貫性のあるものになるようにそれらのチャンクを配置します製品。

最初に最も重要な要素を取得します:あなたの考えを念頭に置いてください 最小実行可能製品 、あなたがおそらく作成することができ、それでもあなたが価値のある何かを達成したかのように感じることができる最も単純で最も骨の折れるもの。より大きな野心に移る前に、その最小限の実行可能なプロジェクトに到達してください。

このチュートリアルはあなたに強力な出発点を与えますが、Unityを学ぶための最良の方法はゲームを構築することです。ゲームの構築を開始し、知識のギャップを埋めていくと、知識が徐々に流れていくと、知らないことが驚くほど早く消えてしまいます。

これをすべて読み、Unityで必要なコーディングに少し圧倒されている場合は、その方法を確認してください。 UnityLearnでゲーム開発を学ぶ また、プログラミングなしでビデオゲームを作成する方法に関するガイドもお読みください。

Unityは強力なツールであり、少し調べれば、予想よりも早く印象的なプロジェクトを構築できます。 以下のコメントであなたが構築したものを教えてください-私たちは見たいです!

共有 共有 つぶやき Eメール メールが本物か偽物かを確認する3つの方法

少し疑わしいメールを受け取った場合は、その信頼性を確認することをお勧めします。メールが本物かどうかを判断する3つの方法があります。

次を読む
関連トピック
  • プログラミング
  • プログラミング
  • 長い形式
  • ロングフォームガイド
著者について アンドレ・インファンテ(131件の記事が公開されました)

南西部を拠点とする作家兼ジャーナリストであるアンドレは、摂氏50度まで機能し続けることが保証されており、12フィートの深さまで防水性があります。

アンドレ・インファンテのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください