Unity

【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

執筆者:


comment

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

関連記事

【Unity】キャラクターに抜刀させる方法

Contents1 概要2 完成イメージ3 Step1 : 必要Assetの準備3.1 刀の入手3.2 抜刀アニメーションの入手4 Step2 : 抜刀させる方式4.1 アニメーションの再生5 刀の移 …

【Unity】 error CS0029: Cannot implicitly convert type ‘UnityEngine.Quaternion’ to ‘UnityEngine.Vector3’が出た時の対処法

Contents1 概要2 環境3 エラーが発生したコード4 原因5 対処法 概要 UnityのC#開発においてtransformオブジェクトをスクリプトで触っていたら、以下のエラーが発生したため、そ …

【Unity】キャラクター操作その5 – レーザーソードで攻撃する

Contents1 概要2 Step1 : 攻撃Animationの調達3 Step2 : Animationの設定4 Step3 : SimpleAnimationへの紐づけ5 Step4 : 制御 …

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

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

【Unity】mixamoのアニメーションが動かない場合の対処

Contents1 概要2 環境3 最初にやったこと3.1 FBXのダウンロード3.2 インポートとRigの設定4 困ったこと5 原因と対処方法6 分かったこと 概要 ハイクオリティな3Dキャラクター …

言語切り替え

カテゴリー