diff --git a/DungeonShooting_Godot/scene/Hall.tscn b/DungeonShooting_Godot/scene/Hall.tscn
index cd7b366..4f5cfe1 100644
--- a/DungeonShooting_Godot/scene/Hall.tscn
+++ b/DungeonShooting_Godot/scene/Hall.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=13 format=3 uid="uid://c2hynqudkykxl"]
-[ext_resource type="PackedScene" path="res://scene/Dungeon.tscn" id="1_31od0"]
+[ext_resource type="PackedScene" uid="uid://bqf2vks5ggnsp" path="res://scene/Dungeon.tscn" id="1_31od0"]
[ext_resource type="Script" path="res://src/game/hall/Hall.cs" id="2_43fdu"]
[ext_resource type="Texture2D" uid="uid://b2j5mkqm3uv6w" path="res://resource/sprite/tile/HallBg.png" id="3_0g5wq"]
[ext_resource type="Script" path="res://src/game/hall/DungeonEntrance.cs" id="3_t3my6"]
@@ -109,6 +109,7 @@
script = ExtResource("5_lowqi")
Id = "item_0031"
ShadowZIndex = 0
+CollisionEnabled = false
CollisionVisible = false
[node name="Item0013" type="Node2D" parent="ItemRoot" index="3"]
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
index 3306940..6398cb7 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
@@ -133,6 +133,23 @@
public bool VerticalMotion { get; private set; } = true;
///
+ /// 是否启用碰撞器
+ ///
+ [Export]
+ public bool CollisionEnabled
+ {
+ get => _collisionEnabled;
+ set
+ {
+ _collisionEnabled = value;
+ if (_activityObject != null)
+ {
+ _activityObject.Collision.Disabled = !value;
+ }
+ }
+ }
+
+ ///
/// 编辑器属性, 物体子碰撞器在编辑器中是否可见
///
[Export]
@@ -157,6 +174,7 @@
private float _altitude;
private int _spriteZIndex = 0;
private int _shadowZIndex = -1;
+ private bool _collisionEnabled = true;
private Vector2 _collPos;
private bool _createFlag = false;
@@ -287,12 +305,14 @@
activityObject.AnimatedSprite.ZIndex = _spriteZIndex;
activityObject.ShadowSprite.ZIndex = _shadowZIndex;
activityObject.EnableVerticalMotion = VerticalMotion;
+ activityObject.Collision.Disabled = !_collisionEnabled;
if (!_isNested)
{
activityObject.PutDown(DefaultLayer, _showShadow);
}
else
{
+ activityObject.DefaultLayer = DefaultLayer;
activityObject.ShowShadowSprite();
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index e5b5a58..7b4d69c 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -450,7 +450,7 @@
}
IsShowShadow = true;
- CalcShadowTransform();
+ CalcShadowTransform(IsInsideTree());
ShadowSprite.Visible = true;
}
@@ -684,7 +684,7 @@
{
//注意需要延时调用
CallDeferred(nameof(ShowShadowSprite));
- CalcShadowTransform();
+ CalcShadowTransform(false);
}
}
else
@@ -1232,7 +1232,7 @@
if (_freezeSprite == null || !_freezeSprite.IsFrozen)
{
//计算阴影
- CalcShadowTransform();
+ CalcShadowTransform(true);
}
}
@@ -1344,7 +1344,7 @@
///
/// 重新计算物体阴影的位置和旋转信息, 无论是否显示阴影
///
- public void CalcShadowTransform()
+ public void CalcShadowTransform(bool isInTree)
{
//偏移
if (!IsCustomShadowSprite)
@@ -1357,8 +1357,16 @@
//阴影角度
ShadowSprite.Rotation = 0;
//阴影位置计算
- var pos = AnimatedSprite.GlobalPosition;
- ShadowSprite.GlobalPosition = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude);
+ if (isInTree)
+ {
+ var pos = AnimatedSprite.GlobalPosition;
+ ShadowSprite.GlobalPosition = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude);
+ }
+ else
+ {
+ var pos = AnimatedSprite.Position;
+ ShadowSprite.Position = new Vector2(pos.X + ShadowOffset.X, pos.Y + ShadowOffset.Y + Altitude);
+ }
}
///
diff --git a/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs
index 57f7b88..29d22f1 100644
--- a/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs
@@ -30,7 +30,7 @@
MountPoint.Position = p3;
//重新计算武器阴影位置
var activeItem = WeaponPack.ActiveItem;
- activeItem.CalcShadowTransform();
+ activeItem.CalcShadowTransform(true);
//创建屏幕抖动
if (Face == FaceDirection.Right)
{