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 string userid; 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; public string bulletID; // 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()) { item.enabled = false; } isLock = true; target = monsterContral; } public void NotLock() { foreach (var item in GetComponents()) { item.enabled = true; } isLock = false; target = null; } /// /// 对象池用 /// 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(); 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(); 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, userid,monster.monsterData.fishTypeConfig.fishNumber, monster.guid, (int)CreateFishManager.Instance.currGameType.currSitData.consumeGoldNum); } //受激 //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); } }