导弹追踪效果实现_unity基础开发教程

news2024/12/23 5:43:20

Unity开发中导弹追踪的原理与实现

  • 前言
  • 原理
  • 逻辑实现
    • 导弹逻辑
    • 目标赋值
  • 应用效果
  • 结语

前言

⭕在之前的一个项目的开发中,需要加入一个导弹追踪的游戏功能,且还要实现不规则发射路径,但是这种功能是第一次做,经过查阅资料和询问做过的同事前辈,经过一系列的开发调试最终实现了该效果。
⭕这个效果分两次学习,首先就是单纯的跟踪效果,其次就是跟踪散射效果,我们这期先讲一下跟踪效果,下期实现不规则的散射效果。

直接开整!
请添加图片描述

原理

跟踪的原理还是比较简单的,就是在Update()函数中执行Transform.LookAt()以及向Transform.forward方向移动即可。

逻辑实现

导弹逻辑

下面的脚本是挂载到导弹中的脚本,其中需要爆炸的特效,这里我是自己用粒子系统随便创建的,大家也可以自行创建或者在素材商店下载一个。后期我也会整理下资料出一片文章讲一下粒子特效的创建

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rocket : MonoBehaviour
{

    public Transform target;               //跟踪目标
    public GameObject FX;                  //爆炸特效
    public float moveSpeed;                //移动速度

    // Start is called before the first frame update
    void Start()
    {
        
    }

    private void Update()
    {
        if (target != null)    //判断当前是否有跟踪目标 如果有的话 执行 以下跟踪逻辑
        {
            transform.LookAt(target);
            transform.position += transform.forward * moveSpeed * Time.deltaTime;      //向前移动
        }
    }


    //当有物体进入到自己的触发器时调用
    private void OnTriggerEnter(Collider other)
    {
        //Debug.Log(other.gameObject.name);
        //Debug.Log(gameObject.name);
        GameObject tempFX = Instantiate(FX, transform.position, transform.rotation);  //生成一个爆炸特效 并给予位置和旋转信息
        Destroy(gameObject);      //销毁自己
        Destroy(tempFX, 0.3f);       //等待 1秒 销毁刚才创建生成的爆炸特效
    }
}

导弹大家可以自由发挥创建或者下载素材,我这里为了演示使用4个正方体、1个圆柱体、1个球体组合的。别忘了把刚才的脚本挂载到上面然后给爆炸特效、移动速度赋值,目标值后面会通过脚本赋值。别忘了将其做成预制体!

在这里插入图片描述

目标赋值

导弹部分完成之后缺少一个目标,让导弹击打谁呢?这里就需要用下面的脚本给导弹赋值目标。
这里需要将刚才创建的导弹的预制体通过Inspector窗口赋值给变量missile,同时还有生成导弹的位置和方向(方向可以不用管)。这个脚本我是挂在了Main Camera上,当然其他也行。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Demo1 : MonoBehaviour
{
    [Header("导弹")]
    public GameObject missile;

    [Header("导弹初始位置")]
    public Vector3 missilePosition;
    public Quaternion missileRotation;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // 如果鼠标左键被按下  
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 创建从相机到鼠标位置的射线  
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit)) // 如果射线与物体碰撞  
            {
                if (hit.collider.tag != "target")
                {
                    return;
                }
                Debug.Log("你点击了物体: " + hit.collider.gameObject.transform.position); // 打印被点击物体的名称
                GameObject mis = Instantiate(missile, missilePosition, missileRotation); // 获取生成后的游戏对象
                mis.GetComponent<Rocket>().target = hit.collider.gameObject.transform;//将鼠标点击的物体目标赋值导弹Rocket脚本组件中的目标
                
            }
        }

    }

}

这里我是通过鼠标点击屏幕中的物体,然后将获取到的物体赋值给导弹的目标,简单来说就是点击谁就击打谁。

应用效果

点谁谁噶😄

请添加图片描述

移动追踪也是可以的😁
请添加图片描述

结语

导弹的追踪效果就完成了,核心逻辑也容易理解,下期说一下路径散射效果的实现,下期见,拜拜!

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1657652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java io包

InputStream InputStream 是 Java I/O 中所有输入流的抽象基类&#xff0c;它定义了读取字节流的基本方法。InputStream 类提供了许多子类&#xff0c;用于从不同的数据源读取数据&#xff0c;如文件、网络连接、内存等。 InputStream 提供了以下常用的方法&#xff1a; int…

Magic Studio Eraser API使用教程

AI橡皮擦 - 使用网址 Magic Studio的AI橡皮擦功能非常好用&#xff0c;能去除图片中的杂物。但是网页版只支持低分辨率下载&#xff0c;想要原图就得开会员&#xff0c;价格不菲。 不过官网其实提供了API接入方式&#xff0c;并且有100次的免费试用机会 API接入网站 在这里可…

PyQt6--Python桌面开发(3.运行QTDesigner生成的ui文件程序)

运行QTDesigner生成的ui文件程序 用QTDesigner设计一个简单的UI 保存ui文件&#xff0c;放到项目里面去 通过pyqt6包里面的uic来加载ui文件 import sysfrom PyQt6.QtWidgets import QApplication from PyQt6 import uicif __name__ __main__:appQApplication(sys.argv)uiui…

C++对象引用作为函数参数

