【unity 保卫星城】--- 开发笔记

  • ~~ 战机武器库 ~~
    • 3.追踪导弹

~~ 战机武器库 ~~

3.追踪导弹

参考大佬的博客:https://blog.csdn.net/sdhexu/article/details/77962134
(写了个2D的出来)

由武器管理系统,控制子弹生成:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace ns
{///<summary>//////</summary>public class GuideMissiles : Weapons{private GameObject go;private GameObject temp;private float t = 0;public float timer = 1f;public GuideMissiles(){weaponName = "GuideMissile";attack = 150;bulletCount = 1;rate = 0.5f;Update();}/// <summary>/// 发射的方法/// </summary>public override void Launch(GameObject _airPlane){if(bulletCount > 0){if (time >= rate){if (temp == null){PoolManager.GetInstance().GetObj(weaponName, (obj) =>{temp = obj;temp.SetActive(true);temp.transform.position = new Vector3(_airPlane.transform.position.x, _airPlane.transform.position.y - 0.15f, 0);temp.transform.rotation = new Quaternion(0, 0, 0, 0);temp.GetComponent<GuideMissile>().isLaunch = false;temp.GetComponent<GuideMissile>().CurrentVelocity = 0;temp.GetComponent<Animator>().enabled = false;temp.transform.GetChild(0).gameObject.SetActive(false);temp.transform.parent = GameObject.Find("Player").transform;});ChangeUIText();}//Debug.Log("fire");time = 0;}else{time += Time.deltaTime;}}}private void LaunchGuideMissile(GameObject _temp){_temp.GetComponent<GuideMissile>().target = GameObject.FindGameObjectWithTag("Enemy").transform;_temp.GetComponent<Animator>().enabled = true;_temp.transform.GetChild(0).gameObject.SetActive(true);_temp.GetComponent<GuideMissile>().isLaunch = true;_temp.transform.parent = null;go = _temp;temp = null;}private void Update(){MonoManager.GetInstance().AddUpdataListener(CheckGo);}private void CheckGo(){if (go != null && go.gameObject.activeSelf == false){go = null;}if (temp != null && go == null)t += Time.deltaTime;if (t >= timer){LaunchGuideMissile(temp);t = 0;}}public override void ChangeUIText(){bulletCount--;EventCenter.GetInstance().EventTrigger<int>("子弹数减少", bulletCount);}}}

这是挂载在子弹游戏物体上的脚本,控制导弹移动:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace ns
{///<summary>///追踪导弹///</summary>public class GuideMissile : MonoBehaviour{public int attack = 1;#regionpublic float speed = 2f;//子弹速度public float roateSpeed = 2f;//旋转速度public float strenthSpeed = 2f;//追踪速度public Transform target;private Vector2 dir;//private Coroutine c;public bool isLaunch = false;void Update(){if (isLaunch){GuideMissileToMovemont();if (transform.position.y > 5.5f){PushPool();}}}public float ChaseRange = 5f;public float getTargetInterval = 0.01f;private void PushPool(){PoolManager.GetInstance().PushObj("GuideMissile", this.gameObject);}#endregion[SerializeField, Tooltip("最大转弯速度")]private float MaximumRotationSpeed = 360.0f;[SerializeField, Tooltip("加速度")]private float AcceleratedVeocity = 12.8f;[SerializeField, Tooltip("最高速度")]private float MaximumVelocity = 10.0f;[HideInInspector]public float CurrentVelocity = 0.0f;   // 当前速度private void GuideMissileToMovemont(){Vector3 offset;if (target != null){// 计算朝向目标的方向偏移量offset = (target.position - transform.position).normalized;offset = new Vector3(offset.x, offset.y, 0);// 计算当前方向与目标方向的角度差float angle = Vector3.Angle(transform.up, offset);// 根据最大旋转速度,计算转向目标共计需要的时间if(CurrentVelocity != 0){float needTime = angle / (MaximumRotationSpeed * (CurrentVelocity / MaximumVelocity));// 如果角度很小,就直接对准目标if (needTime < 0.001f){transform.up = offset;}else{// 当前帧间隔时间除以需要的时间,获取本次应该旋转的比例。transform.up = Vector3.Slerp(transform.up, offset, Time.deltaTime / needTime).normalized;}}// 如果当前速度小于最高速度,则进行加速if (CurrentVelocity < MaximumVelocity)CurrentVelocity += Time.deltaTime * AcceleratedVeocity;// 朝自己的前方位移transform.position += transform.up * CurrentVelocity * Time.deltaTime;}}private void OnTriggerEnter2D(Collider2D collision){if (collision.gameObject.tag == "Enemy"){Enemy_1 scr = collision.gameObject.GetComponent<Enemy_1>();scr.ChangeHp(attack);PushPool();}}}}

【unity 保卫星城】--- 开发笔记07(追踪导弹武器)相关推荐

  1. 【unity 保卫星城】--- 开发笔记01(飞机移动)

    [unity 保卫星城]--- 开发笔记 一.在UnityHub中创建2D项目,取名Defend_Star_City 二.导入MangerOfManger框架 三.在打包中,切换安卓开发模式 四.创建 ...

  2. 【unity 保卫星城】--- 开发笔记08(UI轮盘)

    [unity 保卫星城]--- 开发笔记 一.武器轮盘 1.轮盘的旋转 2.选择的武器 3.完成轮盘隐藏和显示 -做完前三个武器,第四个武器准备在前三个武器测试完成没问题后再添加,但再测试前,武器直接 ...

  3. 【unity 保卫星城】--- 开发笔记04(武器管理系统)

    [unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 3.武器管理的类 4.武器抽象类 六.完善类图中的类的功能 3.武器管理的类 using System.Collections; u ...

  4. 【unity 保卫星城】--- 开发笔记03(飞机类第一版)

    [unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 2.飞机的类 六.完善类图中的类的功能 2.飞机的类 先放到这后面再慢慢完善~ using System.Collections; ...

  5. 【unity 保卫星城】--- 开发笔记06(散弹 武器)

    [unity 保卫星城]--- 开发笔记 ~~ 战机武器库 ~~ 2.散弹 · 感觉把好多类,都写再 六 这个主题里,感觉主题会撑爆,所有还是再开个小框架吧. · 就叫战机武器库吧~ ~~ 战机武器库 ...

  6. 【unity 保卫星城】--- 开发笔记05(普通子弹武器)

    [unity 保卫星城]--- 开发笔记 ~~ 战机武器库 ~~ 1.普通的子弹 · 感觉把好多类,都写再 六 这个主题里,感觉主题会撑爆,所有还是再开个小框架吧. · 就叫战机武器库吧~ ~~ 战机 ...

  7. 【unity 保卫星城】--- 开发笔记08(太空站篇)

    [unity 保卫星城]--- 开发笔记 保卫星城-太空站篇 一.太空站的功能 二.功能的实现 说起来保卫星城最重要的星城还没讲,其实星城就是一个太空站,而我们的任务就是保护太空站不被敌人破坏. 保卫 ...

  8. 【unity 保卫星城】--- 开发笔记02(陀螺仪移动)

    [unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 1.飞机移动模块 第二版(完善了陀螺仪移动) 六.完善类图中的类的功能 1.飞机移动模块 第二版(完善了陀螺仪移动) using S ...

  9. 【unity 保卫星城】--- 开发笔记(Demo演示篇)

    [unity 保卫星城]- 开发笔记 保卫星城 一.游戏介绍 <保卫星城>是一款移动端2D横板射击类游戏,使用Unity3D引擎开,与一般的打飞机需要躲避子弹不同,本游戏需要玩家控制小飞机 ...

最新文章

  1. 【杭电ACM】1097 A hard puzzle
  2. GDCM:gdcm::network::ULTransitionTable的测试程序
  3. 关于memcached的收集
  4. SmartFoxServer学习总结(转载)
  5. 如何合理的配置线程数?
  6. /usr/bin/ld: 找不到 -lmsc----解决方案
  7. vue获取路径参数和请求参数
  8. Hibernate的单向1-1关联(二)
  9. 【小窍门tip】oracle sequence 修改增量值
  10. st_aggrid pip下载失败问题
  11. 作为项目经理如何做好项目进度管理
  12. 微信jssdk常见错误及解决方法
  13. 如何修改鼠标右键新建对象的顺序
  14. Hadoop小兵笔记【六】hadoop2.2.0伪分布式环境搭建疑难-JobHistory显示Job信息为空
  15. 金蟾论金:4.13黄金探底回升收复跌势、晚间黄金走势分析指导
  16. thinksns的部署
  17. STM32 ES8266上阿里云IOT MQTT实践【第一章】:物联网简介(什么是物联网)
  18. python写入csv指定单元格_使用python将值插入csv中的特定单元格
  19. LeetCode 234
  20. J2EE是什么?和JavaEE的是什么关系?

热门文章

  1. SUMPRODUCT函数使用方法及示例
  2. dataframe 对象中统计每个列的所有数的和,或者每一行所有值的和
  3. agx上搭建ros2
  4. 靠肝的爬塔不优雅——养成手游《古今江湖》
  5. 是时候卸载这些全身都是广告的浏览器了:360、UC、QQ
  6. 灵遁者句子:意识从物质诞生那一刻起,就诞生了
  7. Python 进行excel查重
  8. FITC-WFA荧光素标记紫藤凝集素(WFA,WFL)
  9. Oracle Database 10g for Windows安装
  10. 植物图像识别python_python实现图像识别功能