【问题笔记】Unity3d 官方教程之Tank Tutorial篇-程序员宅基地

技术标签: Unity3d  Tank Tutorial  

TankTutorial

声明:所有图片均来源于Unity3d官网案例Tank Turtorial中下载的pdf教案
Tank Tutorial-传送门

1.Perspective(透视)和Orthographic(正交)视图的区别?
这里写图片描述
透视模式的Camera中,画面呈现近大远小效果(左图)
正交模式的Camera中,画面呈现场景中各物体到摄像机的距离相等效果(右图)

2.Camera Scrpits中的Zoom问题?

/*
 *  CameraControl Script - FindRequiredSize()
 *      https://unity3d.com/learn/tutorials/projects/tanks-tutorial/camera-control?playlist=20081
 */
    private float FindRequiredSize()
        {
            // Find the position the camera rig is moving towards in its local spcae.
            Vector3 desiredLocalPos = transform.InverseTransformPoint(m_DesiredPosition);

            // Start the camera's size calculation at zero.
            float size = 0f;

            // Go through all the targets...
            for (int i = 0; i < m_Targets.Length; i++) {
                // ... and if they aren't active continue on to the next target.
                if (!m_Targets [i].gameObject.activeSelf)
                    continue;

                // Otherwisee, find the position of the target in the camera's local space.
                Vector3 targetLocalPos = transform.InverseTransformPoint(m_Targets[i].position);

                // Find the position of the target from the desired position of the camera's local spcae.
                Vector3 desiredPosToTarget = targetLocalPos - desiredLocalPos;

                // Choose the largest out of the current size and the distance of the tank 'up' or 'down' from the camera.
                size = Mathf.Max(size, Mathf.Abs(desiredPosToTarget.y));

                // Choose the largest out of the current size and the calculated size based on the tank being to the left or right of the camera.
                size = Mathf.Max(size, Mathf.Abs(desiredPosToTarget.x)/m_Camera.aspect);
            }

            // Add the edge buffer to the size.
            size += m_ScreenEdgeBuffer;

            // Make sure the camera's size isn't below the minimum.
            size = Mathf.Max(size, m_MinSize);

            return size;
        }

 正交Camera的Zoom是通过调整Size来实现的。
 调整Camera的SIZE值使得两辆Tank都能出现在画面中。方法如下:
 
  这里写图片描述
  首先解释ASPECT是怎么得到的:
  例子:
   1080p表示屏幕显示是由1920 * 1080个像素组成的;
   1920 * 1080 的aspect ratio为16:9;
   aspect = 16/9 = 1.778;
   Camera物体本身具有aspect属性
 
 为了保证Camera中能够完全显示所有玩家的Tank,Zoom函数要计算出最适合的Size.。
 这里写图片描述
 首先,通过移动Camera的Y轴(注意是绿绿的Y轴),直到所有Tank都在Camera中出现,则此时Camera的偏移量可被视作SIZE.
 其次,Camera所在的位置和最远处Tank的距离向量在水平方向上的距离可被视为SIZE*ASPECT.
 最后,在两个SIZE中择优(大),取得的SIZE能够保证所有Tank都处在Camera的画面中,但由于视野范围太小,看起来不舒服,因此需要添加额外的SIZE来扩大Camera的视野,同时设立最小SIZE能够保证当两个Tank靠得太近时,视野不至于太小。
 
3.通过Physics.OverLapSphere函数可以收集指定范围内所有物体的信息.

4.在进行GameObject的处理时要时刻注意:
 最好是对空物体添加组件而不是对已经制作好的Model添加组件;
 在动画制作中称为层次动画:针对群组节点制作动画而不是几何体。
 
5.当一个GameObject包含太多的Scripts时:
 可以建立一个不继承任何类的脚本去管理该GameObject.例如TankManager。
 
6.Shooting Script中对if语句的顺序迷茫时:
 可以根据玩家操作顺序来决定,先点击按钮-保持按钮-松开按钮.。
 
7.游戏整体逻辑非常重要,要是设计不得当会导致编码时bug频出,思维混乱。因此,事先构图是很有必要的,需要养成习惯,多加练习。

8.下一个回顾练习 Survival Shooter! 这会是一个漫长的旅途,忍耐忍耐,一定能够找到游戏的美妙之处!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MadBam_boo/article/details/79551460

智能推荐

【我的世界Minecraft-MC】常见及各种指令大杂烩【2022.8版】_summon生成掉落物-程序员宅基地

文章浏览阅读8.5k次,点赞7次,收藏22次。execute as @a at @s run clear @s minecraft:dark_oak_planks{display:{Name:“{“text”:“第三关[阴森古堡]”,“color”:“red”,“italic”:false}”,color:“16711680”},Enchantments:[{id:“protection”,lvl:1}],Unbreakable:1b} 1。Lore:[“{“text”:“免费”,“color”:“blue”,“italic”:false}”]..._summon生成掉落物

