UnityCommon/Role/jez_Bullet.cs

132 lines
3.6 KiB
C#
Raw Normal View History

2025-01-09 11:56:13 +08:00
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UIElements;
using System.Linq;
public class jez_Bullet : Bullet
{
private bool isReturning = false; // <20><><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD>Ƿ<EFBFBD><C7B7>ڷ<EFBFBD><DAB7>ؽ׶<D8BD>
private Vector3 startPosition; // <20>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
private Vector3 targetPosition; // <20>ӵ<EFBFBD><D3B5><EFBFBD>Ŀ<EFBFBD><C4BF>λ<EFBFBD><CEBB>
private void Start()
{
// <20><>¼<EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ʼλ<CABC><CEBB>
startPosition = transform.position;
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>Ŀ<EFBFBD><C4BF>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ǰ<EFBFBD>ƶ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>
targetPosition = startPosition + transform.up * (role.AttackRange+2);
}
private void Update()
{
switch (this.bulletMoveType)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ƶ<EFBFBD>
case BulletMoveType.PeerToPeer:
if (IsMove)
{
if (!isReturning)
{
// <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
transform.position = Vector3.MoveTowards(transform.position, targetPosition, Time.deltaTime * bulletData.BulletSpeed);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><E3A3AC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
if (Vector3.Distance(transform.position, targetPosition) < 0.1f)
{
isReturning = true; // <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ׶<D8BD>
}
}
else
{
// <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ʼλ<CABC><CEBB>
transform.position = Vector3.MoveTowards(transform.position, startPosition, Time.deltaTime * bulletData.BulletSpeed);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC>ã<EFBFBD>ֹͣ<CDA3>ƶ<EFBFBD><C6B6><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
if (Vector3.Distance(transform.position, startPosition) < 0.1f)
{
IsMove = false; // ֹͣ<CDA3>ƶ<EFBFBD>
Destroy(this.gameObject);
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7>ص<EFBFBD><D8B5><EFBFBD>ʼλ<CABC><CEBB>");
}
}
}
break;
case BulletMoveType.PointToDirection:
// ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>߼<EFBFBD>
break;
case BulletMoveType.Scope:
// ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>߼<EFBFBD>
break;
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
Role Crole = collision.gameObject.GetComponent<Role>();
if (Crole)
{
if (Crole.camp != role.camp)
{
foreach (var buff in role.storageBuff)
{
if (!Crole.PlayerBuff.Contains(buff))
{
Crole.PlayerBuff.Add(buff);
}
}
Crole.ApplyBuffs();
// Debug.Log(this.role.gameObject.name + "<22><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
int direction = 0;
if (collision.transform.position.x > transform.position.x) //<2F>ӵ<EFBFBD><D3B5>򵽵<EFBFBD><F2B5BDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ұ<EFBFBD>
{
direction = 1;
}
Crole.bloodLoss(new object[] { Crole, role.DamageCreate(Crole.GetComponent<Role>()), attackObj.damageTyp, role }, direction);
Crole.FlashRedEffect();
}
}
}
private void OnTriggerStay2D(Collider2D collision)
{
}
private void OnTriggerExit2D(Collider2D collision)
{
}
}