public override void OnCollision(FieldInstance instance) { base.OnCollision(instance); if (objectProjectile.ExplosionVFX > 0) { Vector2 offset = Rect.point - instance.Rect.point; if (instance.ToLeft) { offset.x -= instance.Rect.width / 2; } else { offset.x += instance.Rect.width / 2; } offset.y += Rect.height / 2; Vector3 offset3d = offset; offset3d.z = -0.5f; ResourceVFX effect = TableLoader.GetTable<ResourceVFX>().Get(objectProjectile.ExplosionVFX); GameObject child = RecycleManager.Instance.Instantiate(effect.Resource); instance.AttachChild(child, "BC", offset3d); } if (objectProjectile.ImpactType == E_ImpactType.Destroy) { Remove(); } else { float speedX = Mathf.Abs(Velocity.x); float velY = Velocity.y; float speedReductionRatio = Random.Range(objectProjectile.MinimumSpeedReduction, objectProjectile.MaximumSpeedReduction); float bounceSpeedRatio = Mathf.Max(0, 1 - speedReductionRatio); var movement = VectorGenerator.Custom(speedX * bounceSpeedRatio, velY * bounceSpeedRatio, objectProjectile.FallingGravity, !ToLeft); if (!instance.IsMovementPaused()) { Vector2 targetVel = instance.Velocity; if (targetVel != Vector2.zero) { movement.Add(new LinearVelocity(targetVel)); } } SetMove(movement); ChangeMotion("bounce"); } }