Remove enemy on many hits, multiple rocket hits
Also added an object pool limit but buffing the rockets seemed to be better
This commit is contained in:
parent
d2750bd344
commit
eef0a307d0
6 changed files with 132 additions and 11 deletions
|
@ -146,3 +146,4 @@ MonoBehaviour:
|
||||||
target: {fileID: 0}
|
target: {fileID: 0}
|
||||||
speed: 6.5
|
speed: 6.5
|
||||||
flyForce: 30
|
flyForce: 30
|
||||||
|
finalHealth: 3
|
||||||
|
|
|
@ -121,6 +121,87 @@ NavMeshSettings:
|
||||||
debug:
|
debug:
|
||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_NavMeshData: {fileID: 0}
|
m_NavMeshData: {fileID: 0}
|
||||||
|
--- !u!1 &416234157
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 416234159}
|
||||||
|
- component: {fileID: 416234158}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: cloudLayer1
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!212 &416234158
|
||||||
|
SpriteRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 416234157}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 0
|
||||||
|
m_ReceiveShadows: 0
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 0
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
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: 0
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 1324642093
|
||||||
|
m_SortingLayer: -3
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_Sprite: {fileID: 21300000, guid: 8039604243b9466ab89d4474e2290aed, type: 3}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_FlipX: 0
|
||||||
|
m_FlipY: 0
|
||||||
|
m_DrawMode: 0
|
||||||
|
m_Size: {x: 10.24, y: 4}
|
||||||
|
m_AdaptiveModeThreshold: 0.5
|
||||||
|
m_SpriteTileMode: 0
|
||||||
|
m_WasSpriteAssigned: 1
|
||||||
|
m_MaskInteraction: 0
|
||||||
|
m_SpriteSortPoint: 0
|
||||||
|
--- !u!4 &416234159
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 416234157}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -5.46, y: 3.54, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 6
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &996257474
|
--- !u!1 &996257474
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -419,9 +500,9 @@ SpriteRenderer:
|
||||||
m_LightmapParameters: {fileID: 0}
|
m_LightmapParameters: {fileID: 0}
|
||||||
m_SortingLayerID: 1324642093
|
m_SortingLayerID: 1324642093
|
||||||
m_SortingLayer: -3
|
m_SortingLayer: -3
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 1
|
||||||
m_Sprite: {fileID: 21300000, guid: 945baed7357a5d9c69e6f65181575af1, type: 3}
|
m_Sprite: {fileID: 21300000, guid: 945baed7357a5d9c69e6f65181575af1, type: 3}
|
||||||
m_Color: {r: 0, g: 0.5, b: 0.06972909, a: 1}
|
m_Color: {r: 0.5707547, g: 1, b: 0.63111734, a: 1}
|
||||||
m_FlipX: 0
|
m_FlipX: 0
|
||||||
m_FlipY: 0
|
m_FlipY: 0
|
||||||
m_DrawMode: 0
|
m_DrawMode: 0
|
||||||
|
@ -820,7 +901,7 @@ MonoBehaviour:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
spawnPos: {fileID: 1692511764}
|
spawnPos: {fileID: 1692511764}
|
||||||
timeBetweenSpawns: 2
|
timeBetweenSpawns: 2
|
||||||
maxEnemyCount: 3
|
maxEnemyCount: 6
|
||||||
enemyPrefab: {fileID: 7250562544566202694, guid: ef6e23d6fe1e28e8c809679081854c6a,
|
enemyPrefab: {fileID: 7250562544566202694, guid: ef6e23d6fe1e28e8c809679081854c6a,
|
||||||
type: 3}
|
type: 3}
|
||||||
target: {fileID: 2053847422}
|
target: {fileID: 2053847422}
|
||||||
|
|
|
@ -1,13 +1,18 @@
|
||||||
using System.Collections;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using Random = System.Random;
|
||||||
|
|
||||||
public class EnemyController : MonoBehaviour
|
public class EnemyController : MonoBehaviour
|
||||||
{
|
{
|
||||||
public Transform target;
|
public Transform target;
|
||||||
public float speed;
|
public float speed;
|
||||||
public float flyForce;
|
public float flyForce;
|
||||||
|
public short finalHealth = 3;
|
||||||
private Rigidbody2D _rb;
|
private Rigidbody2D _rb;
|
||||||
|
private short _hitsToRemove;
|
||||||
|
private Random _random = new Random();
|
||||||
|
|
||||||
// Start is called before the first frame update
|
// Start is called before the first frame update
|
||||||
void Start()
|
void Start()
|
||||||
|
@ -15,6 +20,11 @@ public class EnemyController : MonoBehaviour
|
||||||
_rb = GetComponent<Rigidbody2D>();
|
_rb = GetComponent<Rigidbody2D>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
_hitsToRemove = finalHealth;
|
||||||
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
void FixedUpdate()
|
void FixedUpdate()
|
||||||
{
|
{
|
||||||
|
@ -33,7 +43,8 @@ public class EnemyController : MonoBehaviour
|
||||||
}
|
}
|
||||||
|
|
||||||
diff.Normalize();
|
diff.Normalize();
|
||||||
_rb.AddForce(diff * (speed * _rb.mass * _rb.gravityScale));
|
float sp = ((float) _random.NextDouble() / 2f + 1f) * speed; //1 és 1.5 közötti szorzó
|
||||||
|
_rb.AddForce(diff * (sp * _rb.mass * _rb.gravityScale));
|
||||||
if (diff.x * transform.localScale.x < 0) //Ha másfelé néz, mint amerre megy
|
if (diff.x * transform.localScale.x < 0) //Ha másfelé néz, mint amerre megy
|
||||||
{
|
{
|
||||||
var scale = tr.localScale;
|
var scale = tr.localScale;
|
||||||
|
@ -42,7 +53,7 @@ public class EnemyController : MonoBehaviour
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Die()
|
private void Die()
|
||||||
{
|
{
|
||||||
_rb.mass = 0.00001f;
|
_rb.mass = 0.00001f;
|
||||||
_rb.gravityScale = 0.01f;
|
_rb.gravityScale = 0.01f;
|
||||||
|
@ -50,4 +61,22 @@ public class EnemyController : MonoBehaviour
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsAlive() => _rb.mass > 0.001f;
|
public bool IsAlive() => _rb.mass > 0.001f;
|
||||||
|
|
||||||
|
private void HitWhileFlying()
|
||||||
|
{
|
||||||
|
_hitsToRemove--;
|
||||||
|
if (_hitsToRemove == 0)
|
||||||
|
{
|
||||||
|
_rb.velocity = Vector2.zero;
|
||||||
|
gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Hit()
|
||||||
|
{
|
||||||
|
if (IsAlive())
|
||||||
|
Die();
|
||||||
|
else
|
||||||
|
HitWhileFlying();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ public class EnemySpawner : MonoBehaviour
|
||||||
{
|
{
|
||||||
var pos = transform.position + _diff;
|
var pos = transform.position + _diff;
|
||||||
var enemy = _pool.GetObject();
|
var enemy = _pool.GetObject();
|
||||||
|
if (enemy is null) break;
|
||||||
enemy.transform.position = new Vector3(pos.x, spawnPos.position.y, pos.z);
|
enemy.transform.position = new Vector3(pos.x, spawnPos.position.y, pos.z);
|
||||||
var rb = enemy.GetComponent<Rigidbody2D>();
|
var rb = enemy.GetComponent<Rigidbody2D>();
|
||||||
rb.mass = 1f;
|
rb.mass = 1f;
|
||||||
|
|
|
@ -18,9 +18,10 @@ public class ObjectPool
|
||||||
/// Visszaad egy új objektumot. Aktiválandó, használat után pedig deaktiválandó.
|
/// Visszaad egy új objektumot. Aktiválandó, használat után pedig deaktiválandó.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Egy objektum a poolból.</returns>
|
/// <returns>Egy objektum a poolból.</returns>
|
||||||
public GameObject GetObject()
|
public GameObject GetObject(short maxCount = 0)
|
||||||
{
|
{
|
||||||
GameObject theRocket = null;
|
GameObject theRocket = null;
|
||||||
|
int c = 0;
|
||||||
foreach (var rocket in _objects)
|
foreach (var rocket in _objects)
|
||||||
{
|
{
|
||||||
if (!rocket.activeSelf)
|
if (!rocket.activeSelf)
|
||||||
|
@ -28,6 +29,10 @@ public class ObjectPool
|
||||||
theRocket = rocket;
|
theRocket = rocket;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
if (c == maxCount)
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (theRocket is null)
|
if (theRocket is null)
|
||||||
|
|
|
@ -8,6 +8,9 @@ public class RocketScript : MonoBehaviour
|
||||||
private float _fired;
|
private float _fired;
|
||||||
private Rigidbody2D _rb;
|
private Rigidbody2D _rb;
|
||||||
private bool _goingRight;
|
private bool _goingRight;
|
||||||
|
private byte _hitCount;
|
||||||
|
|
||||||
|
public byte maxHits = 3;
|
||||||
|
|
||||||
// Start is called before the first frame update
|
// Start is called before the first frame update
|
||||||
void Start()
|
void Start()
|
||||||
|
@ -19,6 +22,7 @@ public class RocketScript : MonoBehaviour
|
||||||
{
|
{
|
||||||
_fired = Time.fixedTime;
|
_fired = Time.fixedTime;
|
||||||
_goingRight = transform.localScale.x > 0;
|
_goingRight = transform.localScale.x > 0;
|
||||||
|
_hitCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
|
@ -38,11 +42,11 @@ public class RocketScript : MonoBehaviour
|
||||||
{
|
{
|
||||||
if (!other.gameObject.CompareTag("Enemy"))
|
if (!other.gameObject.CompareTag("Enemy"))
|
||||||
return;
|
return;
|
||||||
gameObject.SetActive(false);
|
if (_hitCount >= maxHits)
|
||||||
|
gameObject.SetActive(false);
|
||||||
_rb.velocity = Vector2.zero;
|
_rb.velocity = Vector2.zero;
|
||||||
//other.gameObject.SetActive(false);
|
|
||||||
var ec = other.gameObject.GetComponent<EnemyController>();
|
var ec = other.gameObject.GetComponent<EnemyController>();
|
||||||
if (ec.IsAlive())
|
ec.Hit();
|
||||||
ec.Die();
|
_hitCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue