Unity学习日志

news2024/9/24 9:24:30

目录

获取相机可视范围的世界坐标(2D)

视口转世界坐标和屏幕转世界坐标的区别:

屏幕转世界坐标

视口转屏幕坐标

视口转屏幕结合3D数学实现可视范围的怪物生成

transform.up游戏对象的方向问题

其实还有一种不用Translate的写法:

修改 transform.up 的行为和影响

C#抽象类和接口的区别

获取相机可视范围的世界坐标(2D)

// 获取摄像机到z=0平面的距离
float zDistance = Mathf.Abs(Camera.main.transform.position.z); 

Vector3 bottomLeft = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, zDistance));
Vector3 topRight = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, zDistance));

// 计算转换后的中心点和大小等
Vector2 center = (topRight + bottomLeft) / 2;
Vector2 size = new Vector2(topRight.x - bottomLeft.x, topRight.y - bottomLeft.y);

视口转世界坐标和屏幕转世界坐标的区别:

屏幕转世界坐标

屏幕坐标系统是以像素为单位,原点(0,0)通常位于屏幕的左上角,x轴向右增加,y轴向下增加。屏幕坐标表示的是屏幕上每一个像素的位置。

在Unity中,可以使用Camera.ScreenToWorldPoint()方法将屏幕坐标转换成世界坐标。这通常用于鼠标点击或触摸屏事件,因为这些输入事件提供的坐标基于屏幕像素。

比如说将鼠标在屏幕上点击的位置转化为世界坐标:

Vector3 screenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distanceFromCamera);//这个距离是根据自己想要检测的目标所在的平面而决定的
Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);

视口转屏幕坐标

视口坐标系统用的是一种从0到1的范围,其中(0,0)表示视口的左下角,(1,1)表示右上角。视口坐标与屏幕的实际分辨率无关,因此更加灵活和通用。

在Unity中,Camera.ViewportToWorldPoint()方法被用来将视口坐标转换为世界坐标。这对于定位相对于摄像机视图百分比位置的对象非常有用。

应用:将可视范围转化为世界坐标,得到在世界坐标中的可视范围,可用于参与一些检测啥的

视口转屏幕结合3D数学实现可视范围的怪物生成

 private void CalculateCurrentProducePosition()
 {
// 获取摄像机到z=0平面的距离
     float zDistance = Mathf.Abs(Camera.main.transform.position.z); 

     bottomLeft = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, zDistance));
      topRight = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, zDistance));

     // 计算中心点和大小等
      center = (topRight + bottomLeft) / 2;
      size = new Vector2(topRight.x - bottomLeft.x, topRight.y - bottomLeft.y);
 }

 private void GenerateEnemy()
 {
     
     float radiu =size.x/2.0f;
         float angle = Random.Range(0, 359);
//一定要加上中心点啊,3D数学!
        Vector3 generateDir = Quaternion.Euler(0, 0, angle) * new Vector3(0,1f,0) * radiu + new Vector3(center.x, center.y, 0);  //圆上的一个随机点

         GamePoolManager.Instance.TryGetPoolItem("OrdinaryZombies", generateDir, Quaternion.identity);
     
 }

transform.up游戏对象的方向问题

修改 transform.up 是一个改变游戏对象朝向的有效方式,它通过调整对象的旋转来确保其“上”方向与你指定的向量对齐

这个用于比方说子弹的弹头旋转啥的就非常合适,并且效果出奇

在Update中:

transform.up = (target.transform.position - transform.position); //旋转方向朝向指向敌人的向量的方向,(同时也夹杂着这个方向的旋转)

transform.Translate(transform.up * moveSpeed * Time.deltaTime, Space.World);

Space.World是重点,为什么呢,参考下图

不填Space.World,就默认Space.Self,朝向就会变得非常的奇怪

其实还有一种不用Translate的写法:

transform.up = (target.transform.position-transform.position);

transform.position = transform.position+transform.upTime.deltaTimemoveSpeed;

这种写法其实更加不容易出错

关于transform.up的知识点:

修改 transform.up 的行为和影响

  1. 修改旋转:设置 transform.up 会自动调整游戏对象的旋转,以使其上方向与你指定的向量对齐。这一修改涉及到四元数的计算,Unity内部会自动处理这些计算。

  2. 内部实现:在Unity的内部实现中,当你设置 transform.up 时,实际上是在调用 Quaternion.LookRotation 方法。这个方法将新的向上向量和前向向量(如果未明确指定,则使用当前前向向量)作为参数,计算出新的旋转。

  3. 向量归一化:当你设置 transform.up 时,Unity会自动归一化你提供的向量。归一化是将向量的长度标准化为1的过程,这对于方向向量是必要的,因为方向向量的长度不应影响对象的旋转

对比Vector3.up:(Unity手册中关于transform.up的解释)

世界空间中变换的绿轴。

操作游戏对象在世界空间中变换的 Y 轴(绿轴)上的位置。与 Vector3.up 不同,Transform.up 在移动游戏对象的同时,还考虑其旋转。

旋转游戏对象时,表示游戏对象的 Y 轴的绿色箭头也会改变方向。Transform.up 沿绿色箭头所在的轴 (Y) 移动游戏对象。

要在沿 Y 轴移动 GameObject 时忽略旋转,请参阅 Vector3.up。

C#抽象类和接口的区别

接口是 用于规范不同对象的共同行为

而当一个基类变成抽象类的时候,子类去继承,那他们的父类就都是同一个类型了,所以本质上的区别就体现在了这里

也就是说当我们不知道这些子类是否要继承不同的基类的时候,我们通常就可以使用接口来进行规范

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

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

相关文章

OrangePi AIPro:次世代嵌入式边缘AI计算与智能机器人应用开发平台

近年来,随着物联网(IoT)和人工智能(AI)技术的快速发展,嵌入式边缘计算板卡在智能设备中的应用越来越广泛。OrangePi AIpro作为一款轻量化高性能的嵌入式边缘人工智能计算SoC,在硬件配置、AI性能和使用便利性方面都有着突出的表现。本文将详细评测OrangePi AIpro的各个方…

【Flutter】Dialog组件PageView组件

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Flutter学习 🌠 首发时间:2024年5月27日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 目…

重生之while在鸣潮学习HTML

个人主页:终端 今天是开荒的第五天,数据坞都刷了吗,没刷就过来学html! 目录 JavaWeb学习路线 1.HTML入门 1.1什么是HTML 1.2HTML&CSS&JavaScript的作用 1.3什么是超文本 1.4什么是标记语言 1.5HTML基础结构 1.6HTML的…

图形学初识--双线性插值算法

