攻击范围
This commit is contained in:
parent
cd7f839004
commit
45c00a5584
@ -12,7 +12,7 @@ public class Attack : MonoBehaviour
|
|||||||
[Header("子弹预制体")] public GameObject bulletPrefab;
|
[Header("子弹预制体")] public GameObject bulletPrefab;
|
||||||
[Header("子弹数据")] public BulletData bulletData;
|
[Header("子弹数据")] public BulletData bulletData;
|
||||||
[Header("角色对象")] public Role role;
|
[Header("角色对象")] public Role role;
|
||||||
[Header("攻击范围")] public float attackScope;
|
//[Header("攻击范围")] public float attackScope;
|
||||||
[Header("攻击类型")] public DamageType damageTyp = DamageType.noAttributeDamage;
|
[Header("攻击类型")] public DamageType damageTyp = DamageType.noAttributeDamage;
|
||||||
|
|
||||||
[Header("攻击CD时间")] public float attackCooldown = 1f; // 攻击冷却时间
|
[Header("攻击CD时间")] public float attackCooldown = 1f; // 攻击冷却时间
|
||||||
@ -31,41 +31,44 @@ public class Attack : MonoBehaviour
|
|||||||
|
|
||||||
[Header("子弹速度加成")]public float roleBulletSpeedAdd=0f;
|
[Header("子弹速度加成")]public float roleBulletSpeedAdd=0f;
|
||||||
[Header("子弹数量")] public int BulletNumber = 1;
|
[Header("子弹数量")] public int BulletNumber = 1;
|
||||||
public float AttackScope
|
[Header("攻击碰撞体")] public CircleCollider2D attackCollider;
|
||||||
{
|
[Header("攻击范围图片")] public SpriteRenderer attackRangeSprite;
|
||||||
[DebuggerStepThrough]
|
//public float AttackScope
|
||||||
get => attackScope;
|
//{
|
||||||
[DebuggerStepThrough]
|
// [DebuggerStepThrough]
|
||||||
set
|
// get => attackScope;
|
||||||
{
|
// [DebuggerStepThrough]
|
||||||
attackScope = value;
|
// set
|
||||||
GetComponent<CircleCollider2D>().radius = attackScope;
|
// {
|
||||||
//Debug.Log("攻击半径"+GetComponent<CircleCollider2D>().radius);
|
// attackScope = value;
|
||||||
}
|
// GetComponent<CircleCollider2D>().radius = attackScope;
|
||||||
}
|
// //Debug.Log("攻击半径"+GetComponent<CircleCollider2D>().radius);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
public async void Start()
|
public async void Start()
|
||||||
{
|
{
|
||||||
AttackScope = attackScope;
|
//AttackScope = attackScope;
|
||||||
bulletData = new BulletData();
|
bulletData = new BulletData();
|
||||||
bulletData.BulletScattering = 1;
|
bulletData.BulletScattering = 1;
|
||||||
animator.SetFloat("AttackSpeed",AttackSpeed);
|
animator.SetFloat("AttackSpeed",AttackSpeed);
|
||||||
|
|
||||||
CircleCollider2D circleCollider2D = GetComponent<CircleCollider2D>();
|
//CircleCollider2D circleCollider2D = GetComponent<CircleCollider2D>();
|
||||||
|
|
||||||
|
|
||||||
attackCooldown = transform.parent.GetComponent<enemy>().AttackCD;
|
attackCooldown = transform.parent.GetComponent<enemy>().AttackCD;
|
||||||
|
|
||||||
|
SetAttackRange();//设置攻击范围
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (circleCollider2D)
|
if (attackCollider)
|
||||||
{
|
{
|
||||||
|
|
||||||
// 检查是否可以进行攻击(基于冷却时间)
|
// 检查是否可以进行攻击(基于冷却时间)
|
||||||
if (Time.time - lastAttackTime >= attackCooldown)
|
if (Time.time - lastAttackTime >= attackCooldown)
|
||||||
{
|
{
|
||||||
Collider2D[] colliders = Physics2D.OverlapCircleAll(circleCollider2D.transform.position, attackScope);
|
Collider2D[] colliders = Physics2D.OverlapCircleAll(attackCollider.transform.position, attackCollider.radius);
|
||||||
|
|
||||||
foreach (Collider2D collider in colliders)
|
foreach (Collider2D collider in colliders)
|
||||||
{
|
{
|
||||||
@ -226,15 +229,11 @@ private void GenerateBullet(float angle, Vector2 startPos, Vector2 changePos)//
|
|||||||
fireAnis.Add(bulletGameObj.GetComponentInChildren<Animator>());
|
fireAnis.Add(bulletGameObj.GetComponentInChildren<Animator>());
|
||||||
|
|
||||||
// 设置子弹的初始位置,保持偏移量
|
// 设置子弹的初始位置,保持偏移量
|
||||||
bulletGameObj.transform.position = new Vector2(transform.position.x + 0.15f, transform.position.y + 0.2f);
|
bulletGameObj.transform.position = new Vector2(transform.position.x+1.75f, transform.position.y + 0.2f);
|
||||||
|
|
||||||
// 设置子弹的角色和攻击者
|
bulletGameObj.GetComponent<Bullet>().role = role;
|
||||||
Bullet bulletComponent = bulletGameObj.GetComponent<Bullet>();
|
bulletGameObj.GetComponent<Bullet>().attackObj = this;
|
||||||
if (bulletComponent != null)
|
|
||||||
{
|
|
||||||
bulletComponent.role = role;
|
|
||||||
bulletComponent.attackObj = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算子弹相对于旋转中心的偏移
|
// 计算子弹相对于旋转中心的偏移
|
||||||
Vector2 direction = bulletGameObj.transform.position - (Vector3)startPos;
|
Vector2 direction = bulletGameObj.transform.position - (Vector3)startPos;
|
||||||
@ -271,6 +270,21 @@ private void GenerateBullet(float angle, Vector2 startPos, Vector2 changePos)//
|
|||||||
bulltes.Clear();
|
bulltes.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetAttackRange()
|
||||||
|
{
|
||||||
|
// 设置碰撞体的半径
|
||||||
|
attackCollider.radius = role.AttackRange;
|
||||||
|
|
||||||
|
|
||||||
|
// 获取攻击范围图片的原始直径 (SpriteRenderer的bounds.size.x)
|
||||||
|
float spriteDiameter = attackRangeSprite.bounds.size.x;
|
||||||
|
|
||||||
|
// 计算缩放因子,使得图片的直径与碰撞体的直径匹配
|
||||||
|
float scaleFactor = role.AttackRange * 2f / spriteDiameter; // * 2f 因为 radius 是半径,图片的尺寸通常是直径
|
||||||
|
|
||||||
|
// 设置图片的缩放
|
||||||
|
attackRangeSprite.transform.localScale = new Vector3(scaleFactor, scaleFactor, 1f);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,7 @@ public class Role : Fun
|
|||||||
public string AttackActionType;//攻击作用类型
|
public string AttackActionType;//攻击作用类型
|
||||||
|
|
||||||
public float AttackRange;//攻击范围
|
public float AttackRange;//攻击范围
|
||||||
|
|
||||||
public float AttackCD;//攻击CD
|
public float AttackCD;//攻击CD
|
||||||
public float CritRate;//暴击率
|
public float CritRate;//暴击率
|
||||||
public float CriticalHitRateBonus;//暴击加成
|
public float CriticalHitRateBonus;//暴击加成
|
||||||
@ -191,7 +192,7 @@ public class Role : Fun
|
|||||||
|
|
||||||
maxHp = hp;
|
maxHp = hp;
|
||||||
SetSelfInfo();
|
SetSelfInfo();
|
||||||
|
//SetAttackRange();//ÉèÖù¥»÷·¶Î§
|
||||||
if (Application.isPlaying)
|
if (Application.isPlaying)
|
||||||
{
|
{
|
||||||
if (attackClass)
|
if (attackClass)
|
||||||
@ -202,6 +203,7 @@ public class Role : Fun
|
|||||||
}
|
}
|
||||||
tag = Enum.GetName(typeof(Camp), camp);
|
tag = Enum.GetName(typeof(Camp), camp);
|
||||||
updateAnimation();
|
updateAnimation();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -542,6 +544,6 @@ public class Role : Fun
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user