使用对象引用作为函数参数最常见&#xff0c;它不但有指针作为参数的优点&#xff0c;而且比指针作为参数更简单、更方便。 引用方式进行参数传递&#xff0c;形参对象就是实参对象的“别名”&#xff0c;对形参的操作其实就是对实参的操作。 例如:用对象引用进行参数传…

基于Springboot的校园悬赏任务平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园悬赏任务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

1010: 折半查找的实现

解法&#xff1a; #include<iostream> #include<vector> using namespace std; void solve() {int n;cin >> n;vector<int> vec(n);for (int& x : vec) cin >> x;int x;cin >> x;int l 0, r n-1, cnt 0;while (l < r) {cnt;int…

Python语言在地球科学交叉领域中的实践技术融合应用

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台&#xff08;x86和arm&#xff09;&#xff0c;Python简洁的语法和对动态输入的支持&#xff0c;再加上解释性语言的本质&…

代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集

系列文章目录 目录 系列文章目录动态规划&#xff1a;01背包理论基础①二维数组②一维数组&#xff08;滚动数组&#xff09; 416. 分割等和子集①回溯法&#xff08;超时&#xff09;②动态规划&#xff08;01背包&#xff09;未剪枝版剪枝版 动态规划&#xff1a;01背包理论基…

【MySQL基本查询(上)】

文章目录 一、多行插入 指定列插入数据更新表中某个数据的信息&#xff08;on duplicate&#xff09;了解affected报告信息 二、检索功能1.select 查询1.1全列查询1.2指定列查询1.3where条件筛选子句案例 2.结果排序案例 3.筛选分页结果offset实现分页 一、多行插入 指定列插…

QT:小项目:登录界面 (下一章连接数据库)

一、效果图 登录后&#xff1a; 二、项目工程结构 三、登录界面UI设计 四主界面 四、源码设计 login.h #ifndef LOGIN_H #define LOGIN_H#include <QDialog>namespace Ui { class login; }class login : public QDialog {Q_OBJECTpublic:explicit login(QWidge…

es使用遇到的bug总结

本来版本7.4.0不行&#xff0c;最后换了个版本7.15.1就可以了&#xff0c;但又出现以下问题了&#xff1a; Beanpublic ElasticsearchClient elasticsearchClient() { // RestClient client RestClient.builder(new HttpHost("localhost", 9200,"http&q…

STM32理论 —— μCOS-Ⅲ(新)

文章目录 1. 任务调度器1.1 抢占式调度 μCos-Ⅲ全称是Micro C OS Ⅲ&#xff0c;由Micriμm 公司发布的一个基于C 语言编写的第三代小型实时操作系统(RTOS)&#xff1b; RTOS 与裸机相比最大的优势在于多任务管理与实时性&#xff0c;它提供了多任务管理和任务间通信的功能&a…

找出100~200的全部素数

解题思路&#xff1a; 判别 m 是否为素数的算法是这样的&#xff1a;让 m 被2~除&#xff0c;如果 m 不能被2~之中任何一个整数整除&#xff0c;就可以确定 m 是素数。为了记录 m 是否为素数&#xff0c;可以用一个布尔变量 prime 来表示。在循环开始时先设 prime 为真…

【Leetcode】八大排序

总述 插入排序&#xff1a;直接插入排序&#xff1b;希尔排序&#xff1b; 选择排序&#xff1a;简单选择排序&#xff1b;堆排序&#xff1b; 交换排序&#xff1a;冒泡排序&#xff1b;快速排序&#xff1b; 归并排序&#xff1b; 桶排序/基数排序&#xff1b; 直接插入排序 …

ssm105基于JAVAEE技术校园车辆管理系统+jsp

校园车辆管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园车辆管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

IOS Xcode证书配置和ipa打包流程(附详细图文教程)

IOS Xcode证书配置和ipa打包流程&#xff08;附图文教程&#xff09; 前言ipa文件简介证书文件简介Provisioning Profile描述文件简介当前环境版本Xcode证书配置和ipa打包流程生成Apple Distribution Certificates证书创建描述文件&#xff08;Provisioning Profiles&#xff0…

【python】模块与包

Python中的模块和包是组织和管理代码的重要工具。通过模块和包&#xff0c;你可以更好地管理和重用你的代码&#xff0c;使得代码更加模块化和可维护。 目录 前言 正文 一、模块 1、模块的分类 1&#xff09;内置模块 python解释器中默认拥有的模块可以直接使用&#xff08;…

守护数字疆域:2024年网络安全报告深度解读

在这个数据如潮涌动的数字时代&#xff0c;每一比特信息都可能是攻防双方角力的战场。《Check Point 2024年网络安全报告》不但为我们揭示了过去一年网络安全世界的风云变幻&#xff0c;更以前瞻性的视角勾勒出未来的挑战与机遇。此刻&#xff0c;让我们携手深潜这份权威指南的…

Offer必备算法37_记忆化搜索_五道力扣题详解(由易到难)

目录 记忆化搜索概念和使用场景 ①力扣509. 斐波那契数 解析代码1_循环 解析代码2_暴搜递归 解析代码3_记忆化搜索 解析代码4_动态规划 ②力扣62. 不同路径 解析代码1_暴搜递归&#xff08;超时&#xff09; 解析代码2_记忆化搜索 解析代码3_动态规划 ③力扣300. 最…

对时间序列异常检测的严格评价

论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/20680 论文源码&#xff1a;无 会议&#xff1a;The Thirty-Sixth AAAI Conference on Artificial Intelligence 这篇论文名为《Towards a Rigorous Evaluation of Time-Series Anomaly Detection》&a…