NPC阶段步骤

本文探讨了NPC系统的实现思路,包括加载动画组件、配置表数据管理、保持Controller与逻辑分离。重点介绍了碰撞体监测、OnMouseDown交互、事件与委托的应用,以及如何通过NPC ID执行特定操作。还涉及了如何通过SkinnedMeshRenderer实现角色高亮,以及NPC与玩家交互的注册与查找机制。

关于NPC系统的思路环节: 加载动画组件,方便控制动画。 加载配置表数据,从Manager那里加。保持Controller不与其他逻辑类接触。 之后做的事:如何能点击到NPC。

第1 碰撞体事件监测。

采用OnMouseDown,可以让鼠标与碰撞器产生交互。

(思考:鼠标放到人身上,如何产生发亮边际)。

  • Manager层

    NPC与其他系统产生交互处理,采用事件。(思考:事件与委托有什么具体区别?)

    function(NPC的功能)作为key,一个委托作为value,以一个字典保存。事件是NPC接口与其他系统的唯一接口。

    玩家与NPC的交互流程: 其他系统(商店还是副本)向NPC管理器注册事件,注册的事件放进了一个委托字典里。 首先接收到Controller层发送来的NPC参数(由玩家鼠标点击时产生交互),先判断NPC是否存在,再执行操作。交互操作时,先判断NPC种类,然后根据种类执行相应的方法。

  • Controller层

    OnMouseDown触发交互(注意防止连点,此方法适用于有碰撞器的3D场景对象),通过协程处理交互。

    协程处理了NPC人物朝向。

    Vector3 faceTo = (User.Instance.CurrentCharacterGameObject.transform.position - transform.position).normalized
    

    得到NPC朝向玩家的方向。用Lerp插值的方式改动人物的面朝向。

    (协程里可以作死循环且不影响主线程,但是不能做耗时的逻辑。)

    利用

    render = this.gameObject.GetComponentInChildren<SkinnedMeshRenderer>();
    

    做高亮处理。

    思考:注册事件时,怎么知道点击的是哪个NPC?

    答:交互流程以<Function,void UI方法>的形式注册事件→点击NPC→NPC传输自身ID找寻到相应Data→执行注册事件里的UI方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值