Unity5の教科書7日目

今日の学習内容

  • ライト(光源)の種類
  • Raycast関数の使い方
  • Tagを使ったオブジェクトの識別
  • 効果音を鳴らすタイミングと鳴らす音源の指定
  • レベルデザイン

◇ライト(光源)の種類

  • Directional Light:無限遠から平行に光を放つ。距離に依存して光の強さが変化しない。
  • Point Light:光源から全方位に光を放つ。距離に依存して光の強さが減衰する。
  • Spot Light:特定方向に光を放つ。光の強度が距離に依存して減衰。

◇Raycast関数の使い方

Physics.Raycast関数:ある地点からRay(光線)を飛ばして、飛ばしたRayの先にコライダーがあるのかを検出する関数。銃弾やレーザービームなどのあたり判定に使ったりする。

関数の詳細は以下の通り

Raycast (Vector3originVector3direction, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers,QueryTriggerInteractionqueryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

<Rayがヒットしたコライダーの位置を検出するスクリプト>

引用:Unityスクリプトリファレンス RaycastHit.point
https://docs.unity3d.com/ja/2017.4/ScriptReference/RaycastHit-point.html

ここで使われているRaycastHit変数はコライダの衝突に基づいて情報を格納します。
どういうことかというと、Raycast関数で見えない線を飛ばし、その先にあるオブジェクトのコライダーにその線がぶつかったら、そのオブジェクトの情報が入ることになります。
10行目の引数hitの前にoutとありますが、これは「outに続く変数(ここではhit)に関数の中で取得した値を入れて返してくれ」という意味があるそうです。
つまり、上述の見えない線がぶつかったらhitにオブジェクトの情報を格納してくれということを意味していることになります。
Raycast関数の引数には線の原点と線を放つ方向を指定する必要がありますが、Ray変数を使うことで、この原点と方向を同時に指定することが出来ます。

◇Tagを使ったオブジェクトの識別

Unityではオブジェクトそれぞれに特定の名前(タグ)を付けることが出来、スクリプトからもそのタグを使ってオブジェクトの判断をできます。
ScreenPointToRayを使う際、メインカメラのタグがUnTaggedになっていることが原因でScreenPointToRayが機能しないといったエラーがありました。
こういった具合にタグ付けされているオブジェクトを参照したいのに、オブジェクトがタグ付けされておらず、エラーがでるなんてこともあるので、全オブジェクトが正しくタグ付けされているのかは注意しないといけないですね。

タグの作成はEdit→ProjectSetting→Tags and Layersを選択。Tagsを展開し。+をクリックでタグの作成ができる。その後、作成したタグをタグ付けしたいオブジェクトの インスペクタ―ビュー内から選択することで、タグ付けできる。

◇効果音を鳴らすタイミングと鳴らす音源の指定

オブジェクトから音を鳴らしたい場合にはAudio Sourceコンポーネントをアタッチし使用するが、Audio Sourceコンポーネントに登録できる音源は1つしかない。
状況に応じて音源を鳴らし分けたい場合には、スクリプトから音源を指定する必要がある。
public変数としてAudio Source型の変数を定義して、スクリプトのコンポーネントから任意の音源を取り出せるようにすると、鳴らしわけが可能。

memo
RandomクラスのRange関数
→Range(a, b)でa以上、b未満の整数をランダムに返す。ある範囲内のランダムな整数を使いたいときに便利。

◇レベルデザイン

ゲームオブジェクトの生成を行う際には、生成に関する様々なパラメータを使用することになる。これらのパラメータは値を変えることで、ゲームの難易度を変えることが可能だ。
レベルデザインとは、これらのパラメータを調整して、ゲーム中の面白さを継続するように設定することである。
面白さを継続させるには、ゲームの進行に応じて難しさに変換を付ける「レベルデザイン」が必要である。

はまっている状態を「フロー状態」と呼び、プレイヤの能力と挑戦内容の難易度が釣り合っていると、フロー状態になるとのこと。
フロー状態を作り出すためには、ユーザーにとって最適な難易度の設定が重要となる。

難易度にかかわるパラメータは一括で変更することが出来たほうが都合がよい場合が多いので、それらパラメータをひとくくりにしたpublicの関数を作成しておくと便利である。

そんなこんなで、8完成したゲームがこちら。

ついに「Unity5の教科書」終了しました!
日数としては1日1章なので1週間ですが、間を挟んでしまったりたので、2、3週間かかってしまいました。
次にやる本は「UnityではしめるC#」に取り組もうと思います。
選定理由は、評判が良く、この本の次作が「Unityの寺子屋」という本らしいのですが、次作ではサンプルが収益化しやすいジャンルのゲームで、作ったアプリの収益化をする方法なども載っているので、自分の目指したい方向と合致していると思ったからです。

最終的には大規模な3Dゲームだったりを作りたいとも思っていますが、まだまだ先は長そうなので、目先の目標としてアプリとしてリリースしやすいジャンルに挑戦したいと思います。

UnityではじめるC#はもっとサクサク進んで行きたいと思います。
(できるだろうか…w)

ここまで読んでくださってありがとうございました。
それではこの辺で。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です