• 検索結果がありません。

     

DangerWall の整理

DangerWallオブジェクトが増えてきましたね。Item同様、空のゲーム

オブジェクトを作って整理しましょう。 

1. ヒエラルキービューの​作成→​空のオブジェクトを作成を選択  2. 名前を​DangerWalls​に変更 

3. DangerWallオブジェクトを全て​DangerWalls​へドラッグ&ドロップ   

   

DangerWallStage の静的( static ) 化

 

先ほどマテリアルで設定した​放出(Emissionによる発光エフェクト は、発光する側のオブジェクトと光を受けるオブジェクトの両方を​静

的(staticに設定することで効果を発揮します。 

ライティング( Lighting )設定とマテ リアルの調整

 

オブジェクトを​静的に設定することで​放出の発光エフェクトが反映さ れるようになりました。この時、発光エフェクト等の情報が裏で処 理・保存されています。この処理のことを​ベイク(Bake、焼き付け)

と呼びます。 

地面の色が濃いとベイクによる変化がわかりにくいかもしれません。

プロジェクトブラウザで​GroundMaterial​を選択し、色を調整してみま しょう。 

   

87

自動ベイクと手動ベイク

見栄えは良くなりましたが、ベイクはPCに負荷がかかります。また、

ベイク途中でシーンを再生してしまうと表示がおかしくなることがあ ります。 

 

オブジェクトを動かしたり、マテリアルを調整するたびに自動的にベ イクがかかるのを避けるためには、以下の手順でライティングの自動 生成をオフにして手動でベイクしましょう。 

1. 画面上部のメニューから​ウインドウ(Window)→レンダリング

Rendering)→ライティング設定(Lighting Settingsを選択  2. 下方にある​自動生成(Auto Generateのチェックを​オフにする  3. 自動生成の右にある​ライティングの生成(Generate Lighting

を選択   

88

   

89

太陽光の輝度を下げる

DangerWallはマテリアルの設定で放出(Emission)の強度を1.3にし

たため、光っているのですが太陽光の強度(Intensity)が高く、少し 分かり難いです。太陽光の強度を下げて調整してみましょう。 

1. ヒエラルキービューの​DirectionalLight​を選択 

2. インスペクタービューで​ライト(Light)​コンポーネントの​強度(

Intensityを0.6に設定   

 

   

 

 

90

最後に、​障害物に当たったらシーンを再起動する機能を作成します。 

1. ヒエラルキービューで​DangerWall 1​を選択 

2. インスペクタービューで​コンポーネントを追加​を選択 

3. 新しいスクリプトを選択し、名前を​DangerWallScript​に設定して​作成 して追加を選択 

4. オーバーライド​→​すべてを適用する​を選択  5. DangerWallScript​​Scriptフォルダーに移動 

 

 

   

91

スクリプトによる判定

DangerWallScriptをダブルクリックして開き、​「接触したか」の判定を

受けるコールバックを設定します。 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public​​class​​DangerWallScript​ : MonoBehaviour {

​// オブジェクトと接触した時に呼ばれるコールバック ​void​​OnCollisionEnter​​(Collision hit)

{

​// 何かの処理 }

}

 

92

DangerWallの接触対象がPlayerタグを持つオブジェクトの場合、シー ンを再読込し、ゲームを最初の状態にリセットします。 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public​​class​​DangerWallScript​ : MonoBehaviour {

​// オブジェクトと接触した時に呼ばれるコールバック ​void​​OnCollisionEnter​​(Collision hit)

{

​// 接触したオブジェクトのタグが"Player"の場合 if (hit.gameObject.CompareTag ("Player")) {

// 現在のシーン番号を取得

int sceneIndex = SceneManager.GetActiveScene().buildIndex;

// 現在のシーンを再読込する

SceneManager.LoadScene(sceneIndex);

} } }

 

ゲームを再生してみてください。DangerWallに当たるとゲームがリ セットされてしまうため、精密な操作を要求するゲームになりました ね! 

   

93

関連したドキュメント