unity3dstudent.comの実践演習

DisaDisaの投稿-unity3dstudentからのレッスンの翻訳-この興味深いサイトについて知りました。 レッスンに加えて(完全に論理的ではありませんが、完全に論理的です-一部の場所では、物語はプログラミング言語(これらのレッスンの場合はJavaScript、ループやブール式など)の明白な瞬間に行きます)いわゆる「チャレンジ」レッスンの資料。 タスクには、ソリューション結果のビデオ例が付属しています。



これまでのところ、このようなタスクは3つしかありませんが、できればもっと多くのタスクが表示されることを願っています。 しかし、これらのタスクでさえ、実際にはUnityのシンプルさと便利さを体験できます。 もちろん、独立したソリューションを意味します(タスクへのリンクはソリューションの前になります)が、何かが突然失敗した場合は、こちらをご覧ください。 投稿のもう1つの目的は(特定のタスクの分析に加えて)、Unityで最小限の労力で何ができるかを例で示すことです。



/ *記事を理解するには、Unityで(特にユーザーインターフェイスを使用して)少なくとも少し経験を積むことが望ましい-DisaDisaから 投稿またはunity3dstudent.comでの最初のレッスンを見ることができます* /



この記事は、最初の課題についてのみです。 残り-非常に近い将来に。



UPD: 2番目のタスク

UPD 2: 3番目



はい。また、課題の文言(ビデオ+短いテキスト)の下で、サイトは課題を完了するために必要なレッスンへのリンクを提供することに注意します。



チャレンジを受け入れましたか?





最初のタスク



元の課題へのリンク: www.unity3dstudent.com/2010/07/challenge-c01-beginner

要点:壁のスペースを押すと、ボックスがスローされ、壁にぶつかると消えるシーンを作成します。



最初に、空の新しいプロジェクトを作成します。カメラのあるシーンがすぐに表示されます。 シーンに平面を追加します-これが「フロア」になります。 「マウスホイールを使用して」視点を少し平面に近づけて、「非常に小さくなく、非常に大きくない」状態を実現します。





カメラはスクリーンショットで強調表示されます。



新しく追加されたプレーンが表示されないように、カメラ(階層パネルのMainCameraオブジェクト)が展開されていることに注意してください(上のスクリーンショットを参照)。 修正する必要があります。 飛行機に「狙われた」のも不思議ではありません! これで、カメラを(階層パネル内またはステージ上で)選択し、GameObject-> Align With View(またはCtrl + Shift + Fを押す)を押すことができます。 これにより、カメラを空間内のポイントに移動し、そこから平面を見ました。 カメラが設置されました。次に照明を修正します。 シーンにポイントライトを追加し、シーンが視覚的に快適になるようにどこかに配置します。







次に、シーンに立方体を追加し(壁と呼びましょう)、壁の状態まで伸ばします。 壁をカメラに「向いて」立つように、壁を回転/移動しましょう。 これらの操作は、カメラの「前方」位置からボックスを撮影するという事実によって引き起こされます(これはかなり相対的な概念であるため、引用符で囲みます。「前方」はカメラと同じ方向を見ます)。







シーンはほぼ完成しました。 より正確には、その可視部分で。 プレハブキューブも必要です。これを撮影します。 シーンにキューブを追加し(必要に応じて少し減らすことができます)、プロジェクトにプレハブを追加します(キューブなどと呼びましょう)。 階層パネルからプレハブにキューブをドラッグし、シーンからキューブを削除します-不要になります。 階層パネルでキューブを選択し、Rigidbodyコンポーネントを追加します。



これで、2つのスクリプトの作成を開始できます。Selfdestroyerスクリプトは、別のオブジェクトがヒットするとオブジェクトを削除し、Shooterスクリプトは実際に壁の方向にキューブを撃ちます。



新しいC#スクリプトを作成し、Selfdestroyerと呼びます。 テキストからUpdateメソッドとStartメソッドを削除します。影響があった場合にのみオブジェクトを削除する必要があります。 OnCollisionEnterメソッドについて説明します-恥ずかしいのは簡単です(ボックス以外は壁に当たらないと想定されます)。



void OnCollisionEnter() { Destroy(gameObject); }
      
      







ここで、gameObjectは、スクリプトがアタッチされるシーン内のオブジェクトに関連付けられたGameObjectタイプのオブジェクトです。



プロトタイプvoid OnCollisionEnter(Collision obj)



を使用して関数を記述し、スクリプトがアタッチされているオブジェクトにヒットするオブジェクトに関する情報を使用することが可能であったことに注意してください。 ただし、これは必要ないため、仮パラメータのリストは空のままにします。



[プロジェクト]パネルから、このスクリプトを階層パネルの壁オブジェクトにドラッグします。 シーンが開始している間、何も起こらないことを確認してください。



次に、2番目のスクリプト、Shooterを見てみましょう。 GameObject型の変数を取得してみましょう。これには、後で壁で撮影するオブジェクトが含まれます。



 public GameObject cubePrefab;
      
      







ここではStart()メソッドは必要ありませんが、スクリプトが添付されているオブジェクト(この場合はカメラ)の場所からスペースバー(これは標準設定ではジャンプキー)を押すと、Updateが残されて補完されます力は立方体を投げた。 その結果、スクリプトファイルは次のようになります。



 using UnityEngine; using System.Collections; public class Shooter : MonoBehaviour { public GameObject cubePrefab; // Update is called once per frame void Update () { if (Input.GetButtonDown("Jump")) { GameObject cube = Instantiate(cubePrefab, transform.position, transform.rotation) as GameObject; cube.rigidbody.AddForce(transform.forward * 1000); } } }
      
      







スクリプトをMainCameraオブジェクトに添付します。 シーンを実行し、コンソールのスペースをクリックすると、エラーが生成されることを確認します。







彼女は、Shooterスクリプトでは、cubePrefab変数に値が割り当てられていないことを教えてくれます。 この欠陥を修正しましょう-階層パネルでカメラオブジェクトを選択し、インスペクターパネルで「シューター(スクリプト)」というセクションを見つけます。 実際、「キューブプレハブ」フィールドの値は「なし」です。 プロジェクトパネルからこのフィールドにキューブをドラッグします。



今、私たちは退屈するまでキューブを起動して撃ちます。





そのため、意味のある5行のコードを記述しました。ユーザー入力に応答するシーンと、衝突の形で「外部刺激」に応答するオブジェクト(壁)があります。 始めるのに悪い場所ではありません。



PS



一般に、私は最初の2つのタスクについてすぐに書くつもりでしたが、この記事はその内容に関して既に非常に膨大であるため、次の記事ではタスク2と3を検討します。 次のタスク(最初のタスクとは対照的に)では、unity3dstudentのレッスンの素材に、 この世界を記事よりも少し興味深いものにするための小さな(またはそれほど小さくない)追加が行われることに事前に注意します。



All Articles