改了基类

This commit is contained in:
liuliang 2024-12-11 16:51:55 +08:00
parent 0dc89a3bef
commit 3c1f269eb5
5 changed files with 70 additions and 42 deletions

View File

@ -22,19 +22,28 @@ public class Attack : MonoBehaviour
{ {
attackScope = value; attackScope = value;
GetComponent<CircleCollider2D>().radius = attackScope; GetComponent<CircleCollider2D>().radius = attackScope;
//Debug.Log("¹¥»÷°ë¾¶"+GetComponent<CircleCollider2D>().radius);
} }
} }
public async void Start() public async void Start()
{ {
AttackScope = attackScope;
//AttackScope = 5;
bulletData = new BulletData(); bulletData = new BulletData();
bulletData.BulletScattering = 1; bulletData.BulletScattering = 1;
CircleCollider2D circleCollider2D = GetComponent<CircleCollider2D>();
while (true) { while (true) {
CircleCollider2D circleCollider2D = GetComponent<CircleCollider2D>(); //Debug.Log(circleCollider2D.radius);
if (circleCollider2D) if (circleCollider2D)
{ {
Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, circleCollider2D.radius);
Collider2D[] colliders = Physics2D.OverlapCircleAll(circleCollider2D.transform.position, attackScope);
//Debug.Log(circleCollider2D.radius);
foreach (Collider2D collider in colliders) foreach (Collider2D collider in colliders)
{ {
Role targetRole = collider.GetComponent<Role>(); Role targetRole = collider.GetComponent<Role>();
if (targetRole && targetRole.camp != role.camp) if (targetRole && targetRole.camp != role.camp)
{ {
@ -69,16 +78,8 @@ public class Attack : MonoBehaviour
BulletGamobj.GetComponent<Bullet>().attackObj = this ; BulletGamobj.GetComponent<Bullet>().attackObj = this ;
BulletGamobj.transform.up = direction; BulletGamobj.transform.up = direction;
BulletGamobj.transform.position = transform.position; BulletGamobj.transform.position = transform.position;
bulltes.Add(BulletGamobj); bulltes.Add(BulletGamobj);
} }
Debug.Log(bulltes.Count);
//foreach (GameObject bullet in bulltes)
//{
//}
} }
} }

View File

@ -23,6 +23,7 @@ public enum BulletMoveType
PointToDirection PointToDirection
} }
public class BulletData public class BulletData
{ {
[Header("子弹穿透次数")] public int NumberOfBulletPenetrations = 1; [Header("子弹穿透次数")] public int NumberOfBulletPenetrations = 1;
@ -33,9 +34,9 @@ public class BulletData
[Header("子弹连发次数")] public int BulletBurstTimes = 1; [Header("子弹连发次数")] public int BulletBurstTimes = 1;
[Header("子弹连发间隔")] public float BulletBurstInterval ; [Header("子弹连发间隔")] public float BulletBurstInterval ;
[Header("子弹穿透衰减")] public float BulletPenetrationAttenuation = 0.2f; [Header("子弹穿透衰减")] public float BulletPenetrationAttenuation = 0.2f;
[Header("子弹飞行速度")] public float BulletSpeed = 10f; [Header("子弹飞行速度")] public float BulletSpeed = 5f;
[Header("子弹攻击冷却")] public float BulletAttackCooldown = 1f; [Header("子弹攻击冷却")] public float BulletAttackCooldown = 1f;
[Header("子弹伤害")] public float attack = 0; [Header("子弹伤害")] public float attack = 10;
public BulletData() public BulletData()
{ {
@ -63,33 +64,40 @@ public class Bullet : MonoBehaviour
[Header("子弹发射范围对象")] public Attack attackObj; [Header("子弹发射范围对象")] public Attack attackObj;
[Header("子弹类型")]public BulletType myBulletType; [Header("子弹类型")]public BulletType myBulletType;
[Header("攻击类型")]public BulletMoveType bulletMoveType; [Header("攻击类型")]public BulletMoveType bulletMoveType;
[Header("子弹数据")] public BulletData bulletData; [Header("子弹数据")] public BulletData bulletData =new BulletData();
private float timer = 0;
private void Update() private void Update()
{ {
switch (this.bulletMoveType) switch (this.bulletMoveType)
{ {
//更具子弹的移动方式来移动 //更具子弹的移动方式来移动
case BulletMoveType.PeerToPeer: case BulletMoveType.PeerToPeer:
this.gameObject.transform.Translate(Vector3.up); this.gameObject.transform.Translate(Vector3.up * Time.deltaTime * bulletData.BulletSpeed);
break; break;
case BulletMoveType.PointToDirection: case BulletMoveType.PointToDirection:
break; break;
} }
timer += Time.deltaTime;
if (timer>10f)
{
Destroy(this.gameObject);
}
} }
private async void Start()
{
await Task.Delay(1000);
Destroy(gameObject);
}
private void OnTriggerEnter2D(Collider2D collision) private void OnTriggerEnter2D(Collider2D collision)
{ {
Debug.Log("进入检测范围");
Role Crole = collision.gameObject.GetComponent<Role>(); Role Crole = collision.gameObject.GetComponent<Role>();
if(Crole) if(Crole)
{ {
if(Crole.camp!= role.camp) if(Crole.camp!= role.camp)
{ {
Debug.Log("进行攻击计算");
Crole.bloodLoss(new object[] { Crole, role.Attack + bulletData.attack, attackObj.damageTyp, role }); Crole.bloodLoss(new object[] { Crole, role.Attack + bulletData.attack, attackObj.damageTyp, role });
Destroy(this.gameObject);
} }
} }
} }

View File

@ -34,6 +34,7 @@ public enum Camp
[ExecuteInEditMode] [ExecuteInEditMode]
public class Role : Fun public class Role : Fun
{ {
[Header("Id")] public int id;
[Header("ÕóÓª")] public Camp camp ; [Header("ÕóÓª")] public Camp camp ;
[Header("ѪÁ¿")] public float hp = 100f;//ѪÁ¿ [Header("ѪÁ¿")] public float hp = 100f;//ѪÁ¿
public float Hp public float Hp
@ -93,7 +94,7 @@ public class Role : Fun
async void Start() public virtual async void Start()
{ {
if (Application.isPlaying) if (Application.isPlaying)
{ {
@ -204,14 +205,7 @@ public class Role : Fun
} }
// 如果启用 MonoBehaviour则每个固定帧速率的帧都将调用此函数
private void FixedUpdate()
{
//if (!isAnimationPlay)
//{
// updateAnimation();
//}
}

View File

@ -1,41 +1,66 @@
using UnityEngine; using UnityEngine;
using DG.Tweening; // 引入DoTween命名空间 using DG.Tweening;
using UnityEngine.UIElements;
using System.Collections.Generic; // 引入DoTween命名空间
[System.Serializable]
public class waypoints
{
public List<Transform> _waypoints = new List<Transform>();
}
public class SimplePathfindingDoTween : Fun public class SimplePathfindingDoTween : Fun
{ {
public Transform[] waypoints; // 预设的路径点 public waypoints waypoints = new waypoints();// 预设的路径点
public float moveSpeed = 1f; // 控制移动速度的参数(更高值表示更快的速度) public float moveSpeed = 1f; // 控制移动速度的参数(更高值表示更快的速度)
private int currentWaypointIndex = 0; // 当前路径点的索引 private int currentWaypointIndex = 0; // 当前路径点的索引
Vector3 Vector3 = new Vector3();
public void MoveToNextWaypoint(GameObject gameObject) public void MoveToNextWaypoint(GameObject gameObject)
{ {
if (currentWaypointIndex < waypoints.Length) if (currentWaypointIndex < waypoints._waypoints.Count)
{ {
// 获取下一个路径点 // 获取下一个路径点
Transform targetWaypoint = waypoints[currentWaypointIndex]; Transform targetWaypoint = waypoints._waypoints[waypoints._waypoints.Count-1];
// 计算路径点之间的距离 // 计算路径点之间的距离
float distance = Vector3.Distance(gameObject.transform.position, targetWaypoint.position); float distance = Vector3.Distance(gameObject.transform.position, targetWaypoint.position);
// 根据设置的速度计算时间 // 根据设置的速度计算时间
float timeToReach = distance / moveSpeed; // 根据速度控制匀速移动的时间 float timeToReach = distance*10 / moveSpeed; // 根据速度控制匀速移动的时间
// 使用DoTween的DOPath来平滑地移动到目标位置 // 使用DoTween的DOPath来平滑地移动到目标位置
Vector3[] path = new Vector3[waypoints.Length - currentWaypointIndex]; Vector3[] path = new Vector3[waypoints._waypoints.Count - currentWaypointIndex];
for (int i = 0; i < path.Length; i++) for (int i = 0; i < path.Length; i++)
{ {
path[i] = waypoints[currentWaypointIndex + i].position; path[i] = waypoints._waypoints[currentWaypointIndex + i].position;
} }
// 执行路径动画,保证匀速前进
gameObject.transform.DOPath(path, timeToReach, PathType.Linear) gameObject.transform.DOPath(path, timeToReach, PathType.Linear)
.SetEase(Ease.Linear); // 设置匀速 .SetEase(Ease.Linear).OnUpdate(() => RotateTowardsTarget()); // 每次更新时调整旋转
} }
else else
{ {
Debug.Log("到达终点!"); Debug.Log("到达终点!");
} }
}
void RotateTowardsTarget()
{
Vector3 _vector3 = Vector3 - gameObject.transform.position;
Vector3 = gameObject.transform.position;
if (_vector3.x>0)
{
// 物体在目标的右边或平行设置物体的y旋转为180°面向左侧
gameObject.transform.rotation = Quaternion.Euler(0, 0, 0);
}
else
{
// 物体在目标的左边设置物体的y旋转为0°面向右侧
gameObject.transform.rotation = Quaternion.Euler(0, 180, 0);
}
} }
} }

View File

@ -10,7 +10,7 @@ using UnityEngine.UI;
public class Base : MonoBehaviour public class Base : MonoBehaviour
{ {
private List<string> LoadClassName = new List<string>() { "ImageLoader" , "Global" };//写入需要全局自动实例化的类 private List<string> LoadClassName = new List<string>() { "ImageLoader" , "Global", "gameGlobal" };//写入需要全局自动实例化的类
[Header("关闭窗口的按钮")] public Button retbutton; [Header("关闭窗口的按钮")] public Button retbutton;
[Header("需要关闭的窗口")] public GameObject ClosureObj; [Header("需要关闭的窗口")] public GameObject ClosureObj;
public static GameObject GlobalObj; public static GameObject GlobalObj;