99 lines
2.7 KiB
C#
99 lines
2.7 KiB
C#
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;
|
||
/// <summary>
|
||
/// 是否靠近
|
||
/// </summary>
|
||
public bool isClose = false;
|
||
|
||
public Func<bool> 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<UI_MiddleTipPanel>())//HQB Bug报人物靠近后,靠近交互对象的提示还在s
|
||
{
|
||
GameManager.UIMgr.HidePanel<UI_MiddleTipPanel>();
|
||
}
|
||
}
|
||
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<UI_MiddleTipPanel>() != null)
|
||
GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>().Init("提示:请靠近交互对象");
|
||
if (GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>() == null)
|
||
{
|
||
GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(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);
|
||
}
|
||
}
|
||
}
|