Unity3d面试6 DontDestroyOnLoad();PlayerPrefs;协同程序;游戏框架;Unity中播放视频;LOD技术

本文主要是介绍Unity3d面试6 DontDestroyOnLoad();PlayerPrefs;协同程序;游戏框架;Unity中播放视频;LOD技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity问答第3期

http://www.taidous.com/bbs/forum.php?mod=viewthread&tid=36888


1,如何避免点击UI按钮时穿透,同时触发了相同位置场景模型的点击事件的情况?(NGUI 判断 是否点击到UI

答:1,通过射线分层处理显示层分为不同的Layer,用UICamera发射一条射线并脚本里设置他的响应事件的层。
    2,在高版本的NGUI中,UICamera中有一个变量isOverUI,这个值为真时表示点击到了UI,反之就是没有。

2,切换场景时,如何让背景音乐持续播放,而不是重新播放?
答:1,使用DontDestroyOnLoad()方法挂载一个音乐组件,当然这个方法也可以保存一些全局游戏脚本。
        但是使用时避免重复调用,可以用判断的方式来调用或者销毁但是不是很好,最好的方式是写个
        静态全局的单例类,在游戏初首次进入时绑定这个脚本,这样这个方法永远只会走一遍。

public static Global instance;static Global()
{GameObject go = new GameObject("Globa");DontDestroyOnLoad(go);instance = go.AddComponent<Global>();
}public void DoSomeThings()
{Debug.Log("DoSomeThings");
}void Star()
{Debug.Log("Start");
}


3,如何实现游戏存档和读档的功能?
答:1,Unity提供了一个用于本地持久化保存与读取的类——PlayerPrefs。工作原理非常简单,以键值对
        的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值。
        PlayerPrefs类支持3中数据类型的保存和读取,浮点型,整形,和字符串型
        分别对应的函数为:
这些函数的用法基本一致使用Set进行保存,使用Get进行读取
        SetInt();保存整型数据;
        GetInt();读取整形数据;


        SetFloat();保存浮点型数据;
        GetFlost();读取浮点型数据;


        SetString();保存字符串型数据;
        GetString();读取字符串型数据;


     2,XML,sql,txt等配置文件都可以实现存读等功能,PlayerPrefs自带的类只能实现简单的存取功能。

        XML存档参考http://blog.sina.com.cn/s/blog_471132920101d3kh.html。

4,什么是协同程序?请举一个游戏中应用协程的例子。


答:Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator,它允许你为自己的集合类型编写枚举器。

    1,所谓协同,就是在主程序运行的时间同时开启另外一段逻辑处理,来协同当前程序的执行,


       当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程
       序的继续执行,可以协同工作。


    2,在游戏中游戏开始前的倒计时就可以用到协同程序网络游戏的加载进度游戏中的顺序控制等。
       下面举个计时的例子,方法的状态被存储了,这使得方法中定义的这些变量都会保存它们的值,即使是在不同的帧中

IEnumerator CountSeconds()  
{  int seconds = 0;  while(true)  {  for(float timer = 0; timer < 1; timer += Time.deltaTime)  Yield return 0;  seconds++;  Debug.Log(seconds +" seconds have passed since the Coroutine started.");  }  
}

5,什么是游戏框架?使用框架的好处是什么?
答:1,游戏框架是比较上层的封装,是一套快速搭建游戏的代码结构。
    2,使用游戏框架开发能节约工程时间,易维护,易扩展,易阅读开发,可复用。
       选择框架和使用框架是控制框架的基础。

6,如何在Unity中播放视频?
答:1,首先下载安装Quicktime,U3D承认的视格式为.mov, .mpg, .mpeg, .mp4, .avi, .asf格式。
    2,创建一个对象,使用对象拖拽的形式Mov Texture对象赋值,之后就可以在脚本中使用它了。

public class Test : MonoBehaviour
{// 电影纹理public MovieTexture movTexture;void Start(){// 设置当前对象的主纹理为电影纹理renderer.material.mainTexture = movTexture;// 设置电影纹理播放模式为循环movTexture.loop = true;}void OnGUI(){if(GUILayout.Button("播放/继续")){//播放/继续播放视频if(!movTexture.isPlaying)movTexture.Play();}if(GUILayout.Button("暂停播放"))movTexture.Pause();	//暂停播放if(GUILayout.Button("停止播放"))movTexture.Stop();}}

3,另一种是看MOMO帖子学来的,用GUI的方式,直接调用DrawTexture()。程序参考MOMO帖子
       http://www.xuanyusong.com/archives/1019
7,跑酷游戏的无尽关卡是如何生成的?
答:设计多种场景块,加载到对象池对象缓存复用,根据游戏内容制定随即组合的规则,然后根据规则
    调用不同的场景块。例如有的场景是特定场景。用量化的方法定义难度。

8,如何增强ARPG Action Role Playing Game 游戏的打击感?
答:1,从美术资源上看,不管是2D还是3D角色的动作流畅度跟动画的合理性都能提高游戏的打击感。
    2,游戏中角色的技能或者特定动作加上拖尾效果,多一些技能特效画面扭曲效果被打击方的状态控制
    3,相机,也就是主视角可以增加震动效果,镜头的一些特效,例如主角的健康状态显示等。
    4,音效的增加,音效是非常非常重要的一个选项。
    5,设备上的体现,理由手机或者游戏手柄的震动

9,游戏慢镜头回放功能的实现思路?足球游戏中的精彩镜头回放
答:1,直接录屏将整个动画保存出mp4格式进行压缩,如果是PC端的话找一些录屏插件,移动端也有插件不过好像
       都不支持视频保存,记录回放插件EzReplayManagerEveryPlay移动端插件都比较好用
    2,状态记录同步记录每一帧所有角色状态,包括位置,旋转等,这种方式代码比较容易实现,
       文件量会比较大,3分钟视频,一秒钟30帧,需要36030 = 5400帧如果每个角色每一帧都进行
       记录至少要3M以上,如果角色少做一些简单的优化比如,只有发生修改的时候才记录会明显的
       降低文件量,但是对于移动端流量还是很有压力。

10,LOD技术是什么?优缺点是?
答:1,LOD是Levels of Detail的简称,译为多细节层次LOD技术指根据物体模型的节点在显示环境中所处的位置
       和重要度,决定物体渲染的资源分配降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
       一个有关于LOD的插件Mesh Baker LOD 1.4
    2,LOD的优点可以根据距离动态地选择渲染不同细节的模型
    3,LOD缺点增加游戏容量,不同细节的模型要准备多个,同时增加美术的工作量





这篇关于Unity3d面试6 DontDestroyOnLoad();PlayerPrefs;协同程序;游戏框架;Unity中播放视频;LOD技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820779

相关文章

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

C++面试八股文:std::deque用过吗?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官:deque用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。 面试官:那你知道STL中的stack是如何实现的吗? 二师兄:默认情况下,stack使

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

剑指offer(C++)--孩子们的游戏(圆圈中最后剩下的数)

题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去