Forum begins after the advertisement:
When an enemy is killed using a clock lancet, XPGEM does not disappear
Home › Forums › Video Game Tutorial Series › Creating a Rogue-like Shoot-em Up in Unity › When an enemy is killed using a clock lancet, XPGEM does not disappear
- This topic has 4 replies, 2 voices, and was last updated 1 month, 2 weeks ago by Terence.
-
AuthorPosts
-
October 1, 2024 at 3:49 am #15939::
When an enemy is killed using a clock lancet, XPGEM does not disappear.
When I used another weapon to kill the enemy, I confirmed that the XPGEM was normally absorbed and disappeared.
Have you ever experienced a similar phenomenon?IceBeam is Clock Lancet in My Project.
using UnityEngine; public class IceBeamWeapon : ProjectileWeapon { public const int NUMBER_OF_ANGLES = 12; protected float currentAngle = 90; protected static float turnAngle = -360f / NUMBER_OF_ANGLES; protected override bool Attack(int attackCount = 1) { if (base.Attack(1)) { currentAngle += turnAngle; if(Mathf.Abs(currentAngle) > 180f) currentAngle = -Mathf.Sign(currentAngle) * (360f - Mathf.Abs(currentAngle)); return true; } return false; } protected override float GetSpawnAngle() { return currentAngle; } }
PickUp.cs
using UnityEngine; public class Pickup : Sortable { public float lifespan = 0.5f; protected PlayerStats target; // If the pickup has a target, then fly towards the target. protected float speed; // The speed at which the pickup travels. Vector2 initialPosition; float initialOffset; // To represent the bobbing animation of the object. [System.Serializable] public struct BobbingAnimation { public float frequency; public Vector2 direction; } public BobbingAnimation bobbingAnimation = new BobbingAnimation { frequency = 2f, direction = new Vector2(0, 0.3f) }; [Header("Bonuses")] public int experience; public int health; protected override void Start() { base.Start(); initialPosition = transform.position; initialOffset = Random.Range(0, bobbingAnimation.frequency); } protected virtual void Update() { if (target) { Vector2 distance = target.transform.position - transform.position; if (distance.sqrMagnitude > speed * speed * Time.deltaTime) transform.position += (Vector3)distance.normalized * speed * Time.deltaTime; else Destroy(gameObject); } else { transform.position = initialPosition + bobbingAnimation.direction * Mathf.Sin((Time.time + initialOffset) * bobbingAnimation.frequency); } } public virtual bool Collect(PlayerStats target, float speed, float lifespan = 0f) { if(!this.target) { this.target = target; this.speed = speed; if(lifespan > 0) this.lifespan = lifespan; Destroy(gameObject, Mathf.Max(0.01f, this.lifespan)); return true; } return false; } protected virtual void OnDestroy() { if (!target) return; if(experience != 0) target.IncreaseExperince(experience); if(health != 0) target.RestoreHealth(health); } }
October 1, 2024 at 10:56 pm #15942::The only times
DropRateManager
will not spawn a drop is when theactive
property is disabled, or when a scene is not finished loading.using System.Collections; using System.Collections.Generic; using UnityEngine; public class DropRateManager : MonoBehaviour { [System.Serializable] //Serialize the class public class Drops { public string name; public GameObject itemPrefab; public float dropRate; } public bool active = false; public List<Drops> drops; void OnDestroy() { if (!active) return; if (!gameObject.scene.isLoaded) //Stops the spawning error from appearing when stopping play mode { return; } float randomNumber = UnityEngine.Random.Range(0f, 100f); List<Drops> possibleDrops = new List<Drops>(); foreach (Drops rate in drops) { if (randomNumber <= rate.dropRate) { possibleDrops.Add(rate); } } //Check if there are possible drops if (possibleDrops.Count > 0) { Drops drops = possibleDrops[UnityEngine.Random.Range(0, possibleDrops.Count)]; Instantiate(drops.itemPrefab, transform.position, Quaternion.identity); } } }
You might want to pause the game and check the DropRateManager component on your frozen enemies and see if any of the properties are modified when they are frozen.
October 1, 2024 at 11:14 pm #15943::List<Drops> possibleDrops = new List();
Assets\02. Scripts\DropRateManager.cs(28,41): error CS0305: Using the generic type ‘List<T>’ requires 1 type arguments
List<Drops> possibleDrops = new List<Drops>();
Is it Right?
October 1, 2024 at 11:45 pm #15944::I think it’s a pretty bad situation. I can’t find any particular difference. I need to check more.
October 3, 2024 at 7:13 pm #15952 -
AuthorPosts
- You must be logged in to reply to this topic.
Advertisement below: