Unity实战案例全解析:RTS游戏的框选和阵型功能(2) 生成选择框

news2024/9/29 13:35:25

前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(1) 基础要素-CSDN博客

本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程

【唐老狮】Unity实现 即时战略游戏 阵型功能 - 泰课在线 -- 志存高远,稳如泰山 - 国内专业的在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG - Powered By EduSoho (taikr.net)

我只是对重要功能进行分析和做出笔记分享,并未无师自通,吃水不忘打井人

本案例的实现流程图 

框选功能要素图 

本文实现可视框部分,其中重置框作为一个小函数,并不用详解

分析

对于可视化线条,自然而然想到的是Line Render组件

unity保姆级教程之 Line Renderer_unity linerenderer-CSDN博客

当鼠标左键按下的时候,就记录第一个点,鼠标抬起就记录最后一个点

然后根据这两个点的坐标,进行矩形的四角分配,其中z轴可以自行分配值

基本字段

    //画线组件
    private LineRenderer lineRenderer;
    //鼠标按下检测
    private bool isMouseDown;
    //四个点
    private Vector3 leftUpPos;//1
    private Vector3 rightUpPos;//2
    private Vector3 leftDownPos;//3
    private Vector3 rightDownPos;//4

但是,还有一个问题,目前的四个点是在相机面前的也就是2D的,而项目是3D的

可能出现绘制出来了线框但是并没有出现在实际3D世界的位置中,而且相机旋转也可能导致绘制框的不准确,所以需要将其转为世界坐标系

画线函数

    private void DrawLine()
        { 
        if(Input.GetMouseButtonDown(0))
            {
            isMouseDown=true;
            leftUpPos = Input.mousePosition;
            leftUpPos.z = 5; // 设置z轴值
            RayBegin();
        }
        if(Input.GetMouseButtonUp(0))
            {
            isMouseDown = false;
            lineRenderer.positionCount = 0;
            ResetSelect();
            RaySelect();
        }
       
        FourFarmePos();
    }

 处理四点的函数

    /// <summary>
    /// 处理框选框四个点的位置
    /// </summary>
    private void FourFarmePos()
        {
        if (isMouseDown){
            rightDownPos = Input.mousePosition;
            rightDownPos.z = 5;

            rightUpPos = new Vector3(rightDownPos.x, leftUpPos.y, 5);
            leftDownPos = new Vector3(leftUpPos.x, rightDownPos.y, 5);

            lineRenderer.positionCount = 4;
            lineRenderer.SetPosition(0, Camera.main.ScreenToWorldPoint(leftUpPos));
            lineRenderer.SetPosition(1, Camera.main.ScreenToWorldPoint(rightUpPos));
            lineRenderer.SetPosition(2, Camera.main.ScreenToWorldPoint(rightDownPos));
            lineRenderer.SetPosition(3, Camera.main.ScreenToWorldPoint(leftDownPos));    
            }
    }

总览 

    private void Start() {
        lineRenderer = GetComponent<LineRenderer>();
        isMouseDown =false;
        layermask = LayerMask.GetMask("Bk");
        soliderObjs = new List<SoliderObj>();
    }

    private void Update() {
        DrawLine();
    }
    
    private void DrawLine()
        { 
        if(Input.GetMouseButtonDown(0))
            {
            isMouseDown=true;
            leftUpPos = Input.mousePosition;
            leftUpPos.z = 5; // 设置z轴值
            RayBegin();
        }
        if(Input.GetMouseButtonUp(0))
            {
            isMouseDown = false;
            lineRenderer.positionCount = 0;
            ResetSelect();
            RaySelect();
        }
       
        FourFarmePos();
    }
    /// <summary>
    /// 处理框选框四个点的位置
    /// </summary>
    private void FourFarmePos()
        {
        if (isMouseDown){
            rightDownPos = Input.mousePosition;
            rightDownPos.z = 5;

            rightUpPos = new Vector3(rightDownPos.x, leftUpPos.y, 5);
            leftDownPos = new Vector3(leftUpPos.x, rightDownPos.y, 5);

            lineRenderer.positionCount = 4;
            lineRenderer.SetPosition(0, Camera.main.ScreenToWorldPoint(leftUpPos));
            lineRenderer.SetPosition(1, Camera.main.ScreenToWorldPoint(rightUpPos));
            lineRenderer.SetPosition(2, Camera.main.ScreenToWorldPoint(rightDownPos));
            lineRenderer.SetPosition(3, Camera.main.ScreenToWorldPoint(leftDownPos));    
            }
    }

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

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

