using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class NPCController : PermanentTriggerBase { public SpriteRenderer spriteRenderer; public Animator animator; public string animatorParameters; public Transform target; private float distance; public float minDistance; /// /// 是否靠近 /// public bool isClose = false; public Func canTalk; public Action talkAction; private void Update() { if (target != null) distance = Vector3.Distance(transform.position, target.position); if (distance < minDistance) { transform.LookAt(target.position); transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0); isClose = true; if (GameManager.UIMgr.GetPanel())//HQB Bug报人物靠近后,靠近交互对象的提示还在s { GameManager.UIMgr.HidePanel(); } } else { isClose = false; } } protected override void OnMEnter() { base.OnMEnter(); if (!isClose) return; //if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study) //{ _highlight.SetHighlighted(true); //} } protected override void OnMExit() { //if (GameManager.RunModelMgr?.ModeType != E_ModeType.Study) _highlight.SetHighlighted(false); base.OnMExit(); } protected override void OnMDown() { base.OnMDown(); if (canTalk != null && !canTalk.Invoke()) { return; } if (!isClose) { if (GameManager.UIMgr.GetPanel() != null) GameManager.UIMgr.GetPanel().Init("提示:请靠近交互对象"); if (GameManager.UIMgr.GetPanel() == null) { GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (p) => { p.Init($"提示:请靠近交互对象"); }); } return; } //if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(triggerName, false) == 0) //{ talkAction?.Invoke(); _highlight.SetHighlighted(false); if (spriteRenderer != null) spriteRenderer.gameObject.SetActive(false); if (animator != null) { animator.SetInteger(animatorParameters, 1); } //} } public void StopAnimator() { if (animator != null) { animator.SetInteger(animatorParameters, 0); } } }