unity3dstudent.comからの2番目の緎習課題

unity3dstudent.comを䜿甚しお問題の分析を継続し、2番目の問題を怜蚎したす。 これが最初のタスクの分析です 。

画像

元の課題ぞのリンク www.unity3dstudent.com/2010/07/challenge-c02-beginner



䞀番䞋の行プレヌダヌの芖野内のスペヌスを抌すず、ボックスが萜䞋し始め、最終的にタヌゲットに向かっお別のボックスを起動するシヌンを䜜成する必芁がありたす。 タヌゲットを打った埌、いく぀かの音で消えるはずです。 ボックスの起動はレバヌに基づいおいたす。1぀のボックスは既に片偎にあり、別のボックスはレバヌの反察偎にありたす。



UPD 3番目のタスク







パヌト1シヌン。



たず、平面、光源を䜜成し、「すべおがはっきりず芋えるように」カメラを配眮したすこれは前のタスクの分析で説明したす。



次に、タヌゲットを远加したす。キュヌブを䜜成し、適切なタヌゲットのサむズに拡倧したす。 OX軞に察しお垂盎になるようにタヌゲットを移動したす軞の方向は、[シヌン]タブの右䞊から衚瀺できたす。 タヌゲットに䌌た゚ディタヌで単玔なテクスチャヌをすぐにスケッチし正方圢にし、プロゞェクトパネルのマテリアルフォルダヌに保存したすこのフォルダヌを䜜成した埌







targetMaterialマテリアルをプロゞェクトに再床远加しMaterialsフォルダヌ内、新しく远加したテクスチャをむンスペクタヌパネル内のTextureフィヌルドにドラッグしたす。 マテリアルをタヌゲットにドラッグしたす階局パネルでそのオブゞェクトを「タヌゲット」ず呌びたしょう。



カタパルトレバヌの䞖話をしたしょう。 キュヌブをシヌンに远加し、plank1ず呌び、「ボヌド内に」匕き䌞ばしたす。







今すぐplank1にコンポヌネントヒンゞゞョむントを远加したすコンポヌネント->物理孊->ヒンゞゞョむント-翻蚳では「ヒンゞ」を意味したす。 䞊蚘のスクリヌンショットでは、既に远加されおいたす-オレンゞ色のベクタヌが衚瀺されおいたす。 オブゞェクトが回転する軞を瀺したす。 珟圚、この方向はOX軞ず䞀臎しおいたす。 確認するには、OXに察しおボヌドをわずかに回転させ、シヌンを開始したす。



そのため、回転軞は私たちには適しおいたせん-結局、ボヌドを鋭く回転させるず、その゚ッゞの1぀からのボックスがタヌゲットの方向に飛ぶこずが必芁です。 Inspectorパネルで、plank1のHinge Jointコンポヌネントを芋぀け、Axisフィヌルドグルヌプを芋぀けたす。 これが回転軞です。 デフォルトでは、次の倀が蚭定されおいたす。

X1

Y0

Z0



これは、OX軞の同方向性を瀺しおいたす。 OZに平行な軞は私たちに適しおいたす。 フィヌルドZを1に蚭定し、残りをれロに蚭定したす。 ステヌゞ䞊のplank1の䞭心からのオレンゞ色のベクトルの方向が逆になっおいるこずに泚意しおください。







ほが完成したレバヌで。 ここでの問題は、ロヌルダむスに十分な重点が眮かれおいないこずです。 远加キュヌブを远加しplank2ず呌びたしょう、圧瞮し䞋のスクリヌンショットを参照、plank1ずわずかに亀差するように移動しお、グリップを圢成したすこれたでは仮想のみ











plank2 Rigidbodyコンポヌネントを远加したすplank1には、ヒンゞゞョむントの远加時にこのコンポヌネントがすでに自動的に远加されおいたす。 plank1ずplank2が修正されたこずを物理゚ンゞンに「通知」したしょう。 plank1をFixed Jointコンポヌネントに远加したすComponent-> Physics-> Fixed Joint。 InspectorパネルのConnected Bodyフィヌルドの倀がNoneRigidbodyになりたした。 階局パネルからその堎所plank2をドラッグしたす。



シヌンを実行するず、レバヌが䞀方の端に萜ちる様子がわかりたす。 これはすでに喜ばしいこずです。 シヌンに立方䜓を远加し、その巊カメラに最も近い端のレバヌのすぐ䞊に配眮したす。 この堎合、キュヌブのすべおの次元を2倍に削枛したす。







Rigidbodyコンポヌネントを远加したす。 ここでシヌンを開始するず、レバヌを䞋げるず、立方䜓が最埌たで䞋がりたす䞋がる。 デザむンは「ショット」の準備ができおおり、カりンタヌりェむトを準備するために残りたす。カりンタヌりェむトが萜ちるず、新しく远加されたキュヌブが飛行したす。



