【Godot4自学手册】第十二节屋内场景碰撞和返回主场景定位

各位同学,本节主要完成屋内场景碰撞添加,人物在屋内移动,处于正常位置;从屋内返回主人公出现在房屋门口正常位置。开始啦:

一、屋内添加场景碰撞

在第九节人物碰撞、遮挡关系背景搭建中,我们学习了给图片添加碰撞方法。今天,学习另一种方法,整体给房屋内部添加碰撞。
切换到InnerHouse场景,给根节点添加StaticBody2D节点,并StaticBody2D为节点添加2个CollisionPolygon2D节点,第一个节点沿着房屋边距画出碰撞边界,第二个节点沿着桌椅画出碰撞边界,最终效果如下图所示:
请添加图片描述

通过上述操作,会给房间内的物体添加碰撞区域,主人公就不能走到这些区域了,符合常识,演示效果如下:
请添加图片描述

二、返回主场景正确位置

一是创建全局变量。

在菜单栏上选择项目,选择项目设置,在对话框中切换到自动加载选项卡,然后在节点名称中输入Globals,单击添加,在弹出的对话框中选择脚本存放路径“res://Scripts/”,最后选择创建,整个操作过程如下图:
请添加图片描述

这样,就会创建一个res://Scripts/globals.gd
请添加图片描述

最后编辑脚本如下:

extends Node
var last_Player

上述操作是创建一个全局变量,用于记录主人公的位置。

二是添加Area2D节点记录主人公位置

切换到House场景,添加Area2D节点命名为PlayerPositon,为其添加子节点CollisionShape2D,在检查器CollisionShape2D中Shap图形选择圆形,并拖动到房屋门口前方,如下图所示:
请添加图片描述
将Area2D节点的信号添加到house.gd脚本下,具体操作如下:

请添加图片描述

下面开始编辑脚本:

func _on_player_positon_body_entered(body):
	if body.name=="Player":
		Globals.last_Player = body.global_position

这段代码实现了,主人公进入PlayerPositon节点区域,自动记录一下主人公的位置到全局变量。

三是主场景中自动加载全局变量

切换到主场景,为主场景的根节点添加脚本,并编写如下脚本:

extends Node2D
@onready var player=$Player

# Called when the node enters the scene tree for the first time.
func _ready():
	if Globals.last_Player:
		player.global_position = Globals.last_Player

这段代码实现了,主场景展示时,人物在指定位置显示。

三、演示效果

这样,我们的场景切换就OK了。最终效果如下:
请添加图片描述

简单回顾一下本节的内容,一是给房屋内添加CollisionPolygon2D节点,为物体添加上碰撞;二是创建全局变量,在主人公进入屋内记录最后位置,从屋内返回主场景,将主人公展示到指定位置。
同学们,下节再见!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏自学

生活不易,打赏随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值