48 lines
1.2 KiB
C#
48 lines
1.2 KiB
C#
using UnityEngine;
|
|
|
|
public class Door : MonoBehaviour
|
|
{
|
|
public Vector3 openOffset = Vector3.up * 3f;
|
|
public float openSpeed = 2f;
|
|
public bool isOpen;
|
|
|
|
private Vector3 closedPosition;
|
|
private Vector3 targetPosition;
|
|
private Collider doorCollider;
|
|
|
|
private void Awake()
|
|
{
|
|
closedPosition = transform.position;
|
|
targetPosition = closedPosition;
|
|
doorCollider = GetComponent<Collider>();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
// MoveTowards даёт предсказуемое плавное открытие без физики и аниматора.
|
|
transform.position = Vector3.MoveTowards(transform.position, targetPosition, openSpeed * Time.deltaTime);
|
|
|
|
if (isOpen && doorCollider != null && Vector3.Distance(transform.position, targetPosition) < 0.02f)
|
|
{
|
|
doorCollider.enabled = false;
|
|
}
|
|
}
|
|
|
|
public void Open()
|
|
{
|
|
isOpen = true;
|
|
targetPosition = closedPosition + openOffset;
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
isOpen = false;
|
|
targetPosition = closedPosition;
|
|
|
|
if (doorCollider != null)
|
|
{
|
|
doorCollider.enabled = true;
|
|
}
|
|
}
|
|
}
|