こんにちは 私は長い間この記事を公開したかったのですが、時間を割く時間はありませんでした。 この記事はUnity3Dをあまり知らないユーザー向けに設計されているため、本文に豊富な説明があることを事前に警告したいと思います。
パート2誰でも興味がある-カットへようこそ!
最初のステップ
ベースシーン
実際に、銃、mobなどを配置するサーフェスを作成するときです。 [地形]-> [地形の作成]をクリックします。 同時にペイントしましょうか? オブジェクトで地形を選択し、プロパティでブラシの画像が表示されたボタンをクリックし、[テクスチャを編集]-> [すぐ下にテクスチャを追加]をクリックします。
テクスチャを追加するためのウィンドウが表示されます。最初の行の右側に小さな円があります。これは[参照]ボタンに直接似ており、クリックしてサーフェスのテクスチャを選択します。


テクスチャ選択ウィンドウを閉じて、テクスチャ設定ウィンドウに戻り、その中の適用ボタンをクリックします。 出来上がり、私たちのテレーンは、私たちが選んだテクスチャで描かれています。 同じ方法でテクスチャを追加し、より詳細に色付けすることができます。 ボタンを試して、スライドや穴などを作成してください;)
銃を追加
terraneで十分プレイしましたか? 深刻なおもちゃの素晴らしい時間:私たちの唯一の銃をダウンロード(5Mb、
リンク )
アーカイブをプロジェクトのAssetsフォルダーまたはエディターのプロジェクトウィンドウに解凍すると、効果は同じになります。
また、別のフォルダーを作成する必要があります。同じプロジェクトの上部に[作成]ボタンがあります。 それをクリックして、フォルダを選択します。 プレハブフォルダーに名前を付けます。 このフォルダーを右クリックして、[作成]-> [プレハブ]を選択します。 そして、彼の名前はgun_prefabになります。
ちょっとした理論:プレハブは、その設定を持つ他のオブジェクトを含む特別な種類のオブジェクトであり、ステージ上ですばやく生成することもできます(これは将来私たちにとって有用です)。 シーンオブジェクトのリストのプレハブは青です。キャノンファイル(cannon2)をクリックします。ガンインポートプラグインのプロパティがプロパティインスペクターに読み込まれます。
次のように値を設定します。
0.1に設定されたスケール係数
コライダーの生成をチェック
残りは変更せず、下の[適用]ボタンをクリックするだけです。
したがって、銃を適切なサイズに設定し(最初の0.01は小さすぎ、ユニットは非常に巨大です)、銃が地下に落ちないようにコライダーを生成しました。
プロジェクトウィンドウで、大砲(cannon2)を新しく作成したプレハブ(gun_prefab)にドラッグします。
これで、プレハブをステージに直接ドラッグできます。銃は複製されますが、新しいインスタンスはそれぞれ個別のオブジェクトになります。 試してみてください! そして、十分にプレイしたら、シーンからすべての銃を削除します(それらを選択してDeleteキーを押します)。
モブを作成する
最も単純なTDがあるため、Mobは私たちにとって単純なボールになります。 3Dモデリングに頼らずにそれらを作成することは、梨を砲撃するのと同じくらい簡単です。
GameObject-> Create Other-> Sphereをクリックします。 Sphereという名前のオブジェクトがシーンとオブジェクトインスペクターに表示されます。 既知の方法で、monster01という名前のプレハブを作成し、モンスターをプレハブにドラッグします。 その後、モンスターをシーンから削除することができます。それは、そこではもう必要ないからです。 コードから直接生成します。
カード、お金、 2つのトランク
プレハブガンをProjectからステージに直接ドラッグし、任意の便利な場所に配置します(そうすると、スポーンの実装方法が異なりますが、スターターの場合はそうします)。 AIガンを書く時間です!
プロジェクトにスクリプトフォルダーを作成し、その中にaiを作成します。 次に、aiフォルダーを右クリックして、[作成]-> [C#スクリプト]を選択します。 このスクリプトは、PlasmaTurretAIと呼ばれます。
ダブルクリックで開くと、このスクリプトを使用したIDEがロードされ、スクリプトのフレームワークになります。
PlasmaTurretAI.csusing UnityEngine; using System.Collections; public class PlasmaTurretAI : MonoBehaviour
そして今、実際には、AIコード自体がコメントにあります:
PlasmaTurretAI.cs using System.Collections.Generic; using System.Linq; using UnityEngine;
コメントは、コードを非常に明確に説明していると思います。 四元数のようなモンスターは、唯一理解できないように見えるかもしれません。 恥ずかしがらないで、グーグルで、読んで、このトピックは誰にとっても簡単ではない。 そして
ここでは、Unity3Dの四元数について独自のサイトで読むことができます。
変更を保存し、Unity3Dに切り替えます。
作成したばかりのスクリプトを銃に「引っ張る」には、スクリプトファイルをそのプレハブに直接ドラッグする必要があります。 その後、銃のプレハブをクリックすると、スクリプト内のセクションがプロパティインスペクターに表示され、コード内のすべてのパブリックフィールドを設定できます!

次に、コードをテストするために、モンスターにMonsterタグを添付する必要があります。 プロジェクトでそれをクリックしてから、オブジェクトインスペクターを確認します。上部に[タグ]ドロップダウンフィールドがあり、値は[タグなし]になっています。 このリストをクリックして、下部にある[タグを追加]をクリックします。

[タグ]リストを展開し、[要素0]フィールドに「モンスター」と入力します(スクリーンショットのように引用符なし)。

モンスターをもう一度クリックし、可能性のあるタグのリストを再度展開します-それらの中にはモンスターがあります。 選択します。
初心者モブスクール
これまで私たちのMobは単なるオブジェクトでしたが、今度は銃に向かってって喜び、幸福、そして何よりもそれにダメージを与えることを教えます。
既知の方法で、新しいC#スクリプトを作成します:MobAI、GlobalVars、MobHP、TurretHP、SpawnerAI。 順番に始めましょう:
MobAI.cs using UnityEngine; using System.Collections.Generic; public class MobAI : MonoBehaviour { public GameObject Target;
GlobalVars.cs-グローバル変数のクラス
using System.Collections.Generic; using UnityEngine; public class GlobalVars : MonoBehaviour { public List<GameObject> MobList = new List<GameObject>();
MobHP.cs using UnityEngine; public class MobHP : MonoBehaviour { public float maxHP = 100;
そして、次のクラスについてはコメントしませんでした。MobHPのほぼ完全なコピーであり、いくつかの違いがあります(たとえば、独自の色を持つ必要はありません)。
TurretHP.cs using UnityEngine; public class TurretHP : MonoBehaviour { public float maxHP = 100;
SpawnerAI.cs using UnityEngine; public class SpawnerAI : MonoBehaviour { public int waveAmount = 5;
そして今、あなたは銃のAIコードを修正する必要があります。 そこでスイッチ(FiringOrder)を見つけ、ブロック全体をこれで完全に置き換えます。
switch (FiringOrder)
また、同じクラスの最後の行を置き換える必要があります
return nearestmob;
そのような
return closestMobDistance > attackMaximumDistance ? null : nearestmob;
これは三項演算子と呼ばれます。 条件が「?」の前にある場合 true-その後nullを返します。それ以外の場合、nearestmobは戻ります。 この表現の意味は、銃が到達できないターゲットをつかまないということです。
一般に、コードは準備ができています。 次に、ゲームオブジェクトを準備する必要があります。 MobSpawnerオブジェクトを作成します。将来的に干渉しなければ、その場所は重要ではありません。 SpawnerAIスクリプトをその上に置き、目的の変数値を設定します。 mobプレハブを変数Mobの値にドラッグします。

Spaunerはもう触れません。
GlobalVarsという名前のオブジェクトを作成し、同じ名前のスクリプトをその上にドラッグし、プレーヤーの開始金額を指定します。
次に、スポーンのポイントに必要な数のオブジェクト(便宜上、「name_orderNumber」の精神で名前を付けます)を作成し、Mobのスポーンの目的の場所に配置します。 スポーンポイントタグを割り当て、同時にタレットタグを作成してガンプレハブに割り当てます。
Mobに2つのMobAIおよびMobHPスクリプトを、大砲にTurretHPを掛けます。 変数の値にふけることを忘れないでください。
銃のプレハブをMobAIの目標値に引く必要はありません。AI自体が目標を検索します。 非常に原始的で、ゆっくりですが、見ています。
モンスタープレハブにRigidbodyコンポーネントを追加します(コンポーネント->物理-> Rigidbody)。

ガイエム?
GUIを作成するには、Graphicという新しいC#スクリプトが必要です。
Graphic.cs using UnityEngine; public class Graphic : MonoBehaviour { private GlobalVars gv;
ああ、今はGlobalVarsスクリプトをうまく変更する必要があります。
GlobalVars.cs using System.Collections.Generic; using UnityEngine; public class GlobalVars : MonoBehaviour { public List<GameObject> MobList = new List<GameObject>();
次に、銃のゴーストを作成する必要がありますが、これは非常に簡単です:銃を複製し、空のGOをその中に投げ、削除し、銃をそのプレハブから解き放ちます、主なことはそれを保存しないことです! 次に、大砲内のオブジェクトの階層全体を調べて、シェーダーを透明拡散に変更します。 ちなみに、銃の構造全体を完全に見るには、銃をステージ上に置き、そこで階層を開く必要があります。
ゴーストの作成で問題が発生した場合は、準備が整った状態で投稿します。 パッケージのダウンロードへのリンクがまだあるものもあり
ます (3.7 mb)。
理論的には動作するはずです。 もちろん、ジャムとそれらの最も明白なものがあります-各状態のガンスポーンメカニズムのコードを書く必要があります-これは、状態の形でオーバーロードを持つ独自のメソッドを作成し、メソッド内で既にそれらを解析することによって修正されますが、これは思慮深いコードのためにすぐに対処する必要があるコードの最適化です突然発生するアイデアの下で自分を支配するのが簡単になります。
レッスンのこの部分はそれほど長くはありませんが、ゲームの基本的なメカニズムの実装と理解において最も重要です。
そして、すべてがあなたにとって正しいと判明した場合、それは次のようになります:
続く!
07/26/2012 :コードのバグを修正
05/14/2018 :壊れたリンクを修復する