Files
5.24BuYu/Assets/MyGame/Scripts/Items/Bullits/BullitMove.cs
T
2026-02-09 10:44:38 +08:00

200 lines
5.8 KiB
C#

using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net.API;
using Assets.MyGame.Scripts.Net.WebResponses;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BullitMove : MonoBehaviour
{
public RoomJoinNotice user;
public float moveSpeed = 5;
public float desTime = 10f;
public string playerID;
public GameObject effectPrefab;
public GameObject diePrefab;
float currShowTime = 0f;
Vector3 vector3_startPosition;
public bool isTriggerFirst = true;
MonsterContral target;
// Start is called before the first frame update
void Awake()
{
Init();
//Destroy(gameObject, desTime);
}
bool isLock = false;
public void Lock(MonsterContral monsterContral)
{
foreach (var item in GetComponents<Collider2D>())
{
item.enabled = false;
}
isLock = true;
target = monsterContral;
}
public void NotLock()
{
foreach (var item in GetComponents<Collider2D>())
{
item.enabled = true;
}
isLock = false;
target = null;
}
/// <summary>
/// 对象池用
/// </summary>
public void Init()
{
vector3_startPosition = transform.position;
}
//子弹同步分为两种一种是锁定目标一种是不锁定目标
// Update is called once per frame
void Update()
{
if (isLock)
{
if (target == null)
{
NotLock();
}
var ABdistance = Vector3.Distance(transform.position, target.transform.position);
var rotateSpeed = 1/ABdistance;
Vector3 targetPoint = (target.transform.position-transform.position).normalized * moveSpeed*Time.deltaTime;
transform.up = Vector3.Lerp(transform.up, targetPoint, rotateSpeed);
targetPoint = transform.up.normalized * moveSpeed * Time.deltaTime;
transform.position+= targetPoint;
if (ABdistance <= 2)
{
AttackFish(target);
}
}
else
{
//方便帧同步
currShowTime += Time.deltaTime;
Vector3 targetPoint = transform.up.normalized * currShowTime * moveSpeed;
transform.position = vector3_startPosition + targetPoint;
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (isTriggerFirst)
{
if (collision.transform.tag == "Fish")
{
isTriggerFirst = false;
//击中特效
if (effectPrefab != null)
{
Instantiate(effectPrefab, transform.position, Quaternion.identity, transform.parent);
}
//受激
var monster = collision.transform.GetComponentInParent<MonsterContral>();
monster.monsterData.charactersHealth.OnHurt(10, CharacterHurtType.none);
Destroy(monster.gameObject);
Destroy(gameObject);
}
}
}
public static Quaternion RotationFromVector2(Vector2 dir)
{
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
return Quaternion.Euler(0, 0, angle);
}
// 计算反射角度
Vector2 GetReflectionAngle(Vector2 velocity, Vector2 normal)
{
// 反射向量
return Vector2.Reflect(velocity.normalized, normal.normalized);
}
public void OnTriggerEnter2D(Collider2D collision)
{
if (isTriggerFirst)
{
if (collision.tag == "Fish")
{
isTriggerFirst = false;
var monster = collision.transform.GetComponentInParent<MonsterContral>();
AttackFish(monster);
}
else if (collision.tag == "Wall")
{
Vector3 v3 = transform.eulerAngles;
switch (collision.name)
{
case "up":
v3.z = -v3.z+180;
break;
case "down":
v3.z = -v3.z + 180;
break;
case "left":
v3.z = -v3.z;
break;
case "right":
v3.z = -v3.z;
break;
default:
break;
}
vector3_startPosition = transform.position;
currShowTime = 0;
transform.eulerAngles = v3;
}
}
}
private void AttackFish(MonsterContral monster)
{
//击中特效
if (effectPrefab != null)
{
Instantiate(effectPrefab, transform.position, Quaternion.identity, transform.parent);
}
//请求服务端是否杀死
var v1 = GameManager.Instance.gameData.roomJoinNotice;
var v2 = GameManager.Instance.gameData.currRoomData;
if (true)
{
WebSocketSendList.KillFish(v2.roomId, user.userId,monster.monsterData.fishTypeConfig.fishNumber, monster.hashCode, GameManager.Instance.gameData.roomJoinNotice.cannonMultiple);
}
//受激
//monster.monsterData.charactersHealth.OnHurt(10, CharacterHurtType.none);
//monster.HP--;
//if (monster.HP == 0)
//{
// Instantiate(monster.effect_Die == null ? diePrefab : monster.effect_Die, monster.transform.position, Quaternion.identity, transform.parent);
// Destroy(monster.gameObject);
//}
//else
//{
monster.OnHurt();
//}
Destroy(gameObject);
}
}