文章目录 为什么需要双线性插值算法?双线性插值算法是什么?如何双线性插值?结尾:喜欢的小伙伴可以点点关注赞哦 为什么需要双线性插值算法? ChatGP回答: 双线性插值(bilinear interpolation&am…

【UE5.1 角色练习】08-传送技能

前言 在上一篇(【UE5.1 角色练习】07-AOE技能)基础上继续实现人物通过鼠标点击然后传送技能的功能。 效果 步骤 1. 首先需要显示鼠标光标,我们可以在玩家控制器中勾选“显示鼠标光标” 2. 在项目设置中添加一个操作映射,设置按…

助力企业标准化搭建--图框模板的创建

古有秦皇书同文、车同轨,今各行各业都有国际标准、国家标准,其目的就是为了标准化、统一化,由此可见标准化的重要性;一个企业若是想规范员工的操作,推行标准化也很重要;因此对于需要绘制电气图纸的行业来说…

路由器交换机直连方案(RM50+RTL8367N)

不经过网口和变压器,实现板级网口扩展。 通过网口,网线连接 板级芯片直接连接,验证OK 激光导航控制板通过路由器上网成功

linux定时任务管理操作

1、Crontab命令格式 crontab [-u username] [-l|-e|-r] 参数: -u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度; -e: 编辑crontab 的工作内容; -l: 查阅crontab的工作内容; -r: 删除所有的crontab的工作内容,若仅…

LangChain 0.2 - 对话式RAG

文章目录 一、项目说明二、设置1、引入依赖2、LangSmith 三、Chains1、添加聊天记录Contextualizing the question聊天记录状态管理 2、合并 四、Agents1、检索工具2、代理建造者3、合并 五、下一步 本文翻译整理自:Conversational RAG https://python.langchain.co…

【电控实物-PMSM】

遗留问题 电流环闭环 电流环频率会受到编码器回传频率影响? Ld&Lq辨识 L观测器设计验证 滑膜观测器/高频注入 前馈(加大负载) 各种电流控制模式: 参数辨识 Ld&Lq

Latex:newcommand

参考文献&#xff1a; latex中自定义的命令———\newcommand-CSDN博客LaTeX技巧924&#xff1a;详解newcommand的参数和默认值 - LaTeX工作室 (latexstudio.net) 文章目录 (re)newcommand自定义的一些命令 (re)newcommand ”定义命令“ 的定义&#xff1a; \newcommand{<…

Oladance、韶音、南卡开放式耳机选哪个?2024年主流产品硬核测评!

近期&#xff0c;不少朋友向我咨询关于挑选开放式耳机的建议&#xff0c;希望找到既适合自己又具有高品质的选项。鉴于市场上开放式耳机品牌繁多&#xff0c;每款产品在音质、佩戴感受及整体性能上的表现各有千秋&#xff0c;正确选择一款耳机成为了音乐爱好者们关注的焦点。错…

147.栈与队列:滑动窗口最大值(力扣)

代码解决 class Solution { private:class MyQueue{public:deque<int> que;// 删除队列中的元素&#xff0c;如果该元素等于队列的front// 这是为了保持队列中元素的正确性void pop(int val){if(!que.empty() && val que.front()){que.pop_front();}}// 添加元素…

ABeam 德硕 Team Building | SDC Green Day——环保公益行动

山野好拾光 春日公益行 继上年度大连办公室Green Day活动的顺利举办&#xff0c;环保的理念更加深入到ABeam每一位员工的心中。春日天气晴好&#xff0c;西安办公室的小伙伴们也迫不及待来上一场说走就走的Green Day Outing活动。 本次环保公益行动主题为「夏日Go Green畅享山…

AI预测体彩排3采取888=3策略+和值012路一缩定乾坤测试5月27日预测第3弹

今天继续基于8883的大底进行测试&#xff0c;今天继续测试&#xff0c;好了&#xff0c;直接上结果吧~ 首先&#xff0c;888定位如下&#xff1a; 百位&#xff1a;7,6,8,5,9,2,0,1 十位&#xff1a;1,2,4,3,6,7,8,9 个位&#xff1a;2,1,0,3,4,5,6,7 …

amis 文件上传 大文件分块上传

amis 图片/文件上传组件 receiver&#xff1a;参数配置为上传接口。 {"type": "input-image", // "type": "input-file","label": "照片","name": "url", "imageClassName": &qu…

德勤:中国、印度等对ChatGPT等生成式AI应用,处领先地位

全球四大会计事务所之一的德勤&#xff08;Deloitte&#xff09;在官网发布了一份&#xff0c;名为《Generative AI in Asia Pacific: Young employees lead as employers play catch-up》的深度调查报告。 主要查看中国、澳大利亚、印度、日本、新加坡、韩国、中国台湾等亚太…

RocketMq源码解析三:路由管理

Nameserver的主要作用是为消息的生产者和消息消费者提供关于主题Topic的路由信息&#xff0c;那么Nameserver需要存储路由的基础信息&#xff0c;还要管理Broker节点&#xff0c;包括路由注册、路由删除等。 一、路由元数据 路由元数据主要保存了topic信息&#xff0c;broker信…

蓝卓入选工信部2023年度“揭榜挂帅”项目

蓝卓“面向多元异构和应用快速开发演化的智能工厂操作系统解决方案”&#xff0c;凭借行业领先的平台技术能力以及数智赋能的硬核实力成功揭榜挂帅。 本次入选不仅代表了蓝卓又一次获得工信部权威专家及国家认可&#xff0c;更是“工厂操作系统”首次在国家层面获得表彰。 智能…