using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; public enum EnterDoorWay { Enter, Out } public class Door : MonoBehaviour { public GameObject panel; Animator animator; public EnterDoorWay curOpenWay; //地标 public Transform EnterStartPoint; public Transform EnterEndPoint; public Transform OutStartPoint; public Transform OutEndPoint; public GameObject camera; public GameObject light1; public GameObject light2; [Header("非必要")] bool isChoose; public Button[] buttons;//选择开门方式 public GameObject shou; public GameObject iphone; public GameObject player; int _curWay;//shouji 1,zhiwen 2,shengyin 3 AudioSource audiosource; private void Awake() { animator = GetComponent(); isChoose = false; for (int i = 0; i < buttons.Length; i++) { int number = i; buttons[i].onClick.AddListener(delegate () { SetOpenWay(number); }); } audiosource = GetComponent(); } private void Start() { for (int i = 0; i < buttons.Length; i++) { int number = i; buttons[i].onClick.AddListener(delegate () { SetOpenWay(number); }); } } private void Update() { if (isChoose) return; if (Input.GetKeyDown(KeyCode.Z)) { SetOpenWay(0); } else if (Input.GetKeyDown(KeyCode.X)) { SetOpenWay(1); } else if (Input.GetKeyDown(KeyCode.C)) { SetOpenWay(2); } } //选择开门方式 public void SwitchOpenWay() { GameManager.GetInstance().IsStartEvent = true; GameManager.GetInstance().IsPlayerMove = false; GameManager.GetInstance().IsOpenUI = true; panel.SetActive(true); curOpenWay = EnterDoorWay.Enter; DoMoveAction(player.transform,2,EnterStartPoint.position); Quaternion qua = Quaternion.Euler(new Vector3(20,88,0)); camera.transform.rotation=qua; player.transform.rotation = qua; } public void SetOpenWay(int number) { _curWay = number; isChoose = true; panel.SetActive(false); OpenDoor(); } void OpenDoor() { switch (_curWay) { case 0: iphone.SetActive(true); iphone.GetComponent().SetTrigger("iphone"); break; case 1: shou.SetActive(true); shou.GetComponent().SetTrigger("hand"); break; case 2: audiosource.Play(); Invoke("openD",3); break; } } public void MovePlayer() { if (curOpenWay==EnterDoorWay.Enter) { DoMoveAction(player.transform, 3f, EnterEndPoint.position); StartCoroutine(IsArrive(player.transform, EnterEndPoint)); print("玩家进门"); } else { DoMoveAction(player.transform, 3, OutEndPoint.position); StartCoroutine(IsArrive(player.transform, OutEndPoint)); } } public void CloseDoor() { GameManager.GetInstance().IsStartEvent = true; GameManager.GetInstance().IsPlayerMove = false; GameManager.GetInstance().IsOpenUI = true; light1.SetActive(false); light2.SetActive(false); curOpenWay = EnterDoorWay.Out; player.transform.position = OutStartPoint.position; Quaternion qua = Quaternion.Euler(new Vector3(20, 268, 0)); camera.transform.rotation = qua; player.transform.rotation = qua; animator.SetTrigger("door"); } public void DoMoveAction(Transform trans, float speed, Vector3 targetPoint) { StartCoroutine(MoveAction(trans, speed, targetPoint)); } IEnumerator MoveAction(Transform trans, float speed, Vector3 targetPoint) { Vector3 Dir = (targetPoint - trans.position).normalized; while (true) { print("开始携程"); //yield return new WaitForFixedUpdate(); yield return new WaitForEndOfFrame(); trans.position += Dir * speed * Time.deltaTime; if (Vector3.Distance(trans.position, targetPoint) <= 0.25f) { Debug.Log("Over"); break; } } } IEnumerator IsArrive(Transform player,Transform pos) { while (true){ yield return new WaitForEndOfFrame(); if (Vector3.Distance(player.position, pos.position) <= 0.25f) { GameManager.GetInstance().IsPlayerMove = true; GameManager.GetInstance().IsOpenUI = false; GameManager.GetInstance().IsStartEvent = false; isChoose = false; if (curOpenWay==EnterDoorWay.Enter) { light1.SetActive(true); light2.SetActive(true); TaskCenter.GetInstance().StartTask(); } print("Arrive"); animator.SetTrigger("closeDoor"); break; } } } void openD() { GetComponent().SetTrigger("door"); } }