IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 每日笔试题练习2 -> 正文阅读

[游戏开发]每日笔试题练习2

一、用代码如何实现创建空物体?如何删除一个游戏物体?如何删除游戏物体中的某个脚本?

答:

public GameObject  prefab;//被克隆的对象
private void Start()
{
    //第一种创建物体的方式 new GameObject();
    GameObject obj= new GameObject("Cube");//第一个参数是创建物体的名字(可填可不填)

    //第二种创建物体的方式
    GameObject.Instantiate(prefab);

    //第三种创建物体的方式
    GameObject.CreatePrimitive(PrimitiveType.Cube);//用来创建基本模型  如 正方体 胶囊体等等
    GameObject.CreatePrimitive(PrimitiveType.Plane);

    //获取组件:.GetComponent<>()
    //增加组件:.AddComponent<>()
    //删除物体:Destroy(gameObject)
    //删除物体组件:Destroy(gameObject.GetComponent<>())
}

二、什么是反射?

答:是指程序访问,检测和修改它本身状态的一种机制,还可以动态创建实例并执行其中的方法。反射是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型 (包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。有了反射,即可对每一个类型了如指掌,如果获得了构造函数的信息,即可直接创建对象。c#反射另一种定义:审查元数据并收集元数据的信息。
元数据:编译后的最基本数据单元,就是一堆表,反射就是解析这些元数据。
反射是在运行期间获取到类、对象、方法、数据的一种手段
主要使用类库System.Reflection
反射要点:如何获取类型,根据类型来动态创建对象,反射获取方法以及动态调用方法,动态创建委托
一、动态获取类型信息
1.System.Reflection.Assembly.Load(“XXXX.dll”) 动态加载程序集
2.System.Type.GetType(“XXXX类名”); //动态获取某程序集中某类信息
3.obj.GetType(); //已知对象获取类信息 ——或者——typeof(类型) //已知类类型
二、动态创建对象实例(上一步操作后获得类对象)
System.Activator.CreateInstance(Type type);
三、动态访问成员调用方法(上一步操作后已获取实例对象)
System.Reflection.MethodInfo method = type.GetMethod(“方法名”);//获得方法
System.Reflection.MethodInfo.Invoke(object , new object[]{参数}) //调用的类实例和实例参数

核心类
System.Reflection.Assembly 描述程序集
System.Type 描述类
System.Reflection.FieldInfo 描述了类的字段
System.Reflection.ConstructorInfo 描述构造函数
System.Reflection.MethodInfo 描述类的方法
System.Reflection.PropertyInfo 描述类的属性

反射耗性能,lua是动态语言,一种小巧的脚本语言,会使用反射机制。
手机端不支持编译,需要热更方案,通过lua的反射机制将旧的DLL文件替换成新的DLL文件。
?

三、Assetbundle中unload(false)和unload(true)的区别

答:当参数是false时,会释放掉assetbundle里面的关于资源的压缩文件数据。AssetBundle

1.参数为false时,bundle内的序列化数据将被释放,但是任何从这个bundle中实例化的物体都将完好,所以不能从这个bundle中加载更多物体。
2.参数为true时,所有从该bundle中加载的物体也将被销毁,如果场景中有物体引用该资源,引用会丢失。

四、快速排序

答:

        void QuickSort(int[] nums, int left, int right)//数组,起始下标,数组长度
        {
            if (left < right)    //直到排序的左右区间只剩一个值(递归停止条件)
            {
                int i = left;
                int j = right - 1;
                int middle = nums[(left + right) / 2];
                while (true)
                {
                    while (i < right && nums[i] < middle) { i++; };  //在middle左边找到一个比middle大的值
                    while (j > 0 && nums[j] > middle) { j--; };       //在middle右边找到一个比middle小的值
                    if (i == j) break;                 //当i=j时,middle左边都是比middle小的数,右边都是比middle大的;跳出循环
                    nums[i] = nums[i] + nums[j];  
                    nums[j] = nums[i] - nums[j];
                    nums[i] = nums[i] - nums[j];     //两个值交换位置
                    if (nums[i] == nums[j]) j--;    //如果两个值相等,且等于middle,为避免进入死循环,j--
                }
                QuickSort( nums, left, i);           //递归 
                QuickSort( nums, i + 1, right);      
            }
        }

五、Application.persistentDataPath路径的作用

答:Application.persistentDataPath,热更的重要路径,该文件夹可读可写,在移动端唯一一个可读写操作的文件夹。?

移动端可以将本地的资源(资源MD5值配置表)等一些文件放到StreamingAssets文件夹下,通过Copy到persistentDataPath下与服务器的版本文件配置表作比对,完成资源的热更。

为什么不在StreamingAsset文件夹下直接操作?因为该文件夹只读,不可写,资源无法更新进去。

为什么不在persistentDataPath文件夹操作,因为该文件夹是apk安装以后,才会形成的一个文件夹,无法提前创建。

六、Application.dataPath路径的作用

答:Application.dataPath是指包含游戏数据文件夹的路径(只读),也就是Unity编辑器中的Assets文件夹,用于存放游戏数据,打包后不可直接访问

七、Resources文件夹的作用

答:Resources常用于存放游戏资源素材及预制体,程序运行时,通过 Resources.Load() 等API 来读取数据对象。由于Unity 无法判断脚本有没有访问到 Resources 中的资源,所以 Resources 文件夹下的资源,不管用不用都会被打包发布到程序中,生成一个resources.assets ( 缺省的AssetBundle )

八、Application.StreamingAssetsPath路径的作用

答:StreamingAssets ―― 二进制流资源文件夹,默认情况下, Unity 是没有 StreamingAssets 文件夹的,我们需要自行创建,StreamingAssets文件夹放在 Assets 目录下面。StreamingAssets 与 Resources 区别在Resources文件夹下的资源打包发布时,会进行一次压缩和加密,StreamingAssets 文件夹下的资源打包发布时,原封不动(不进行任何处理),所以 StreamingAssets 一般放置数据资源文件,比如 Json /Xml 等数据文件,在PC/MAC中可实现对文件的“增删改查”等操作,但在移动端是一个只读路径,程序打包发布后,根据平台的差异性 (Windows, Ios ,Android),StreamingAssets文件夹中的资源,所在的位置也不同,目录名称也会发生变更

Unity3D各平台Application.xxxPath的路径

Unity特殊文件夹以及各平台Application.xxxPath的路径图文详解教程

九、如何判断两个矩形是否相交

答:如果两个矩形相交,那么两个矩形中心点间的距离肯定小于各自边长和的一半。

设A[x01,y01,x02,y02] ?B[x11,y11,x12,y12].

矩形A和矩形B物理中心点X方向的距离为Lx:abs( (x01+x02)/2 – (x11+x12) /2)

矩形A和矩形B物理中心点Y方向的距离为Ly:abs( (y01+y02)/2 – (y11+y12) /2)

矩形A和矩形B X方向的边长为 Sax:abs(x01-x02) ?Sbx: abs(x11-x12)

矩形A和矩形B Y方向的边长为 Say:abs(y01-y02) ?Sby: abs(y11-y12)

如果AB相交,则满足下列关系:

Lx 小于等于 (Sax + Sbx)/2 并且 Ly 小于等于(Say+ Sby)/2

static bool is_rect_intersect(int x01, int x02, int y01, int y02, int x11, int x12, int y11, int y12)
{
	int zx = abs(x01 + x02 -x11 - x12);
	int x  = abs(x01 - x02) + abs(x11 - x12);
	int zy = abs(y01 + y02 - y11 - y12);
	int y  = abs(y01 - y02) + abs(y11 - y12);
	if(zx <= x && zy <= y)
		return true;
	else
		return false;
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:33:05  更:2021-12-26 22:35:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:33:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码