【Unity】コピペで使える!ドアの開閉プログラムとアニメーション設定方法

追記(21,3/27)
空のオブジェクトの入れ子にしなくても良いようにスクリプトを組み直しました!
地味に面倒ですもんね。。以下がコピペで使えるスクリプトとなります。
◆仕様
- ドア開閉条件:
→ドア開閉可能領域(ドアのコライダー)に「unitychan」が侵入かつ、「Fire1」を押下。 - ドアオブジェクトに「Animator」と「Area_door」スクリプトを以下の図の通りに設定。
◆ドア開閉用のプログラム(C#)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class area_door : MonoBehaviour {
private bool opened;
private bool near;
private Animator animator;// Use this for initialization
void Start () {
opened = false;
near = false;
animator = transform.GetComponent<Animator>();
}// Update is called once per frame
void Update () {
if (Input.GetButtonDown(“Fire1") && near)
{
if (!opened)
{
animator.SetBool(“Open", true);
Open();
Debug.Log(“Open");
}
else
{
animator.SetBool(“Open", false);
Open();
Debug.Log(“Close");
}
}
}void OnTriggerEnter(Collider collider){
if(collider.gameObject.name == “unitychan"){
near = true;
Debug.Log(“d");
}
}void OnTriggerExit(Collider collider){
near = false;
Debug.Log(“e");
}void Open()
{
opened = !opened;
}
}
このスクリプトは、ドアのタイプによらず転用可能です。
「Animator」を適宜作れば以下のドアでも同じスクリプトで動作します。
空オブジェクトの入れ子にするのがポイント
下記手順で、ドア開閉を実装することが出来ます。
アニメーション作成は「Animation」で空気を読んで適当に作成できるので割愛します。
■手順:
- ドアオブジェクトを空のオブジェクトの子に設定し、「Animator」を設定する。
- ドアオブジェクトにドア開閉用「Script」と、当たり判定用の「Box Collider」を設定する。
- 「Animator」にOpen変数を準備し、下図の様に状態遷移を設定する。
■ドア開閉用のプログラム(C#):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class area_door : MonoBehaviour {
private bool opened;
private bool near;
private Animator animator;// Use this for initialization
void Start () {
opened = false;
near = false;
animator = transform.parent.GetComponent<Animator>();
}// Update is called once per frame
void Update () {
if (Input.GetButtonDown(“Jump")&& near)
{
if (!opened)
{
animator.SetBool(“Open", true);
Open();
Debug.Log(“Open");
}
else
{
animator.SetBool(“Open", false);
Open();
Debug.Log(“Close");
}
}
}void OnTriggerEnter(Collider collider){
if(collider.gameObject.name == “unitychan"){
near = true;
Debug.Log(“d");
}
}void OnTriggerExit(Collider collider){
near = false;
Debug.Log(“e");
}void Open()
{
opened = !opened;
}
}
■参考画像:
1. ドアオブジェクトを空のオブジェクトの子に設定し、「Animator」を設定する。
2. ドアオブジェクトにドア開閉用「Script」と、当たり判定用の「Box Collider」を設定する。
3. 「Animator」にOpen変数を準備し、下図の様に状態遷移を設定する。
◆手っ取り早く外注という選択肢もあり
『ココナラ』というサービスを使うのもお勧めです。私も困ったらよくベテランクリエイターの方に、依頼を投げています。
ゲームを完成させて沢山の方々にプレイして貰うのが目標なので、途中で萎えてゲームが完成しなくなるくらいなら、外注して早く問題解決した方が良いです。
ディスカッション
コメント一覧
3.のアニメーターのアイドルとドアオープンとドアクローズはどうやって出すんですか?
「Animator」タブでの状態遷移の作り方ですか?
今回は割愛しましたが、状態遷移画面にて作れます。
「右クリック」->「Create State」->「Empty」
上記操作にて状態が作れますので、適宜変数名などを設定して下さい。