【Unity】キャラクターが近づいたら自動ドアが開閉するようにする
概要
Unityで建物などを作成した際、入り口にドアを置き、キャラクターが近づくと自動で開閉するようにしたいときがあります。今回はその一例について紹介します。
実現例
使用アセット
今回は自動ドアの開閉を試すためのAssetとして以下を使用させて頂きます。Freeなのに素敵なクオリティで、ドア開閉のアニメーションも付属されているので、使いやすいです。
https://assetstore.unity.com/packages/3d/environments/sci-fi/sci-fi-styled-modular-pack-82913
Step 1 : Doorオブジェクトの配置
上述のリンク先からアセットをダウンロードしてImportした後、Sci-Fi Styled Modular Pack > Prefabs > Decorative elements > Doorsからdoor_2をドラッグ&ドロップでsceneに配置します。
配置したdoor_2
Step2 : Colliderの設定
このドアオブジェクトに、キャラクターが近づいたら検知するためのColiderを設定します。今回はドア正面に入ったら反応するようにしたいので、Box Colliderを使用することにしました。
doorオブジェクトのInspectorからAdd ComponentsでBox Colliderをセットします。ここで、留意点として、Is Triggerにチェックを入れておきます。これはキャラクターが通り抜けた際に反応するようにするためです。チェックを入れておかないとキャラクターがColliderにぶつかり、ドアを通れなくなってしまいます。
SizeのZの値はドアが反応する距離に相当します。ここは好きな値で良いですが、今回は6にしておきました。
Box Colliderをセットした様子
Step3 : アニメーションとスクリプト
今回使用するdoor_2にはありがたいことにドアを開閉するAnimation ClipとAnimation Controllerがすでに内包されており、door_2のprefabオブジェクトに既にアタッチされています。[ door_2 ] の[ Inspector ]> [ Animator ]の[ frame_door_2 ] がそれになります。
そのため、あとはこのAnimation Controllerで定義されているcharacter_nearbyという変数のtrue/falseをスクリプトで制御するだけでドアが開閉できます。非常に便利です。
以下が、ドア開閉のスクリプトです。主な実現方法は以下になります。
- OnTriggerEnterでキャラクタの接近を検知してドアを開ける
- OnTriggerExitでキャラクタが離れたことを検知してドアを閉める
- キャラクタにはPlayerタグをつけておき、Playter以外には反応しないようにする(これは要件次第なので任意)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DoorCon : MonoBehaviour
{
Animator animator;
// Start is called before the first frame update
void Start()
{
//Animatorの取得
animator = this.GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
}
void OnTriggerEnter(Collider other)
{
//PlayterがColliderの範囲内に入ったら
if(other.tag =="Player")
{
//character_nearbyをtrueにしてドアを開ける
animator.SetBool("character_nearby", true);
}
}
void OnTriggerExit(Collider other)
{
//PlayterがColliderの範囲から出たら
if (other.tag == "Player")
{
//character_nearbyをtrueにしてドアを閉める
animator.SetBool("character_nearby", false);
}
}
上記のスクリプトをdoor_2オブジェクトにアタッチすれば冒頭のあにメーションの動きになります。
以上です。
Unityを一から学ぶのにおすすめの本はコチラ