プレハブをプロゞェクトに远加し、dropcubeず呌びたす。 シヌンに新しいキュヌブを䜜成し、階局パネルからプレハブにドラッグしたす。 Rigidbodyコンポヌネントをプレハブに远加し、キュヌブをシヌンから削陀したす。 プレハブの質量を30に蚭定したした䜜成したシヌンにオブゞェクトを配眮するため、この倀により、起動されたキュヌブがタヌゲットに到達できるようになりたす。



ここで、シヌンに空のオブゞェクトゲヌムオブゞェクト->空の䜜成を名前ドロッパヌで远加したす。 カメラの芖野内のカメラから遠く離れたレバヌの端の䞊に配眮したすこれはメむンカメラオブゞェクトを遞択し、[ゲヌムオブゞェクト]-> [ビュヌを遞択に揃える]を遞択するこずで確認できたす-そこからキュヌブが埌で衚瀺されたすドロップキュヌブず同じ







パヌト2スクリプト。



スクリプトの郚分を扱いたしょう。



たず、キュヌブがヒットするずタヌゲットが消えたす。 最埌のタスクLINKからSelfdestroyerスクリプトを取埗しすべおのタスクに1぀のプロゞェクトを䜿甚するため、新しいスクリプトを远加する必芁もありたせんでした-すべおが既にプロゞェクトパネルにありたす、それをタヌゲットオブゞェクトにアタッチしたす。 このスクリプトの完党なコヌドを次に瀺したす非垞に小さい

using UnityEngine; using System.Collections; public class Selfdestroyer : MonoBehaviour { void OnCollisionEnter(Collision obj) { Destroy(gameObject); } }
      
      







ここで、Boxdropper Cスクリプトをプロゞェクトに远加したす。 圌はスペヌスバヌをクリックしお、アタッチ先のオブゞェクトの䜍眮にキュヌブを䜜成する必芁がありたすより正確には、むンスタンスプレハブドロップキュヌブを䜜成したす。



キヌストロヌクぞの応答のみが必芁なため、Updateメ゜ッド、Startメ゜ッド自動生成された堎合は削陀したす。 蚈画を実装するには、少なくずも、プレハブをスクリプトに枡す必芁がありたす。 タむプGameObjectのパブリック倉数をクラスに远加したす。

 public GameObject cubePrefab;
      
      





曎新方法を倉曎したす。

 void Update () { if (Input.GetButtonDown("Jump")) { GameObject.Instantiate(cubePrefab, transform.position, transform.rotation); } }
      
      







このコヌドに関する泚意事項



-たず、Input.GetButtonDown "Jump"の代わりに、Input.GetKeyDownKeyCode.Spaceを䜿甚できたす。 2番目のオプションはスペヌスキヌコヌドに厳密に結び付けられ、1番目のオプションはゲヌムコントロヌル蚭定でゞャンプキヌデフォルトではスペヌスの圹割を果たしたす。 これらの蚭定は、プロゞェクトをアセンブルし、結果の実行可胜ファむルを実行するこずで確認できたすこれが明確でない堎合は、プロセスをより詳现にペむントできたす。



- 最初のタスクのスクリプトずは異なり、GameObject.Instantiateを呌び出すずき、関数の結果は必芁ないため、どこにも保存されないこずにも泚意しおください。 前回、オブゞェクトを䜜成した埌、远加で匷制的に操䜜した堎合、ここでは必芁ありたせん。



-オヌバヌロヌドされたInstantiate関数がここで呌び出され、3぀のパラメヌタヌがありたすが、オプションが1぀ありたすInstantiateObject original。 埌者は、実際のパラメヌタヌによっお枡されたオブゞェクトず同じ䜍眮ず回転パラメヌタヌ3぀のパラメヌタヌを持぀Instantiate呌び出しで、それぞれ2番目ず3番目のパラメヌタヌを蚭定したす。 これらのパラメヌタヌは、スクリプトがアタッチされおいるオブゞェクトの察応する倀から取埗されたものではないこずに泚意しおください



ここで、Boxdropperスクリプトをプロゞェクトパネルから階局パネルのドロッパヌオブゞェクトにドラッグしたす。

たあ、タスクはほが完了しおいたす。 シヌンを開始しおスペヌスバヌを抌すず、立方䜓が萜䞋し、小さな立方䜓すでにレバヌアヌム䞊にあったがタヌゲットに飛び蟌みたす。 蚀葉遣いずの小さな矛盟が1぀残っおいたす。タヌゲットを砎壊するずきに音がしたせん。



たず、サりンド自䜓、぀たりある皮のサりンドを持぀ファむルが必芁です。 過去のプロゞェクトの1぀である爆発の音ず関係のある最初の音を聞きたした。 プロゞェクトにサりンドを远加したすonDestroySoundずいう名前です。



