【unity 保卫星城】--- 开发笔记07(追踪导弹武器)
【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(追踪导弹武器)相关推荐
- 【unity 保卫星城】--- 开发笔记01(飞机移动)
[unity 保卫星城]--- 开发笔记 一.在UnityHub中创建2D项目,取名Defend_Star_City 二.导入MangerOfManger框架 三.在打包中,切换安卓开发模式 四.创建 ...
- 【unity 保卫星城】--- 开发笔记08(UI轮盘)
[unity 保卫星城]--- 开发笔记 一.武器轮盘 1.轮盘的旋转 2.选择的武器 3.完成轮盘隐藏和显示 -做完前三个武器,第四个武器准备在前三个武器测试完成没问题后再添加,但再测试前,武器直接 ...
- 【unity 保卫星城】--- 开发笔记04(武器管理系统)
[unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 3.武器管理的类 4.武器抽象类 六.完善类图中的类的功能 3.武器管理的类 using System.Collections; u ...
- 【unity 保卫星城】--- 开发笔记03(飞机类第一版)
[unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 2.飞机的类 六.完善类图中的类的功能 2.飞机的类 先放到这后面再慢慢完善~ using System.Collections; ...
- 【unity 保卫星城】--- 开发笔记06(散弹 武器)
[unity 保卫星城]--- 开发笔记 ~~ 战机武器库 ~~ 2.散弹 · 感觉把好多类,都写再 六 这个主题里,感觉主题会撑爆,所有还是再开个小框架吧. · 就叫战机武器库吧~ ~~ 战机武器库 ...
- 【unity 保卫星城】--- 开发笔记05(普通子弹武器)
[unity 保卫星城]--- 开发笔记 ~~ 战机武器库 ~~ 1.普通的子弹 · 感觉把好多类,都写再 六 这个主题里,感觉主题会撑爆,所有还是再开个小框架吧. · 就叫战机武器库吧~ ~~ 战机 ...
- 【unity 保卫星城】--- 开发笔记08(太空站篇)
[unity 保卫星城]--- 开发笔记 保卫星城-太空站篇 一.太空站的功能 二.功能的实现 说起来保卫星城最重要的星城还没讲,其实星城就是一个太空站,而我们的任务就是保护太空站不被敌人破坏. 保卫 ...
- 【unity 保卫星城】--- 开发笔记02(陀螺仪移动)
[unity 保卫星城]--- 开发笔记 六.完善类图中的类的功能 1.飞机移动模块 第二版(完善了陀螺仪移动) 六.完善类图中的类的功能 1.飞机移动模块 第二版(完善了陀螺仪移动) using S ...
- 【unity 保卫星城】--- 开发笔记(Demo演示篇)
[unity 保卫星城]- 开发笔记 保卫星城 一.游戏介绍 <保卫星城>是一款移动端2D横板射击类游戏,使用Unity3D引擎开,与一般的打飞机需要躲避子弹不同,本游戏需要玩家控制小飞机 ...
最新文章
- 【杭电ACM】1097 A hard puzzle
- GDCM:gdcm::network::ULTransitionTable的测试程序
- 关于memcached的收集
- SmartFoxServer学习总结(转载)
- 如何合理的配置线程数?
- /usr/bin/ld: 找不到 -lmsc----解决方案
- vue获取路径参数和请求参数
- Hibernate的单向1-1关联(二)
- 【小窍门tip】oracle sequence 修改增量值
- st_aggrid pip下载失败问题
- 作为项目经理如何做好项目进度管理
- 微信jssdk常见错误及解决方法
- 如何修改鼠标右键新建对象的顺序
- Hadoop小兵笔记【六】hadoop2.2.0伪分布式环境搭建疑难-JobHistory显示Job信息为空
- 金蟾论金:4.13黄金探底回升收复跌势、晚间黄金走势分析指导
- thinksns的部署
- STM32 ES8266上阿里云IOT MQTT实践【第一章】:物联网简介(什么是物联网)
- python写入csv指定单元格_使用python将值插入csv中的特定单元格
- LeetCode 234
- J2EE是什么?和JavaEE的是什么关系?