diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon.tscn index be0e85f..1af3403 100644 --- a/DungeonShooting_Godot/prefab/weapon/Weapon.tscn +++ b/DungeonShooting_Godot/prefab/weapon/Weapon.tscn @@ -58,6 +58,7 @@ [node name="Weapon" type="Node"] script = ExtResource("1_dtam7") +collision_layer = 4 [node name="ShadowSprite" type="Sprite2D" parent="."] z_index = -1 @@ -71,6 +72,7 @@ [node name="WeaponBody" type="Area2D" parent="."] collision_layer = 4 collision_mask = 0 +monitoring = false [node name="OriginPoint" type="Marker2D" parent="WeaponBody"] position = Vector2(-3.6, -1.1) diff --git a/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn b/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn index d506a80..7f1d347 100644 --- a/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn +++ b/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn @@ -35,6 +35,7 @@ [node name="Bullet" type="Node"] script = ExtResource("1_nwypj") +collision_layer = 2 collision_mask = 1 [node name="ShadowSprite" type="Sprite2D" parent="."] diff --git a/DungeonShooting_Godot/scene/Room.tscn b/DungeonShooting_Godot/scene/Room.tscn index 6895ccf..e19b7e3 100644 --- a/DungeonShooting_Godot/scene/Room.tscn +++ b/DungeonShooting_Godot/scene/Room.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=7 format=3 uid="uid://bqf2vks5ggnsp"] +[gd_scene load_steps=9 format=3 uid="uid://bqf2vks5ggnsp"] [ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1"] [ext_resource type="Script" path="res://src/game/room/RoomManager.cs" id="1_3w1c7"] +[ext_resource type="Texture2D" uid="uid://uhhfgdhpk7i4" path="res://icon.png" id="4_lomny"] [ext_resource type="Script" path="res://src/game/camera/GameCamera.cs" id="5"] [sub_resource type="Environment" id="Environment_ji6mi"] @@ -565,6 +566,9 @@ physics_layer_0/collision_mask = 0 sources/1 = SubResource("TileSetAtlasSource_rkmbu") +[sub_resource type="RectangleShape2D" id="RectangleShape2D_h2s2y"] +size = Vector2(64, 64) + [node name="Room" type="Node2D" node_paths=PackedStringArray("NormalLayer", "YSortLayer", "TileRoot")] script = ExtResource("1_3w1c7") NormalLayer = NodePath("NormalLayer") @@ -613,5 +617,29 @@ [node name="NormalLayer" type="Node2D" parent="."] z_index = -1 +[node name="CharacterBody2D" type="CharacterBody2D" parent="NormalLayer"] +position = Vector2(178, 165) +collision_layer = 4 +collision_mask = 0 +motion_mode = 1 + +[node name="Sprite2D" type="Sprite2D" parent="NormalLayer/CharacterBody2D"] +texture = ExtResource("4_lomny") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="NormalLayer/CharacterBody2D"] +shape = SubResource("RectangleShape2D_h2s2y") + +[node name="CharacterBody2D2" type="CharacterBody2D" parent="NormalLayer"] +position = Vector2(178, 165) +collision_layer = 4 +collision_mask = 0 +motion_mode = 1 + +[node name="Sprite2D" type="Sprite2D" parent="NormalLayer/CharacterBody2D2"] +texture = ExtResource("4_lomny") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="NormalLayer/CharacterBody2D2"] +shape = SubResource("RectangleShape2D_h2s2y") + [node name="YSortLayer" type="Node2D" parent="."] y_sort_enabled = true diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs index 6cfe99e..1a4ef2f 100644 --- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs +++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs @@ -104,24 +104,17 @@ //初始化节点 private void _InitNode(string itemId, string scenePath) { - ItemId = itemId; - Name = GetType().Name + (_instanceIndex++); //加载预制体 var tempPrefab = ResourceManager.Load(scenePath); if (tempPrefab == null) { throw new Exception("创建 ActivityObject 没有找到指定挂载的预制体: " + scenePath); } - - _templateInstance = tempPrefab.Instantiate(); - ZIndex = _templateInstance.z_index; - CollisionLayer = _templateInstance.collision_layer; - CollisionMask = _templateInstance.collision_mask; - Scale = _templateInstance.scale; - Visible = _templateInstance.visible; - - MotionMode = MotionModeEnum.Floating; + ItemId = itemId; + Name = GetType().Name + (_instanceIndex++); + + _templateInstance = tempPrefab.Instantiate(); //移动子节点 var count = _templateInstance.GetChildCount(); for (int i = 0; i < count; i++) @@ -145,6 +138,14 @@ } } + ZIndex = _templateInstance.z_index; + CollisionLayer = _templateInstance.collision_layer; + CollisionMask = _templateInstance.collision_mask; + Scale = _templateInstance.scale; + Visible = _templateInstance.visible; + + MotionMode = MotionModeEnum.Floating; + MoveController = AddComponent(); //tempNode.CallDeferred(Node.MethodName.QueueFree); } diff --git a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs index 816fd60..ce0f009 100644 --- a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs +++ b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs @@ -44,11 +44,17 @@ Monitoring = true; Monitorable = false; CollisionLayer = PhysicsLayer.None; - CollisionMask = PhysicsLayer.Props | PhysicsLayer.Player | PhysicsLayer.Enemy; + CollisionMask = PhysicsLayer.Props | PhysicsLayer.Player | PhysicsLayer.Bullet; - BodyEntered += body => + BodyEntered += OnBodyEntered; + } + + private void OnBodyEntered(Node2D body) + { + GD.Print("有物体进入: " + body.Name); + if (body is CharacterBody2D characterBody) { - GD.Print("有物体进入: " + body.Name); - }; + GD.Print("layer: " + characterBody.CollisionLayer); + } } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/room/RoomManager.cs b/DungeonShooting_Godot/src/game/room/RoomManager.cs index 47f35be..7f3a31a 100644 --- a/DungeonShooting_Godot/src/game/room/RoomManager.cs +++ b/DungeonShooting_Godot/src/game/room/RoomManager.cs @@ -85,6 +85,8 @@ // Player.PickUpWeapon(ActivityObject.Create(ActivityIdPrefix.Weapon + "0004")); Player.PickUpWeapon(ActivityObject.Create(ActivityIdPrefix.Weapon + "0003")); + ActivityObject.Create(ActivityIdPrefix.Weapon + "0001").PutDown(new Vector2(35, 35), RoomLayerEnum.YSortLayer); + //相机跟随玩家 GameCamera.Main.SetFollowTarget(Player);