Unityのサりンドに関する少し叙情的な䜙談。 ここでの音はモノず3D3Dサりンドです。 実際、オヌディオには1たたは2チャンネルが衚瀺されたす。 空間䜍眮がかなり明確な゚フェクト爆発、衝撃音などでは、モノラルサりンドを䜿甚するこずをお勧めしたす。実際の音量プレヌダヌが聞くは、゜ヌスからリスナヌたでの距離に䟝存するためですオヌディオリスナヌコンポヌネントの存圚によっお決たりたす。デフォルトでは、メむンカメラオブゞェクトに含たれおいたす。



サりンドが3Dであるこずが刀明した堎合むンスペクタパネルに「3Dサりンド」のチェックマヌクがありたす、絶望しないでください。 「3Dサりンド」項目のチェックを倖し、同じパネルで「匷制的にモノラルにする」を遞択し、「適甚」をクリックしたす。 次に、Selfdestroyerスクリプトを倉曎したす。 再生するサりンドのパブリック倉数が必芁です。

 public AudioClip onDestroy;
      
      





次に、OnCollisionEnterメ゜ッドで、Destroyメ゜ッドの呌び出しに加えお、サりンドの再生を远加したす。

 void OnCollisionEnter(Collision obj) { AudioSource.PlayClipAtPoint(onDestroy, transform.position); Destroy(gameObject); }
      
      







このようなAudioSource.PlayClipAtPointメ゜ッドの呌び出しは、音源がこのスクリプトがアタッチされおいるオブゞェクトtransform.positionの䜍眮にあるかのようにonDestroyサりンドを再生したす。



ステヌゞたたは階局パネルでタヌゲットオブゞェクトを遞択し、サりンドファむルonDestroySoundをプロゞェクトからInspectorパネルの「On DestroyAudio Clip」フィヌルドにドラッグしたす。



泚任意のオブゞェクトにオヌディオ゜ヌスコンポヌネントを远加し、スクリプトから「オヌディオ」ず呌ぶこずができたす。 オブゞェクトの堎所で送信されたサりンドを再生する特別な方法もありたす。



 audio.PlayOneShot(AudioClip clip);
      
      







ただし、この堎合、オブゞェクトが砎棄される盎前にサりンドが再生され、audio.PlayOneShotを䜿甚するず、削陀埌にサりンドの再生が停止したす。 これは、圌の声が聞こえないこずを意味したす。 自分で確認できたすこれも䟿利です。



これで、タスクは完了したした。



パヌト3.矎孊。



他に䜕がありたすか しかし、1぀の詳现が私を苊しめたした䞀床に耇数のキュヌブを投げるスペヌスバヌを数回連続しお抌すず、レバヌを圢成する2぀の「ボヌド」plank1ずplank2が互いに察しおシフトし始めたす。 たずえば、次のスクリヌンショットで芋るこずができたす別の光源がシヌンに远加されおいたす。







それから私は最も簡単な解決策を考えたしたplank1ずplank2を接続する必芁があるのは䞀床だけなので、それがすでにその圹割を果たした埌にそれを削陀しおみたせんか plank2を砎壊するだけですか glyい。



ここでも、階局パネルでplank1を遞択し、むンスペクタヌパネルでFixed Jointコンポヌネントを芋぀けたす。 奇劙なフィヌルドに気付きたす



砎壊力無限倧



必芁なもの 私の堎合、関節を砎壊するのに必芁な力の倀は10になりたしたニュヌトンに望みたす。 「近づいた」ずは、スロヌむングキュヌブがレバヌの衚面から離れた瞬間に、plank2がplank1から離れお飛行するこずを意味したす。







刀明したように、ヒンゞゞョむントも同じ問題の圱響を受けたす-plank1の奇劙な動䜜は、倚数の萜䞋キュヌブで再び芳察されたす。 同じ方法で問題を解決したしょう-Break Forceフィヌルドを30に蚭定したす。その結果、最初の起動埌にレバヌ構造党䜓が厩壊し、非垞に「物理的」になりたす。



これは、最初の実行埌のシヌンの様子です。







PS矎しさを高めるために、シヌン内のすべおのオブゞェクトに材料を远加できたす。レバレッゞ、すべおのキュヌブ倧小、床。 これを行う方法に぀いおは、蚘事の冒頭で説明したす。



おわりに



今回はもう少しコヌドがありたすが䞭括匧ず自動生成されたコヌドを陀いお、ただ「セマンティック」行は10行未満です、タスクはより意味がありたす。 私たちが制埡する物理孊の䞀郚は、すでに化合物の圢で珟れおおり、シヌンの特定のむベント䞭にオンになる音です。



All Articles