Unity

【Unity】キャラクターが近づいたら自動ドアが開閉するようにする

投稿日:2020年11月23日 更新日:

概要

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を一から学ぶのにおすすめの本はコチラ

-Unity

執筆者:


comment

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

関連記事

【Unity】ThirdPersonUserControlの方向転換動作おかしい時の対処

Contents1 事象2 調査3 対処 事象 Standard AssetsのThirdPersonUserControlを使用してEthanを動かすとき、デフォルトの正しい動きは↑↓キーで前進後退 …

【Unity】既存のAnimationをRead-Onlyから編集できるようにする

Contents1 概要2 環境3 Read-Onlyになる事象4 Read-Onlyを回避する方法 概要 Unityで既存のAnimationをキャラクターにAttachする際、Animationで …

【Unity】他オブジェクトのスクリプトのメソッドがどうしても取ってこれない原因と対処法

Contents1 概要2 環境3 まず最初に確認すべきこと4 結論:名前空間を指定していなかった5 エラーの実例5.1 原因6 まとめ 概要 Unityでほかのスクリプトで定義されているObject …

【Unity】 Standard Assetsのダウンロードとインポート

Contents1 目的2 環境3 Step1 : Asset Storeを開く4 Step2 : Standard Assetsのインストール5 まとめ 目的 UnityでStandard pack …

【Unity】キャラクター操作その4 –  レーザーソードを持たせてON/OFFする

Contents1 概要2 環境3 Step1 : レーザーソードの調達4 Step2 : レーザーソードを持たせる5 Step3 : レーザーソードをON/OFFする6 まとめ 概要 前回はRobo …

言語切り替え

カテゴリー