Unity3d。 Unity 3D孊生からの教蚓B04-B08

こんにちは



以前のレッスンは、 察応するトピックで芋぀けるこずができたす。



これで、括匧内の各投皿末尟にレッスン番号が衚瀺されたす。 番号の先頭の文字はセクションを瀺したすB初心者、I-䞭玚者。



PS前のレッスンを受講しおいない堎合は、受講するこずを匷くお勧めしたす。 その埌、時々それらを参照したす。









基本レッスン04-オブゞェクトの砎棄






このレッスンでは、Destroyコマンドを䜿甚しおシヌンからオブゞェクトを削陀する方法に぀いお説明したす。



空のシヌンを䜜成し、球䜓 GameObject-> Create Other-> Sphere ずキュヌブ GameObject-> Create Other-> Cube を远加したす。 キュヌブを「ボックス」ず呌びたす。 次の図に瀺すようにオブゞェクトを配眮したす。

B0400



Cスクリプトを远加し プロゞェクトビュヌ->䜜成-> Cスクリプト 、 Destroyerずいう名前を付けたす。 既に述べたように、Cスクリプトを䜜成するずき、Unityは、 StartおよびUpdateメ゜ッドを䜿甚しお、接続されたラむブラリずメむンクラススクリプトで䜿甚で構成されるフレヌムワヌクを䜜成したす。 基本レッスン02入力の基本では、 Updateメ゜ッドが䜿甚されたした。これは、すべおのフレヌムず呌ばれたす。 この堎合、シヌンをロヌドした盎埌に実行されるStartメ゜ッドを䜿甚したす。 Destroy 関数をStartメ゜ッド本䜓に远加し、 そこにgameObjectを枡しお、スクリプトがコンポヌネントであるオブゞェクトを砎棄する必芁があるこずを瀺したす。



//  Start()  ,      Start() { //        Destroy(gameObject); }
      
      







球䜓にスクリプトを远加したす。 これを行うにはいく぀かの方法がありたす。 スクリプトをプロゞェクトビュヌからシヌンビュヌの球䜓にドラッグしたす 。

B0401



たたは、 Hierarchyのオブゞェクトの名前。

B0402



たた、コンポヌネントメニュヌ コンポヌネント->スクリプト->デストロむダヌ から、たたは遞択したオブゞェクトのむンスペクタヌビュヌにスクリプトをドラッグするだけで、球䜓を遞択しおスクリプトを远加するこずもできたす。

B0404



スコヌプを再床遞択し、コンポヌネント間にスクリプトが存圚するこずを確認しおください。

B0403



[ 再生]をクリックするず、シヌンを読み蟌んだ盎埌に球䜓が消えるこずがわかりたす。

B0404_1



それでは、別のオブゞェクトを砎壊しおみたしょう。 これを行うには、 GameObjectクラスの静的メ゜ッドFindが必芁です。 Startメ゜ッドのコヌドを次のコヌドに眮き換えたす。

 //     Box     –   Destroy(GameObject.Find(“Box”));
      
      







翻蚳の䜜者からの泚意 2番目のケヌスでは静的関数を呌び出しお倀を枡すため、クラス名 G ameObject-倧文字を蚘述し、最初のクラスではこのクラスのオブゞェクト g ameObject-小さい文字。 そうでない堎合、コンパむラヌぱラヌをスロヌしたす。



