NOOB UNITY

初心者がUnityでなんかしちゃうぞBlog

シーン上では可視化されるが、ゲーム中には可視化されないトリガー範囲の作り方

  • プレイヤーがこの範囲に入ったらイベントを起こしたい
  • この範囲内のキャラクターには力を加えたい
  • 範囲内に何かしらのキャラクターがいれば、それを調べたい

などなど、「この範囲に入ったらなにかしたい」というようなイベントトリガーとなる場所とかをよく使うかと思います。基本的にトリガーを使って作ると思うのですが、それって目には見えない透明な範囲であることも多いかなと思います。

でもそれって、範囲が可視化されていないので作る際に見えなくて不便だったりします。色々やり方はあるかと思うのですが最近やってるやり方として半透明なマテリアルをつけて実行時にレンダラーを非表示にするやり方で対処してたりします。

f:id:yuu9048:20190608194142p:plain

このCubeがあるところをゲーム中は見えないトリガー範囲として扱いたいけど、シーン上でもある程度確認できるようにしたい場合についてやっていきたいと思います。 まずはゲーム開始時に自動的に非表示にするスクリプトを書いていきます。

AutoRendererDisable.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AutoRendererDisable : MonoBehaviour
{
    void Start()
    {
        GetComponent<MeshRenderer>().enabled = false;
    }
}

ちなみに2Dの場合は SpriteRenderer と書き換えればOKなはずです。

f:id:yuu9048:20190608201112g:plain

とりあえずこれで実行時にRendererが非アクティブになるので透明になりました。シーン上では見えるけどゲーム中は見えなくなる要件は達成できました。

でもこのままだとシーン編集時にCubeがそのまま表示されてて不便です。なのでマテリアルを変更してトリガー範囲をわかりやすいようにしてみます。

f:id:yuu9048:20190608202627p:plain

Create から Material を作成します。

f:id:yuu9048:20190608202951p:plain

[Rendering Mode] から [Fade] を選択します。

f:id:yuu9048:20190608203521p:plain

[Albedo] をクリックして色を選択していきましょう!

f:id:yuu9048:20190608203633p:plain

どんな色でもいいですが、透過したいのでアルファの値は適当に下げておきます。 さっき[Rendering Mode]を[Fade]にしているのでマテリアルを透過することができます。

f:id:yuu9048:20190608213528p:plain

作ったマテリアルをCubeにアタッチしていきます。

f:id:yuu9048:20190608214009g:plain

シーン上では半透明でエリアが表示されておりゲーム実行時には透明になるエリアが作成できました!

ゲームで「敵がスポーンする範囲を設定する」「このエリアに入ったらリスポーンする」などのゲーム上では見えないけど、ゲームを作る上で可視化しておきたい範囲などをこうしておくことでシーン上での作成が楽になり、なおかつゲームには影響を及ぼさないので作りやすくなりました。

シーン上だけ表示されるやり方が他にもありそうな気もしましたが、とりあえずこれで対応しています。