摘要:在StaticBody2D(改名为Door)下添加AnimatedSprite2D,CollisionShape,Area2D子节点,Area2D子节点改名为InteractionComponent,并在其下添加CollisShap2D节点。
在StaticBody2D(改名为Door)下添加AnimatedSprite2D,CollisionShape,Area2D子节点,Area2D子节点改名为InteractionComponent,并在其下添加CollisShap2D节点。
在检查器内点击动画,右键点击精灵帧,选择新建SpriteFrames,随后选择从精灵表中添加帧
在CollisionShape2D中选择Door的碰撞形状
在InteractableComponent/CollisionShape2D中选择交互范围
注意将InteractableComponent的碰撞层设置在自定义名称为Interactable层,碰撞掩码自定义名称设置为Player,Door碰撞层设置为Ground,碰撞掩码设置为Ground,玩家碰撞层设为Player,碰撞掩码设置为Ground
其中先申明InteractableComponent作为一个类方便后续拓展。
extends Area2D类似于申明创建一个基于Area2D的特殊区域,这个特殊区域会继承原来Area2D的基本功能。
创建两个信号:激活状态和未激活状态
在节点中选择bodyentered和bodyexited信号,当bodyentered信号激活时激活interactable_activated信号,bodyexited信号激活则激活interactable_deactivated信号。
在Door中添加脚本:
使用@onready,使变量能够在func _read中被调用,注意在此场景树下存在两个CollisionShape2D,但在这里指的是Door的第一子节点,如果需要表示InteractableComponent下的CollisionShape2D,需要这样表示:InteractableComponent/CollisionShape2D。在_ready中将InteractableComponent中的两个信号与函数func on_interactable_activated与func on_interactable_deactivated连接,当信号触发则执行对应的函数。
来源:爱娃爱健身的灵犀爸