From 1b106e4e183713af73b02ff8808e081ef7ac6b1b Mon Sep 17 00:00:00 2001 From: KOSMOGOR Date: Fri, 25 Apr 2025 14:47:48 +0300 Subject: [PATCH] add: EyeEnemy proper functionality --- Assets/Prefabs/Enemies/EnemyBullet.prefab | 154 ++++++++++++++++++ .../Prefabs/Enemies/EnemyBullet.prefab.meta | 7 + Assets/Prefabs/Enemies/Eye_Enemy1.prefab | 18 +- Assets/Prefabs/Player.prefab | 2 +- Assets/Prefabs/{ => Weapons}/Bullet.prefab | 0 .../Prefabs/{ => Weapons}/Bullet.prefab.meta | 0 Assets/Scenes/Level1.unity | 16 ++ .../Scripts/Enemies/EnemyBulletProjectile.cs | 30 ++++ .../Enemies/EnemyBulletProjectile.cs.meta | 2 + Assets/Scripts/Enemies/EyeEnemy.cs | 24 ++- Assets/Scripts/Game/DeployController.cs | 2 +- Assets/Scripts/Player/GroundDetector.cs | 2 + 12 files changed, 249 insertions(+), 8 deletions(-) create mode 100644 Assets/Prefabs/Enemies/EnemyBullet.prefab create mode 100644 Assets/Prefabs/Enemies/EnemyBullet.prefab.meta rename Assets/Prefabs/{ => Weapons}/Bullet.prefab (100%) rename Assets/Prefabs/{ => Weapons}/Bullet.prefab.meta (100%) create mode 100644 Assets/Scripts/Enemies/EnemyBulletProjectile.cs create mode 100644 Assets/Scripts/Enemies/EnemyBulletProjectile.cs.meta diff --git a/Assets/Prefabs/Enemies/EnemyBullet.prefab b/Assets/Prefabs/Enemies/EnemyBullet.prefab new file mode 100644 index 0000000..34a2dd5 --- /dev/null +++ b/Assets/Prefabs/Enemies/EnemyBullet.prefab @@ -0,0 +1,154 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1562924000103655330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2987293529414042391} + - component: {fileID: 3266538827119481022} + - component: {fileID: 3277822925141770390} + - component: {fileID: -8958570174584186611} + - component: {fileID: 8393546946202406891} + - component: {fileID: 9210136651646905660} + m_Layer: 0 + m_Name: EnemyBullet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2987293529414042391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1562924000103655330} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.2} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3266538827119481022 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1562924000103655330} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3277822925141770390 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1562924000103655330} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7ced48a396ccf7045919ead8355ab8c6, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!54 &-8958570174584186611 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1562924000103655330} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 2 +--- !u!135 &8393546946202406891 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1562924000103655330} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &9210136651646905660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1562924000103655330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8d7536bbb5cbf394b8ec742b12cb0b87, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 5 + damage: 1 + timeToLive: 5 diff --git a/Assets/Prefabs/Enemies/EnemyBullet.prefab.meta b/Assets/Prefabs/Enemies/EnemyBullet.prefab.meta new file mode 100644 index 0000000..e269fda --- /dev/null +++ b/Assets/Prefabs/Enemies/EnemyBullet.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6a9f72b16f60d5047974eb5893b0326a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Enemies/Eye_Enemy1.prefab b/Assets/Prefabs/Enemies/Eye_Enemy1.prefab index 2fddd51..699e474 100644 --- a/Assets/Prefabs/Enemies/Eye_Enemy1.prefab +++ b/Assets/Prefabs/Enemies/Eye_Enemy1.prefab @@ -80,7 +80,7 @@ PrefabInstance: addedObject: {fileID: 4157182199899525086} - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 81be7b02df0db07479a8e1a9dd56f618, type: 3} insertIndex: -1 - addedObject: {fileID: -3280827978807638765} + addedObject: {fileID: 285488036582896095} m_SourcePrefab: {fileID: 100100000, guid: 81be7b02df0db07479a8e1a9dd56f618, type: 3} --- !u!1 &3602081654026665026 stripped GameObject: @@ -137,7 +137,7 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 112 m_CollisionDetection: 0 ---- !u!114 &-3280827978807638765 +--- !u!114 &285488036582896095 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -146,7 +146,19 @@ MonoBehaviour: m_GameObject: {fileID: 3602081654026665026} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 46894d927b8e6654487b876457ca8974, type: 3} + m_Script: {fileID: 11500000, guid: 48cddee1e4d4837418957a7b4e6315c8, type: 3} m_Name: m_EditorClassIdentifier: hp: 100 + projectilePrefab: {fileID: 1562924000103655330, guid: 6a9f72b16f60d5047974eb5893b0326a, type: 3} + projectileSpawnPosition: {fileID: 8051388752729122526} + attackRange: 10 + fireRate: 1 + offsetDistance: 1.5 + currentDelay: 0 + target: {fileID: 0} +--- !u!4 &8051388752729122526 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -3278615484307183667, guid: 81be7b02df0db07479a8e1a9dd56f618, type: 3} + m_PrefabInstance: {fileID: 4412476501240889619} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab index 95eed42..d4bca41 100644 --- a/Assets/Prefabs/Player.prefab +++ b/Assets/Prefabs/Player.prefab @@ -257,7 +257,7 @@ GameObject: - component: {fileID: 3263211181679880648} m_Layer: 0 m_Name: Player - m_TagString: Untagged + m_TagString: Player m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 diff --git a/Assets/Prefabs/Bullet.prefab b/Assets/Prefabs/Weapons/Bullet.prefab similarity index 100% rename from Assets/Prefabs/Bullet.prefab rename to Assets/Prefabs/Weapons/Bullet.prefab diff --git a/Assets/Prefabs/Bullet.prefab.meta b/Assets/Prefabs/Weapons/Bullet.prefab.meta similarity index 100% rename from Assets/Prefabs/Bullet.prefab.meta rename to Assets/Prefabs/Weapons/Bullet.prefab.meta diff --git a/Assets/Scenes/Level1.unity b/Assets/Scenes/Level1.unity index f046bb5..13a322a 100644 --- a/Assets/Scenes/Level1.unity +++ b/Assets/Scenes/Level1.unity @@ -136,6 +136,10 @@ PrefabInstance: propertyPath: m_Name value: Eye_Enemy1 (1) objectReference: {fileID: 0} + - target: {fileID: 3602081654026665026, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4230844338806302456, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} propertyPath: m_LocalPosition.x value: 7 @@ -549,6 +553,10 @@ PrefabInstance: propertyPath: m_Name value: Eye_Enemy1 (3) objectReference: {fileID: 0} + - target: {fileID: 3602081654026665026, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4230844338806302456, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} propertyPath: m_LocalPosition.x value: -7 @@ -779,6 +787,10 @@ PrefabInstance: propertyPath: m_Name value: Eye_Enemy1 (2) objectReference: {fileID: 0} + - target: {fileID: 3602081654026665026, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4230844338806302456, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} propertyPath: m_LocalPosition.x value: 0 @@ -1441,6 +1453,10 @@ PrefabInstance: propertyPath: m_Name value: Eye_Enemy1 objectReference: {fileID: 0} + - target: {fileID: 3602081654026665026, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 4230844338806302456, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3} propertyPath: m_LocalPosition.x value: 0 diff --git a/Assets/Scripts/Enemies/EnemyBulletProjectile.cs b/Assets/Scripts/Enemies/EnemyBulletProjectile.cs new file mode 100644 index 0000000..a97c20e --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyBulletProjectile.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +public class EnemyBulletProjectile : MonoBehaviour +{ + public float speed = 1f; + public float damage = 20f; + public float timeToLive = 5f; + + float currentTime = 0; + + Rigidbody rb; + + void Start() { + rb = GetComponent(); + rb.linearVelocity = transform.forward * speed; + } + + void Update() { + currentTime += Time.deltaTime; + if (currentTime >= timeToLive) Destroy(gameObject); + } + + void OnTriggerEnter(Collider other) { + if (other.gameObject.CompareTag("Player")) { + Player player = other.GetComponent(); + player.DealDamage(damage); + } + Destroy(gameObject); + } +} diff --git a/Assets/Scripts/Enemies/EnemyBulletProjectile.cs.meta b/Assets/Scripts/Enemies/EnemyBulletProjectile.cs.meta new file mode 100644 index 0000000..3ecc76c --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyBulletProjectile.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8d7536bbb5cbf394b8ec742b12cb0b87 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/EyeEnemy.cs b/Assets/Scripts/Enemies/EyeEnemy.cs index 3d20223..bed8e15 100644 --- a/Assets/Scripts/Enemies/EyeEnemy.cs +++ b/Assets/Scripts/Enemies/EyeEnemy.cs @@ -2,13 +2,31 @@ using UnityEngine; public class EyeEnemy : Enemy { - public float _hp = 100; + public GameObject projectilePrefab; + public Transform projectileSpawnPosition; + public float attackRange = 10f; + public float fireRate = 1f; + public float offsetDistance = 1f; + + [SerializeField] float currentDelay = 0; + + [SerializeField] Player target; void Start() { - hp = _hp; + target = FindFirstObjectByType(); } void Update() { - + if (fireRate != 0) currentDelay = Mathf.Clamp(currentDelay += Time.deltaTime, 0, 1 / fireRate); + Vector3 offset = (target.transform.position - projectileSpawnPosition.position).normalized * offsetDistance; + bool doShoot = false; + if (Physics.Raycast(projectileSpawnPosition.position + offset, offset, out RaycastHit hit, attackRange)) { + if (hit.transform.CompareTag("Player")) doShoot = true; + } + if (doShoot && (fireRate == 0 || currentDelay >= 1 / fireRate)) { + GameObject projectile = Instantiate(projectilePrefab, projectileSpawnPosition.position + offset, transform.rotation); + projectile.transform.LookAt(target.transform); + currentDelay = 0; + } } } diff --git a/Assets/Scripts/Game/DeployController.cs b/Assets/Scripts/Game/DeployController.cs index 5fcf31f..9748fdf 100644 --- a/Assets/Scripts/Game/DeployController.cs +++ b/Assets/Scripts/Game/DeployController.cs @@ -4,7 +4,7 @@ using UnityEngine.SceneManagement; public class DeployController : MonoBehaviour { public void Start() { - GameController.SetCursorState(true); + GameController.SetCursorState(false); } public void Deploy(string sceneName) { diff --git a/Assets/Scripts/Player/GroundDetector.cs b/Assets/Scripts/Player/GroundDetector.cs index 83837fc..d77847b 100644 --- a/Assets/Scripts/Player/GroundDetector.cs +++ b/Assets/Scripts/Player/GroundDetector.cs @@ -7,9 +7,11 @@ public class GroundDetector : MonoBehaviour public void OnTriggerEnter(Collider other) { if ((1 << other.gameObject.layer & groundMask) != 0) onGround = true; + // onGround = true; } void OnTriggerStay(Collider other) { OnTriggerEnter(other); } void OnTriggerExit(Collider other) { if ((1 << other.gameObject.layer & groundMask) != 0) onGround = false; + // onGround = false; } }