手机网站建设多少钿,私有云网站建设,网页设计重庆,wordpress静态404错误文章目录 每篇一句前言开启配置门的开启动画代码调用#xff0c;控制开启门动画 新增CollisionDetector 脚本#xff0c;使用UnityEvent #xff0c;控制钥匙和门的绑定多把钥匙控制多个门一把钥匙控制多个门 BUFF系统扩展参考源码完结 每篇一句
人总是害怕去追求自己最重要… 文章目录 每篇一句前言开启配置门的开启动画代码调用控制开启门动画 新增CollisionDetector 脚本使用UnityEvent 控制钥匙和门的绑定多把钥匙控制多个门一把钥匙控制多个门 BUFF系统扩展参考源码完结 每篇一句
人总是害怕去追求自己最重要的梦想因为他们觉得自己不配拥有或者觉得自己没有能力去完成。
——保罗柯艾略《牧羊少年奇妙之路》
前言
当开发2D游戏时钥匙门系统和buff系统是常见的游戏机制。当开发2D游戏时钥匙门系统和buff系统是常见的游戏机制。如果让你开发一个钥匙门系统你的想法可能是写个钥匙控制脚本再写个门脚本控制开门当人物触碰钥匙然后调用对应的门代码打开对应的门这样做无疑是没什么问题的但是当要扩展一个钥匙打开多门或者不同钥匙打开不同门的情况系统的扩展性和可读性就会变得很差。而这里我分享一种方法使用UnityEvent实现这些系统。
UnityEvent是Unity引擎提供的事件系统它允许我们在游戏中定义和触发自定义事件并与之相关联的回调函数。使用UnityEvent我们可以轻松地创建灵活的、可扩展的钥匙门系统和buff系统为游戏增添深度和变化。
首先使用UnityEvent可以实现高度的可定制性。我们可以设计各种类型的事件并创建相应的回调函数来响应这些事件。例如在钥匙门系统中我们可以创建一个UnityEvent来表示玩家获得了一把钥匙然后将该事件与门的解锁方法关联起来。这样只要玩家获得了钥匙门就会自动解锁。通过这种方式我们可以根据游戏需要定义任意数量的事件和回调从而创建出独特而富有挑战性的游戏玩法。
其次UnityEvent提供了良好的可扩展性。由于UnityEvent是基于委托的我们可以方便地增加或删除事件的监听器。这使得我们能够轻松地扩展钥匙门系统和buff系统的功能。例如在buff系统中我们可以在玩家获得一个新的buff时通过UnityEvent通知其他相关系统进行相应处理如调整玩家属性、触发特效等。通过添加和移除事件监听器我们可以根据游戏的需求动态修改系统的行为使其更加灵活和可定制。
此外使用UnityEvent还能提高项目的可维护性和可读性。通过将事件和回调函数封装在UnityEvent中我们可以将相关逻辑集中在一起使代码更加清晰易懂。同时当需要修改或扩展系统时我们只需关注UnityEvent的定义和调用而不必修改大量散落在代码中的具体实现。这种解耦合的设计有助于减少bug的引入并提高代码的可维护性。
总而言之使用UnityEvent可以极大地简化钥匙门系统和buff系统的开发过程使其更具灵活性、可扩展性和可读性。通过合理地利用UnityEvent我们能够快速实现复杂的游戏机制并为玩家带来丰富多样的游戏体验。接下来让我们深入了解如何利用UnityEvent来构建出色的钥匙门系统和buff系统吧
开启
配置门的开启动画 代码调用控制开启门动画
using UnityEngine;public class Door : MonoBehaviour
{private Animator _animator;private void Awake(){_animator GetComponentAnimator();}// 菜单选项用于在编辑器中手动调用Open方法[ContextMenu(itemName: Open)]public void Open(){_animator.SetTrigger(Open);}
}效果
新增CollisionDetector 脚本使用UnityEvent 控制钥匙和门的绑定
using UnityEngine;
using UnityEngine.Events;public class CollisionDetector : MonoBehaviour
{[SerializeField]private string _colliderScript;[SerializeField]private UnityEvent _collisionEntered;[SerializeField]private UnityEvent _collisionExit;// 当其他物体进入碰撞时调用的方法private void OnCollisionEnter2D(Collision2D col){if (col.gameObject.GetComponent(_colliderScript)){_collisionEntered?.Invoke();}}// 当其他物体离开碰撞时调用的方法private void OnCollisionExit2D(Collision2D col){if (col.gameObject.GetComponent(_colliderScript)){_collisionExit?.Invoke();}}
}绘制门和钥匙
挂载代码
效果
多把钥匙控制多个门
新增代码控制修改钥匙颜色对应门颜色也跟着改
using System;
using System.Collections.Generic;
using UnityEngine;public class ColorAligner : MonoBehaviour
{[SerializeField]private Color _color;[SerializeField]private ListSpriteRenderer _renderersToAlign;// 在编辑器中修改字段值时自动调用的方法private void OnValidate(){// 遍历_renderersToAlign列表并将每个SpriteRenderer的颜色设置为_color字段的值_renderersToAlign.ForEach((SpriteRenderer sp) {sp.color _color;});}
}配置
效果
一把钥匙控制多个门
绘制场景 配置参数 效果
BUFF系统
都看到这里了buff系统的实现就不用多说了吧同理即可
比如
using UnityEngine;public class Buff : MonoBehaviour
{public void AddHealth(){Debug.Log(加血);}public void AddSpeed(){Debug.Log(加速);}//TODO: 其他BUff
}拾取每个buff物品时执行对应的效果方法即可是不是很简单
扩展
你还可以将他扩展用到其他功能上比如陷阱触发对话打开宝箱等等
参考
【视频】https://www.youtube.com/watch?appdesktopv1IJmenD1HOk
源码
为了防止大家变懒源码就不提供了大家直接可以照着文章思路进行学习
完结
赠人玫瑰手有余香如果文章内容对你有所帮助请不要吝啬你的点赞评论和关注以便我第一时间收到反馈你的每一次支持都是我不断创作的最大动力。点赞越多更新越快哦当然如果你发现了文章中存在错误或者有更好的解决方法也欢迎评论私信告诉我哦
好了我是向宇https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者出于兴趣爱好于是最近才开始自习unity。如果你遇到任何问题也欢迎你评论私信找我 虽然有些问题我可能也不一定会但是我会查阅各方资料争取给出最好的建议希望可以帮助更多想学编程的人共勉~