CentOS 7安装教程(图文详解)_centos 安装-程序员宅基地

文章浏览阅读10w+次,点赞487次,收藏2.1k次。CentOS 7安装教程: 准备: 软件:VMware Workstation 镜像文件:CentOS-7-x86_64-bin-DVD1.iso (附:教程较为详细,注释较多,故将操作的选项进行了加粗字体显示。) 1、文件--新建虚拟机--自定义 2、..._centos 安装

第1篇 目标检测概述 —(2)目标检测算法介绍_检测类算法的作用-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏8次。目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。本节课就给大家重点介绍下基于深度学习的目标检测算法!_检测类算法的作用

Linux编译mplayer播放badapple及编译fbv加载图片(基于V3S预告板子要开源了)_v3s笔记-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏15次。Linux编译mplayer播放badapple及编译fbv加载图片(基于V3S)1.编译前准备:1.linux5.10内核2.2018.02bulidroot3.v3s板子2.linux内核配置1.修改设备树(linux-5.10/arch/arm/boot/dts/文件夹下)1.修改sun8i-v3s.dtsi文件的最后一个dma的位置添加以下代码: codec_analog: codec-analog@01c23000 { compatible = "allwinner,sun_v3s笔记

我们应如何度过自己的大学生活?_如何度过大学生活1000字-程序员宅基地

文章浏览阅读3.1k次。我们应如何度过自己的大学生活?  踏着九月的烈日,我们成功地来到了河南理工大学,开始了我们的大学生活,那么你可曾想过,我们到底应该如何度过我们的大学生活才算有意义呢?  可曾记得高中老师说的最多的一句话:“好好学吧!上了大学就轻松了!”每当听到这句话时都会给我们莫大的鼓励,也让我们对大学充满了憧憬。那么大学生活真如高中老师说的那样轻松吗?其实不然!高中老师所谓的轻松只是在一定程度上正课的时..._如何度过大学生活1000字

python snownlp情感分析简易demo(分享),没有我Python干不成的事!_snowlp情感分析代码-程序员宅基地

文章浏览阅读745次。SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。MIT许可下发行。其github主页可能有些不准确,我也是随便提取的数据,不过snownlp还是号称情感分析准确很高的!_snowlp情感分析代码

随便推点

java exit方法_Java:如何测试调用System.exit()的方法?-程序员宅基地

文章浏览阅读694次。问题我有一些方法应该在某些输入上调用567779278。不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止了JVM,而不仅仅是当前线程。是否有任何常见的处理方式?例如,我可以将存根替换为System.exit()吗?[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试。也许JUnit根本不适合这份工作?建议使用互补回归测..._检查system.exit

如何在金山云上部署高可用Oracle数据库服务_rman target sys/holyp#ssw0rd2024@gdcamspri auxilia-程序员宅基地

文章浏览阅读788次。如何在金山云上部署高可用Oracle数据库服务根据不同需求,基于金山云云服务器、专属云、物理主机、云硬盘和托管服务自建Oracle数据库,通过Oracle Data Guard实现高可用,实现主备数据复制、有计划切换(Switchover)和故障切换(Failover),并利用对象存储归档数据库历史数据。具体的架构示意图如下:本文介绍采用金山云云服务器搭建高可用Oracle数据库(采用版本是..._rman target sys/holyp#ssw0rd2024@gdcamspri auxiliary sys/holyp#ssw0rd2024@gd

Spring整合Activemq-程序员宅基地

文章浏览阅读7.6k次,点赞6次,收藏10次。spring整合activemq_spring整合activemq

语义分割入门的总结-程序员宅基地

文章浏览阅读740次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达作者:Yanpeng Sunhttps://zhuanlan.zhihu.com/p/74318967声明:仅做学术分..._语义分割两个目标重合怎么

SpringBoot实践(三十五):JVM信息分析_怎样查看springboot项目的jvm状态-程序员宅基地

文章浏览阅读902次。JVM分析可以也可以使用,那么什么时候用到jvm信息分析呢,一般生产测试环境,能够最大化将问题暴露,但是总有些问题只有生产运行很长时间后才会被发现,jvm分析经常用于运行了很久的系统有异常情况时的调优,比如堆内存本身分配不合理,新生代中eden比例太低等。_怎样查看springboot项目的jvm状态

基于springboot+vue的戒毒所人员管理系统 毕业设计-附源码251514_戒毒所管理系统-程序员宅基地

文章浏览阅读288次。戒毒所人员管理系统的开发是采用java语言,基于MVVM模式进行开发,采取MySQL作为后台数据的主要存储单元,采用Springboot框架实现了本系统的全部功能。戒毒所人员管理系统,具有戒毒人员管理、尿检管理、戒毒管理、治疗分类、社会跟踪等功能,本系统代码的复用率高,系统维护代价小,具有方便、灵活、高效等特征。_戒毒所管理系统