LoginSignup
1
1

More than 5 years have passed since last update.

UniRxでドアを作りました

Last updated at Posted at 2018-06-23

現状でベストのドアです。
コライダー内へ入ったところでボタンを押すと、アニメーションが再生されます。

UniRxを使用。

改良できたらまたアップします

Door.cs
using UnityEngine;
using UniRx;
using UniRx.Triggers;
using System;

public class Door : MonoBehaviour
{

    [SerializeField] AudioClip OpenSound;
    [SerializeField] AudioClip CloseSound;
    [SerializeField] AudioClip LockedSound;
    private Animator animator;
    private AudioSource audioSource;
    private BoxCollider boxCollider;
    [SerializeField]private bool isOpen;    //ドアの状態
    [SerializeField]private bool isLocked;  //ドアの状態


    private void Start()
    {
        animator = GetComponent<Animator>();
        boxCollider = GetComponent<BoxCollider>();
        audioSource = GetComponent<AudioSource>();
    }

    private void OnTriggerStay(Collider other)
    {
        if (Input.GetKeyUp(KeyCode.LeftControl))
        {
            this.UpdateAsObservable().First()
                .Where(_ => Input.GetKeyUp(KeyCode.LeftControl))
                .ThrottleFirst(TimeSpan.FromSeconds(1.0f))
                .Subscribe(_ => DoorAction())
                .AddTo(this); 
        }
    }

    void DoorAction()
    {
        //鍵がかかっているかどうかで場合分けをしている。
        switch (isLocked)
        {
            case (true):
                audioSource.PlayOneShot(LockedSound);
                break;
            case (false):
                if (!isOpen)
                {
                    animator.SetBool("isOpen", true);
                    audioSource.PlayOneShot(OpenSound);
                    Invoke("ChangeisOpen", 1);
                }
                else if (isOpen)
                {
                    animator.SetBool("isOpen", false);
                    audioSource.PlayOneShot(CloseSound);
                    Invoke("ChangeisOpen",1);
                }
                break;
        }
    }

    private void ChangeisOpen()  //状態が変わったことを1秒遅れにするためにInvokeメソッド
    {
        isOpen = !isOpen;
    }
}


1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1