相关文章

深刻理解Redis集群(上):RDB快照和AOF日志

RDB快照 save同步阻塞 客户端 服务端 .conf配置文件 # The filename where to dump the DB dbfilename dump.rdb# rdb-del-sync-files是Redis配置文件中的一个选项&#xff0c;它的作用是在主节点上执行BGSAVE或AOF持久化操作时&#xff0c;删除同步锁文件&#xff0c;以释放磁…

结婚证识别-离婚证识别接口-结婚证识别API应用场景

在信息化与智能化高速发展的今天&#xff0c;证件的自动识别技术逐渐成为了各行各业数字化转型的关键工具&#xff0c;而结婚证识别接口、离婚证识别接口正在悄然改变着传统的民政工作方式。 结婚证识别与离婚证识别接口是基于光学字符识别&#xff08;OCR&#xff09;技术的智…

LLM - 使用 RAG (检索增强生成) 多路召回 实现 精准知识问答 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142629289 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 RAG (R…

短视频矩阵系统源码部署开发分享

在当今的软件开发领域&#xff0c;框架技术扮演了极为关键的角色&#xff0c;特别是Java开发中的Spring、Struts和Hibernate三大框架。这些框架各具特色&#xff0c;为开发者提供了强大的工具来构建高效、稳定的应用程序。 Spring框架&#xff0c;以其全面的依赖注入&#xff0…

C语言自定义类型:枚举

目录 前言枚举类型1.枚举类型的声明2.枚举类型的优点3.枚举类型的使⽤ 总结 前言 这期我们来学习C语言的最后一个自定义类型——枚举&#xff0c;话不多说&#xff0c;正文开始&#xff1a; 枚举类型 1.枚举类型的声明 枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。 …

Arthas stack (输出当前方法被调用的调用路径)

文章目录 二、命令列表2.3 monitor/watch/trace/stack/tt 相关2.3.2 stack &#xff08;输出当前方法被调用的调用路径&#xff09;举例1&#xff1a;输出当前方法被调用的调用路径&#xff0c;入口很多从哪调用的&#xff1f; 二、命令列表 2.3 monitor/watch/trace/stack/tt…

Pytorch 学习手册

零 相关资料 官方网址 官方网址下的API搜索网站 一 定义 深度学习框架是用于设计、训练和部署深度学习模型的软件工具包。这些框架提供了一系列预定义的组件&#xff0c;如神经网络层&#xff08;卷积层、全连接层等&#xff09;、损失函数、优化器以及数据处理工具&#xf…

高等数学(预备知识)

一、三角函数与反三角函数 注&#xff1a;arctanx arctan(1/x) π/2&#xff08;x > 0&#xff09;。 10. 辅助角公式&#xff1a;asin(α) bcos(α) (√(a2 b2))sin(α φ) &#xff0c;其中 tan(φ) b/a 。 二、代数与方程 注&#xff1a;1 2 …… n n(n1)/2 。…

国庆头像免费制作赚钱项目,蹭热点自带流量日入1000+【保姆级教程】

时光真TM过得快&#xff0c;转眼间已到 10 月。对于上班族来说&#xff0c;10 月最期待的莫过于国庆节这个超长假期了。 今天要分享的就是国庆头像制作赚钱项目的实操教程和变现平台&#xff08;文末获取&#xff09; 第一&#xff1a;国庆头像制作赚钱项目是什么&#xff1f…

深N阱工艺剖面图及端口接法

最近用深N阱工艺做了一个项目&#xff0c;记录一下深N阱工艺的剖面图&#xff0c;以及各个端口的接法接法&#xff08;NMOS深N阱&#xff09;。 首先是CMOS工艺的深N阱技术的剖面图&#xff0c;图源自拉扎维课本&#xff1b;NMOS也有了自己的“阱”&#xff0c;所以它相当于是…

一文说清楚:如何学习好K8s、OpenStack、Docker、Linux?

大家好&#xff0c;我是你们熟悉的-CloudJourney。在这个信息爆炸的时代&#xff0c;我一直致力于通过博客、公众号等平台&#xff0c;与大家分享关于Linux、K8S、Docker、网络、服务器以及OpenStack等前沿技术的见解与心得。然而&#xff0c;随着交流的深入&#xff0c;我逐渐…

中国国画-孙溟㠭浅析碑帖《龙藏寺碑》

中国国画——孙溟㠭浅析碑帖《龙藏寺碑》 《龙藏寺碑》 《龙藏寺碑》 全称是《恒州刺史鄂国公为国劝造龙藏寺碑》&#xff0c;属楷书体。碑通高3.15米&#xff0c;宽0.90米&#xff0c;厚0.29米。碑文楷书30行&#xff0c;行50字&#xff0c;1500余字&#xff0c;碑为龟趺。…

基于开源WQ装备知识图谱的智能问答优化2

基于笔者之前写的博客基础上&#xff1a;https://blog.csdn.net/zhanghan11366/article/details/142139488【基于开源WQ装备知识图谱的智能问答全流程构建】进行优化。新增处理基于特定格式下的WQ文档&#xff0c;抽取文档的WQ属性和关系&#xff0c;并抽取对应WQt图片存储至mi…

支付宝开放平台-开发者社区——AI 日报「9 月 29 日」

1 支付宝进军大模型医疗应用&#xff0c;技术一号位&#xff1a;我们有4个切入点 量子位&#xff5c;阅读原文 面对来势汹汹的大模型应用浪潮&#xff0c;支付宝医疗技术一号位魏鹏这样说道。今年&#xff0c;蚂蚁大举进军医疗&#xff0c;已是再明显不过。作为蚂蚁大模型应用…

零基础快速上手JAVA代码审计

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

吐血整理:国内一站式儿童有声绘本创作平台

儿童绘本儿童故事这个领域在Stable Diffusion、Midjourney、ChatGPT产品推出后开始有大量自媒体达人纷纷发布教程&#xff0c;热度一直都在。但由于创作门槛较高、需要对AI类和制作类软件都需要掌握、流程制作复杂&#xff0c;且由于创作者提示词的影响出图效果不稳定&#xff…

LeetCode 面试经典150题 69.x的平方根

题目&#xff1a;给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 思…

「实战应用」如何用DHTMLX Gantt集成工具栏部件更好完成项目管理?

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 今天给大家分享一种方法&#xff0c;通过将DHTMLX Gantt集成工具栏来简化交互&#xff0c;为此选用了DHTMLX Suite的Toolbar&#…

互联网大厂不喜欢提拔老实人,因为老实人除了老实和干活踏实之外,在职场没其他优点...

上一篇&#xff1a;一线体面男的收入 最近&#xff0c;在互联网上有一个热门的话题&#xff0c;戳中了很多人的内心。 一位来自互联网的朋友发帖吐槽职场&#xff0c;说领导都不喜欢提拔老实人。因为老实人一般除里老实和干活踏实外&#xff0c;在职场基本没有其他的优点&#…

L8打卡学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 SVM与集成学习 SVMSVM线性模型SVM非线性模型SVM常用参数 集成学习随机森林导入数据查看数据信息数据分析随机森林模型预测结果结果分析 个人总结 SVM 超平面&…