using System; using System.Collections; using System.Collections.Generic; using DragonLi.Frame; using UnityEngine; using Random = UnityEngine.Random; public enum PlayerWeaponType { PlayerWeapon1=1, PlayerWeapon2=2, PlayerWeapon3=3, PlayerWeapon4=4, PlayerWeapon5=5, PlayerWeapon6=6, PlayerWeapon7=7, PlayerWeapon8=8, PlayerWeapon9=9, PlayerWeapon10=10, } public class PlayerBullet : MonoBehaviour { public PlayerWeaponType bulletType; private int[] _damages;//伤害 public LayerMask layerMask = ~0; public Vector3 fixedDirection; // ← 用来存储“第一次”拿到的枪口方向 public Vector3 fixedOrigin; // ← 用来存储“第一次”拿到的枪口位置 public Transform fixedTransform; /// /// 在外层(Spawn Laser 的地方)调用,用来把 muzzle.forward/muzzle.position 传进来。 /// public virtual void Initialize(Vector3 origin, Vector3 direction,Transform curFixedTransform) { fixedOrigin = origin; fixedDirection = direction.normalized; fixedTransform = curFixedTransform; // 我们还可以把 laser.SetPosition(0, origin) 等放到这里 } private void Awake() { layerMask=LayerMask.GetMask("Enemy","Wall","Ground"); } public virtual void AttackDamage(RaycastHit handlingHit) { IDamagable component = handlingHit.transform.GetComponent(); if (component != null) { int randomDamage = GetDamage(out var isCriticalHit); component.ApplyDamage(randomDamage, isCriticalHit, transform); } } public int GetDamage(out bool isCriticalHit) { if(GameManager.Ins.PlayerBulletDataDic.Count>0) _damages = GameManager.Ins.PlayerBulletDataDic[(int)bulletType].Damage; int randomDamage = Random.Range(_damages[0], _damages[1]); randomDamage += (Mathf.FloorToInt(GameManager.Ins.buffAtk * randomDamage)); isCriticalHit=randomDamage > (_damages[1] - (_damages[1] - _damages[0]) * 0.35f); return randomDamage; } }