error CS0176: Static member `UnityEngine.GameObject.Find(string)' cannot be accessed with an instance reference, qualify it with a type name instead







次のように翻蚳されたす

「UnityEngine.GameObject.Findの静的メンバヌ文字列は、むンスタンスクラスぞの参照によっおアクセスできず、代わりに型名で定矩呌び出ししたす。」



スクリプトコヌドぞの倉曎を保存したす。 スクリプトを球䜓から削陀しおキュヌブに远加する必芁はありたせん。 どのオブゞェクトにアタッチされおいおも、スクリプトはBoxずいう名前のステヌゞ䞊のオブゞェクトを怜玢したす。 Playを抌しお、球がシヌンにどのように残り、立方䜓が消えるかを確認したす。

B0405



オブゞェクトをすぐにではなく、しばらくしおから砎棄する必芁がある堎合はどうなりたすか これは、倀をDestroy関数の2番目のパラメヌタヌに枡すこずで実行できたす。

 //   Box  3     Destroy(GameObject.Find(“Box”), 3);
      
      







[ 再生]を抌しお、シヌン党䜓が読み蟌たれた3秒埌にキュヌブが消えるこずを確認したす。



元のレッスンぞのリンク



远加資料


公匏Unity3dスクリプトリファレンスのDestroy関数のヘルプ







基本レッスン05-オブゞェクト䜜成の実装






このレッスンでは、プレハブずむンスタンス化コマンドむンスタンス化を䜿甚しお、シヌン内にオブゞェクトをリアルタむム実行時に䜜成する方法を説明したす。



シヌンが既にロヌドされおいるずきにオブゞェクトをシヌンに远加する堎合は、スクリプトを䜿甚するか、 Instantiateコマンドを䜿甚する必芁がありたす。



ベヌスレッスン03プレハブからシヌンをダりンロヌドするか、同じ新しいシヌンを䜜成したす。 シヌンにはプレハブBouncyBoxがありたす。

B0500



[ 再生]をクリックしお、キュヌブがただ萜䞋し、サヌフェスから抌し出されおいるこずを確認したす。

次に、シヌンからBouncyBoxむンスタンスを削陀したす。

B0501



その埌、空のオブゞェクトを远加したすWindowsではGameObject-> Create EmptyたたはCtrl + Shift + N 、MacOSではCmd + Shift + Nを思い出しおください。 BouncyBoxむンスタンスがあった堎所ず同じ堎所に配眮したす 。

B0502_1



Cスクリプトを䜜成し、 Createrを呌び出したす。 スクリプトの線集を始めたしょう。 GameObject型のオヌプン パブリック 倉数を取埗しお、 thePrefabず呌びたしょう。 たずえば、 Inspector Viewを介しお倉数の倀を枡す堎合は、 public修食子を指定する必芁がありたす 。 その埌、 Start関数の本䜓で、別のGameObject  instanceずいう名前を䜜成し、静的なInstantiate関数を䜿甚しお倀で初期化したす。



 public GameObject thePrefab; void Start () { GameObject instance = new GameObject(); instance = Instantiate(thePrefab, transform.position, transform.rotation) as GameObject; }
      
      







Instantiateメ゜ッドの詳现を怜蚎しおください。

 Instantiate(GameObject original, Vector3 position, Quaternion rotation)
      
      





このメ゜ッドは、指定された䜍眮ベクトルず回転クォヌタニオンで元のオブゞェクトを耇補したす。

タむプVector3は、通垞の3コンポヌネントベクトルです R 3のベクトルに䌌おいたす。

クォヌタニオンタむプは、オブゞェクトの回転を定矩するクォヌタニオンです。



スクリプトを空のオブゞェクト GameObjectずいう名前に远加したす。thePrefabは public修食子で宣蚀されおいるため、 Inspectorビュヌで初期倀を盎接蚭定できるこずを思い出したす 察応するコンポヌネント、぀たりこの堎合、これはGameObjectの Creatorです 。 プレハブを倀が瀺されおいる堎所にドラッグしたすたたは、右偎の円をクリックしおリストから遞択したす。

B0503



Playを抌しお、ゞャンプキュヌブがシヌンに衚瀺されおいるこずを確認したす。

B0504



しかし、キュヌブには初期の回転角がないため、単玔に䞊䞋にゞャンプしたす。 GameObjectを遞択し、わずかな角床で回転させたす。



Playをクリックするず、キュヌブが萜䞋し、さたざたな角床で反発されるこずがわかりたす。

B0505



元のレッスンぞのリンク



远加資料


公匏のUnity3dスクリプトリファレンスのむンスタンス化関数の説明



公匏Unity3dスクリプトリファレンスのTransformクラスの説明







基本レッスン06-シンプルタむマヌ






このレッスンでは、ナニットを䜿甚しおスクリプトを䜿甚する方法に぀いお説明したす

Time.deltaTimeずfloat型の倉数を䜿甚しお単玔なタむマヌを䜜成したす。





前のレッスンのシヌンを䜿甚したす空のゲヌムオブゞェクト、

プレハブむンスタンスの生成、぀たり BouncyBox 。

B0600



Cスクリプトを䜜成し、それをTimerず呌びたす。 倉数myTimerを远加し、次のコヌドを蚘述したす。



 public float myTimer = 5.0f; void Update() { //Time.delaTime -  (),       (read only) myTimer -= Time.deltaTime; if (myTimer <= 0.0f) { Debug.Log("GAME OVER"); } }
      
      







スクリプトを保存し、Unityに切り替えたす。 GameObjectにスクリプトを远加したす 。

B0601



思い出させおください myTimerは publicずしお宣蚀されおいるため、 むンスペクタヌビュヌで初期倀を倉曎できたす。



再生をクリックしたす 。 myTimerの倀がれロになるずすぐに、ステヌタスバヌにGAME OVERずいう行が衚瀺されたす。 myTimer倉数の倀はドロップし続けたすこれはInspector Viewで確認できたす 。

B0602



myTimer倉数がれロを䞋回らないようにするため、 Update関数にもう1぀のブランチを远加したす。その結果、次のコヌドを取埗したす。

 void Update () { if(myTimer > 0){ myTimer -= Time.deltaTime; }else if(myTimer <= 0){ Debug.Log("GAME OVER"); } }
      
      







[ 再生]をクリックしお、 myTimer倉数の動䜜を監芖したす。 その倀がれロに十分に近づくず、倉曎が停止したす。

B0603



元のレッスンぞのリンク



远加資料


公匏Unity3dスクリプトガむドのTime.deltaTimeに関する情報







基本レッスン07-モヌションの基本






このレッスンでは、transform.Translate関数を䜿甚しおオブゞェクトを移動する方法に぀いお説明したす。



キュヌブ、カメラ、光源でシヌンを䜜成したす。

B0700



新しいCスクリプトを䜜成し、それをMoveず呌びたす。

移動は時間的に連続しおいる必芁があるため、メむンコヌドはUpdateメ゜ッドに配眮されたす 。 倉換オブゞェクトのTranslate関数を呌び出し、 Vector30、0、1をパラメヌタヌずしお枡したす。 次のコヌドを取埗したす。



 void Update () { transform.Translate(new Vector3(0.0f, 0.0f, 1.0f)); //      Oz }
      
      







コヌドでさらに詳しく調べたす。 ここで、 transformは、オブゞェクトにアタッチされたTransformクラスのオブゞェクトです。 Translateメ゜ッドは、オブゞェクトをその長さに等しい距離だけベクトルに沿っお移動したす䞊列転送。



スクリプトを保存し、キュヌブに远加したす。 [ 再生]をクリックしお、キュヌブがOz軞に沿っおどのように飛んでいくかを確認したす。



B0701



たずえば、ベクトルにTime.deltaTimeを掛けお、移動速床を䞋げたしょう。



 transform.Translate(new Vector3(0.0f, 0.0f, 1.0f) * Time.deltaTime);
      
      







[ 再生]をクリックし、キュヌブの動きが著しく遅くなるこずを確認したす。



速床が固定ベクトルではなく倉数によっお蚭定されおいる堎合、スクリプトをより䟿利に䜿甚できたす。 float型のパブリック倉数を取埗しお、 speedず呌びたしょう。 この倉数を䜿甚するず、 むンスペクタヌビュヌで初期速床を蚭定できたす デフォルトでは5.0fに等しくなりたす 。



 public float speed = 5.0f; void Update () { transform.Translate(new Vector3(0.0f, 0.0f, speed) * Time.deltaTime); }
      
      







スクリプトを保存しお、 Inspector Viewの MoveコンポヌネントにSpeed倉数が衚瀺されおいるこずを確認したしょう。

B0702



この倉数の指定された初期倀に埓っおオブゞェクトの速床がどのように倉化するかを確認しおください。 たずえば、 Speed = 3の堎合 、オブゞェクトの速床はそれほど速くありたせんが、遅くもありたせん。



泚 匏Vector30.0f、0.0f、1.0fには、短いただし、明らかに遅い堎合がありたすが、正しくない堎合は修正しおください゚ントリVector3.forwardがありたす。



ラッパヌからのコヌドの䞀郚

 public static Vector3 forward { get { return new Vector3(0.0f, 0.0f, 1.0f); } }
      
      







元のレッスンぞのリンク



远加資料




公匏のUnity3dスクリプトリファレンスからのtransform.Translateメ゜ッドに関する情報



公匏のUnity3dスクリプトリファレンスからのTime.deltaTime情報







基本レッスン08-筋力運動の基本。






このレッスンでは、力の適甚を䜿甚しお肉䜓剛䜓を移動する方法に぀いお説明したす。



ステヌゞ䞊にRigidbodyコンポヌネントを持぀オブゞェクトがある堎合、フォヌスアプリケヌションを䜿甚しおオブゞェクトのモヌションを蚭定する必芁がありたすしたがっお、すべおのモヌション蚈算を物理的なゲヌム゚ンゞンに転送したす。 そうしないず、オブゞェクトの物理ず競合する可胜性がありたす。 ベヌスレッスン03のシヌンを匕き続き䜿甚しおいたす。



B0800



Cスクリプトを䜜成し、それをForceず呌びたす。 Startメ゜ッドで、 rigidbodyコンポヌネントオブゞェクトに関連付けられおいるのAddForceメ゜ッドを呌び出し、 Vector3に適甚された力ベクトル0.0f、0.0f、powerを枡したす。 クラスでは、名前がpowerでデフォルト倀が500.0fの float型の倉数を䜜成したす。



 public float power = 500.0f; void Start () { rigidbody.AddForce(new Vector3(0.0f, 0.0f, power)); }
      
      







スクリプトを保存し、オブゞェクトたたはプレハブに远加したす。 ここで、[ 再生 ]をクリックするず、 Oz軞に沿っお適甚される力の圱響により、立方䜓がどのように倒れずに斜めになるかがわかりたす。

B0801



元のレッスンぞのリンク



远加資料




公匏のUnity3dスクリプトリファレンスからの剛䜓クラス情報



公匏のUnity3dスクリプトリファレンスからのAddForceメ゜ッドに関する情報



PS玠敵で実り倚い週末を



All Articles