• Unity3d面试6


    1,如何避免点击UI按钮时穿透,同时触发了相同位置场景模型的点击事件的情况?(NGUI)
    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对象赋值,之后就可以在脚本中使用它了。

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

    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端的话找一些录屏插件,移动端也有插件不过好像
           都不支持视频保存,记录回放插件EzReplayManager,EveryPlay等移动端插件都比较好用
        2,状态记录同步,记录每一帧所有角色状态,包括位置,旋转等,这种方式代码比较容易实现,
           文件量会比较大,3分钟视频,一秒钟30帧,需要36030 = 5400帧如果每个角色每一帧都进行
           记录至少要3M以上,如果角色少做一些简单的优化比如,只有发生修改的时候才记录会明显的
           降低文件量,但是对于移动端流量还是很有压力。

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

  • 相关阅读:
    六大关系整理
    pthread_create多线程执行顺序诡异现象
    WinForm中 事件 委托 多线程的应用
    伪ajax上传文件
    Webx小应用的实现整理与分析
    IL反编译的实用工具
    MVC4+WebApi+Redis Session共享练习(上)
    虚拟化平台cloudstack新版本的调试
    【c++】指针参数是如何传递内存的
    NPinyin 中文转换拼音代码
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6343978.html
Copyright © 2020-2023  润新知