49 lines
1.4 KiB
C#
49 lines
1.4 KiB
C#
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
public class DoorAnimation : MonoBehaviour
|
||
|
|
{
|
||
|
|
[SerializeField] private GameObject door;
|
||
|
|
[SerializeField] private float openSpeed = 2.0f;
|
||
|
|
[SerializeField] private float closeSpeed = 2.0f;
|
||
|
|
private bool isOpen = false;
|
||
|
|
private Vector3 closedPosition;
|
||
|
|
private Vector3 openPosition;
|
||
|
|
|
||
|
|
void Start()
|
||
|
|
{
|
||
|
|
closedPosition = door.transform.position;
|
||
|
|
openPosition = new Vector3(door.transform.position.x, door.transform.position.y - 4.6f, door.transform.position.z);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void ToggleDoor()
|
||
|
|
{
|
||
|
|
if (isOpen)
|
||
|
|
{
|
||
|
|
StartCoroutine(CloseDoor());
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
StartCoroutine(OpenDoor());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
private System.Collections.IEnumerator OpenDoor()
|
||
|
|
{
|
||
|
|
while (Vector3.Distance(door.transform.position, openPosition) > 0.01f)
|
||
|
|
{
|
||
|
|
door.transform.position = Vector3.MoveTowards(door.transform.position, openPosition, openSpeed * Time.deltaTime);
|
||
|
|
yield return null;
|
||
|
|
}
|
||
|
|
isOpen = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
private System.Collections.IEnumerator CloseDoor()
|
||
|
|
{
|
||
|
|
while (Vector3.Distance(door.transform.position, closedPosition) > 0.01f)
|
||
|
|
{
|
||
|
|
door.transform.position = Vector3.MoveTowards(door.transform.position, closedPosition, closeSpeed * Time.deltaTime);
|
||
|
|
yield return null;
|
||
|
|
}
|
||
|
|
isOpen = false;
|
||
|
|
}
|
||
|
|
}
|