Unity3D相关面试题

2023-11-06

Unity3D相关面试题

第一部分

1.请简述值类型与引用类型的区别
  1. 值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址。
  2. 值类型存取快,引用类型存取慢。
  3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。
  4. 栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放。
  5. 值类型继承自System.ValueType,引用类型继承自System.Object

参考:https://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html

2.C#中所有引用类型的基类是什么

引用类型的基类是System.Object
值类型的基类是System.ValueType。同时,值类型也隐式继承自System.Object

3.请简述ArrayList和List的主要区别

ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理),装箱拆箱的操作(费时)。
List是接口,ArrayList是一个实现了该接口的类,可以被实例化。

4.请简述GC(垃圾回收)产生的原因,并描述如何避免?

GC回收堆上的内存。
避免:

  1. 减少new产生对象的次数
  2. 使用公用的对象(静态成员)
  3. String换为StringBuilder
5.请描述Interface与抽象类之间的不同

抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面 ,不能具体的实现代码在成员方法中。
类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。
实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。
参考:http://www.cnblogs.com/seapub/archive/2012/08/08/2628433.html

6.请简述关键字Sealed用在类声明和函数声明时的作用

类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。

7.请简述private,public,protected,internal的区别
  • public:对任何类和成员都公开,无限制访问
  • private:仅对该类公开
  • protected:对该类和其派生类公开
  • internal:只能在包含该类的程序集中访问该类;protected internalprotected + internal
8.反射的实现原理?

审查元数据并收集关于它的类型信息的能力。
参考:http://blog.163.com/xuanmingzhiyou@yeah/blog/static/1424776762011612115124188/
反射个人认为,就是得到程序集中的属性和方法。
实现步骤:

  1. 导入using System.Reflection;
  2. Assembly.Load(“程序集”)加载程序集,返回类型是一个Assembly
  3. foreach (Type type in assembly.GetTypes()){ string t = type.Name; }得到程序集中所有类的名称。
  4. Type type = assembly.GetType("程序集.类名");获取当前类的类型。
  5. Activator.CreateInstance(type);创建此类型实例。
  6. MethodInfo mInfo = type.GetMethod("方法名");获取当前方法。
  7. mInfo.Invoke(null,方法参数);
9 .Net与Mono的关系?

Mono官网主页:

Mono is a software platform designed to allow developers to easily create
cross platform applications. Sponsored by Xamarin, Mono is an open source
implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime.

mono是.net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。.net只能在windows下运行,mono可以实现跨平台跑,
可以运行于linux,Unix,Mac OS等。

10.简述unity3d支持的作为脚本的语言的名称

Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。
Unity里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。

  • JavaScript:和网页中常用的JavaScript不一样,它编译后的运行速度很快,语法方面也会有不少区别。
  • C#
  • Boo:可以看做是Python语言的变种,又糅合了Ruby和C#的特性,它是静态类型语言
11.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?

仅能从主线程中访问Unity3D的组件。
支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine
注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象。

12.Unity3D的协程和C#线程之间的区别是什么?

多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问Unity3D的对象、组件、方法。
Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而LoadLevelAsync则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用loading条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜。
参考:http://blog.csdn.net/kongbu0622/article/details/8775037

13.U3D中用于记录节点空间几何信息的组件名称,及其父类名称

Transform父类是Component

14.简述四元数的作用,四元数对欧拉角的优点?

四元数用于表示旋转。
相对欧拉角的优点:

  1. 能进行增量旋转。
  2. 避免万向锁。
  3. 给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)。
15.向量的点乘、叉乘以及归一化的意义?
  1. 点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影。
  2. 叉乘得到的向量垂直于原来的两个向量。
  3. 标准化向量:用在只关系方向,不关心大小的时候。
16.矩阵相乘的意义及注意点

用于表示线性变换:旋转、缩放、投影、平移、仿射。
注意矩阵的蠕变:误差的积累。

17.为何大家都在移动设备上寻求U3D原生GUI的替代方案

不美观,OnGUI很耗费时间,使用不方便 ,DrawCall

18.请简述如何在不同分辨率下保持UI的一致性

NGUI很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的size。参考:http://blog.csdn.net/mfc11/article/details/17681429
当前UGUI也已经更新的非常完善。

19.为什么dynamic font在unicode环境下优于static font

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
使用动态字体时,Unity将不会预先生成一个与所有字体的字符纹理。当需要支持亚洲语言或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。

20.Render的作用?描述MeshRender和SkinnedMeshRender的关系与不同

A renderer is what makes an object appear on the screen。

Mesh就是指模型的网格(同名组件是用于调整网格属性的),MeshFilter一般是用于获得模型网格的组件,而MeshRender是用于把网格渲染出来的组件,

21.简述SkinnedMesh的实现原理

参考:http://blog.csdn.net/n5/article/details/3105872

22.在场景中放置多个Camera并同时处于活动状态会发生什么?

游戏界面可以看到很多摄像机的混合。

23.Prefab的作用?如何在移动环境的设备下恰当地使用它?

Prefab在实例化的时候用到,主要用于经常会用到的物体,属性方便修改。
参考:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html

24.如何销毁一个UnityEngine.Object及其子类

Destory

25.为什么Unity3D中会发生在组件上出现数据丢失的情况?

组件上绑定的对象被删除了。

26.如何安全的在不同工程间安全地迁移asset数据?三种方法
  1. 将Assets目录和Library目录一起迁移。
  2. 导出包。
  3. 用unity自带的assets Server功能。
27.MeshCollider和其他Collider的一个主要不同点?

Meshcollider再快也是基于V3顶点~~ 建议还是用boxcolliderboxcollider本身是基于算法,没有面的概念。

28.当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?

会发生穿透(碰撞检测失败)。
解决方法:

  1. 增大细小物体的碰撞体。
  2. 使用射线检测。
  3. 可以physics time减小,不建议这样做。
  4. 确保rigidbody不超过一定的速度,这个也不实用。
    参考:http://forum.unity3d.com/threads/3353-collision-detection-at-high-speed
29.OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?

Awake -》OnEnable-》Start
OnEnable在同一周期中可以反复地发生。
参考:http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html

30.请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义?

当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。

31.Unity3D如何获取场景中需要加载的数据?
  1. Resource.Load():通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。
  2. AssetBundle:通过bundle的形式:即将资源打成asset bundle放在服务器或本地磁盘,然后使用WWW模块get下来,然后从这个bundle中load某个object
  3. AssetDatabase.loadasset:这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的
32.MeshRender中material和sharedmaterial的区别?

修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。
不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。

第二部分

1.请描述游戏动画有哪几种,以及其原理。

主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。
关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活Quake2中使用了这种动画。
单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。
骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画发展而来的,如今基本都使用骨骼动画来实现角色动画)

2.alpha blend 工作原理

实际显示颜色 = 前景颜色Alpha/255 + 背景颜色(255-Alpha)/255。

3.写光照计算中的diffuse的计算公式
  • 实际光照强度 I= 环境光(Iambient) + 漫反射光(Idiffuse) + 镜面高光(Ispecular);
  • 环境光:Iambient= Aintensity* Acolor; (Aintensity表示环境光强度,Acolor表示环境光颜色)
  • 漫反射光:Idiffuse = DintensityDcolorN.L;(Dintensity表示漫反射强度,Dcolor表示漫反射光颜色,N为该点的法向量,L为光源向量)
  • 镜面反射光:Ispecular = SintensityScolor(R.V)^n;(Sintensity表示镜面光照强度,Scolor表示镜面光颜色,R为光的反射向量,V为观察者向量,n称为镜面光指数)
4.lod是什么,优缺点是什么

LOD技术即Levels of Detail的简称,意为多细节层次。LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
优点:可根据距离动态地选择渲染不同细节的模型。
缺点:加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。

5.两种阴影判断的方法工作原理

阴影由两部分组成:本影与半影。

  • 本影:景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)。
  • 半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)。

求阴影区域的方法:做两次消隐过程。

  • 一次对每个光源进行消隐,求出对于光源而言不可见的区域L;
  • 一次对视点的位置进行消隐,求出对于视点而言可见的面S;
  • shadow area= L ∩ S

阴影分为两种:自身阴影和投射阴影

  • 自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面
    工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。
  • 投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域受不到光照照射而形成的阴影
    工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)
    若是动态光源此方法就无效了。
6.MipMap是什么?作用?

在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MIP map或者mipmap。

7.用u3d实现2d游戏,有几种方式?
  1. 利用引擎自带的GUI、UGUI。
  2. 把摄像机设为Orthographic,用面片作为2d元素。
  3. 利用第三方插件:NGUI、2dToolkit。
8.u3d中碰撞器和触发器的区别?
  • collider碰撞器会有碰撞的效果,isTrigger = false,可以调用OnCollisionEnter/Stay/Exit函数。
  • trigger触发器没有碰撞效果,isTrigger = true,可以调用OnTriggerEnter/Stay/Exit函数。
9.物体发生碰撞的必要条件

物体A必须带有(collider+rigidbody)或者CharacterController,另一个物体也必须至少带有collider

10.CharacterController和Rigidbody的区别

Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的Rigidbody,具有一定的物理效果但不是完全真实的。

11.物体发生碰撞时,有几个阶段,分别对应的函数

三个阶段,OnCollisionEnter/Stay/Exit函数

12.u3d中,几种施加力的方式,描述出来。

rigidbody.AddForce/AddForceAtPosition,都是rigidbody的成员函数

13.什么叫做链条关节

Hinge Joint ,他可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。(简单说就是弹簧)

14.物体自旋转使用的函数叫什么

transform.Rotate

15.物体绕某点旋转使用函数叫什么

transform.RotateAround

16.u3d提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数

PlayerPrefs.SetIntPlayerPrefs.GetInt

17.unity3d提供了几种光源,分别是什么
  • 平行光:Directional Light
  • 聚光灯:Spot Light
  • 点光源:Point Light
  • 区域光源:Area Light(只用于烘培)
18.unity3d从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。

Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy

19.物理更新一般在哪个系统函数里?

FixedUpdate每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。

20.移动相机动作在哪个函数里,为什么在这个函数里。

LateUpdate,是在所有Update结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有Update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

21.当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。

做一个pool,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回。

22.一个场景放置多个camera并同时处于活动状态,会发生什么

实际看到的画面由多个camera的画面组成,由depthClear FlagCulling Mask都会影响最终合成效果。

23.简述prefab的用处和环境

在游戏运行时实例化,prefab相当于一个模版,对你已有的素材、脚本、参数做一个默认配置,以便于以后修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。

24.如何销毁一个UnityEngine.Object以及其子类

Destroy

25.为什么u3d会出现组件上数据丢失的情况

一般是组件上绑定的物体对象被删除了。

26.Vertex Shader是什么?怎么计算?

顶点着色器是一段执行在GPU上的程序,用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。
Vertex Shader对输入顶点完成了从local space到homogeneous space(齐次空间)的变换过程,homogeneous space即projection space的下一个space。在这其间共有world transformation, view transformation和projection transformation及lighting几个过程。

第三部分

1.什么是渲染管道?

是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。
主要步骤有:本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化

2.如何优化内存?

有很多种方式,例如
1.压缩自带类库;
2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
3. 释放AssetBundle占用的资源;
4. 降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5. 使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。

3.什么是协同程序?

在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。

第四部分

1.获取、增加、删除组件的命令分别是什么?
  • 获取:GetComponent
  • 增加:AddComponent
  • 删除:Destroy
2.Animation.CrossFade命令作用是

答案:©
A.动画放大 B.动画转换 C.动画的淡入为其他动画

3.Application.loadLevel命令为

答案:(A)
A.加载关卡 B.异步加载关卡 C.加载动作

4.调试记录到控制台的命令是什么?

Debug.Log();

5.编辑器类存放路径是什么?

工程目录下的Assets/Editor文件夹下。

6.使用原生GUI创建一个可以拖动的窗口命令是什么?

GUI.DragWindow();

7.localPosition与Position的使用区别?

localPosition:自身位置,相对于父级的变换的位置。 Position:在世界坐标transform的位置

8.意义连线
  • Mathf.Round:四舍五入。
  • Mathf.Clamp:限制。
  • Mathf.Lerp:插值。
  • Math.Ceiling:只要有小数都加1
  • Math.Floor:总是舍去小数
9.写一个计时器工具,从整点开始计时,格式为:00:00:00
10.写出Animation的五个方法
11.怎么拿到一个对象上脚本的方法

GameObject.GetComponent<>();

12.请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?
  • 点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;
  • 叉乘的几何意义是:创建垂直于平面,三角形,或者多边形的向量;

第五部分

1.在类的构造函数前加上static会报什么错?为什么?

构造函数格式为public+类名如果加上static会报错(静态构造函数不能有访问修饰符).
原因:静态构造函数不允许访问修饰符,也不接受任何参数;
无论创建多少类型的对象,静态构造函数只执行一次;
运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数;
静态构造函数执行先于任何实例级别的构造函数;
显然也就无法使用thisbase来调用构造函数。

2.C# String类型比stringBuilder类型的优势是什么?

如果是处理字符串的话,用string中的方法每次都需要创建一个新的字符串对象并且分配新的内存地址,而stringBuilder是在原来的内存里对字符串进行修改,所以在字符串处理方面还是建议用stringBuilder这样比较节约内存。但是string类的方法和功能仍然还是比stringBuilder类要强。
string类由于具有不可变性(即对一个string对象进行任何更改时,其实都是创建另外一个string类的对象),所以当需要频繁的对一个string类对象进行更改的时候,建议使用StringBuilder类,StringBuilder类的原理是首先在内存中开辟一定大小的内存空间,当对此StringBuilder类对象进行更改时,如果内存空间大小不够,会对此内存空间进行扩充,而不是重新创建一个对象,这样如果对一个字符串对象进行频繁操作的时候,不会造成过多的内存浪费,其实本质上并没有很大区别,都是用来存储和操作字符串的,唯一的区别就在于性能上。
String主要用于公共API,通用性好、用途广泛、读取性能高、占用内存小。
StringBuilder主要用于拼接String,修改性能好。
不过现在的编译器已经把String+操作优化成StringBuilder了,所以一般用String就可以了。
String是不可变的,所以天然线程同步。
StringBuilder可变,非线程同步。
参考:https://zhidao.baidu.com/question/240364840.html

3.C# 函数Func(string a, string b)用Lambda表达式怎么写?

参考:https://msdn.microsoft.com/zh-cn/library/bb397687.aspx

4.Mesh,Sphere,Box,Capsule,四种碰撞器。请按照性能开销由小到大进行排序。

collider的性能和效率大概的顺序是:Sphere Collider > Capsule Collider> Box Collider > Mesh Collider

5. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存?
  • 使用pool对象池。
  • 使用AssetBundle也可以降低一定内存。
6.Unity中,控制3D人物模型位移方式有几种?Animator组件的Apply Root Motion的作用是?
  1. 常用的位移方式有4种组件,如下方法,除了一下方法还有角色控制器移动。
    • transform.translate()向某方向移动物体多少距离【默认local坐标系】
    • transform.Position()在世界空间坐标transform的位置。
    • RigidBody.Velocity刚体的速度向量。
    • RigidBody.AddForce添加一个力到刚体。作为结果刚体将开始移动。
    • RigidBody.MovePosition移动刚体到position
    • NavMeshAgent组件的SetDestination函数,设置自动Path目标点。
    • CharacterController组件的Move函数,每次都绝对运动。
    • Vector3.MoveToward当前的地点移向目标。
  2. 如果我们勾选了Animator组件中的Apply Root Motion选项,角色的Transform将不能通过脚本来直接赋值,而是通过动画的运动的来改变的。
    如果我们不勾选我们就可以用脚本改变角色的Tranform。
7.如何实现游戏存档和读档的功能?
  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
8.什么是游戏框架?使用框架的好处是什么?

选择框架和使用框架是控制框架的基础。

  1. 游戏框架是比较上层的封装,是一套快速搭建游戏的代码结构。
  2. 使用游戏框架开发能节约工程时间,易维护,易扩展,易阅读开发,可复用。
Unity的GameObject.Find()是深度优先还是广度优先?

我们了解到深度优先是一种类似递归的搜索算法(就是一条路走到底,还找不到就返回走第二条路)。
广度优先刚好相反,是只要有岔路都走个遍,走到下一个拐点要是还有岔路也都先探一探酱紫。
代码是通过GameObject.Find()的方法,找到名为GameObject的物体,然后隐藏其子物体。如果是广度优先的话,那么该被隐藏应该是和A平级的节点GameObjec的自物体,但执行下来,隐藏的确是D下面的GameObject的子物体,可见==GameObject.Find()应该是深度优先==,
网上的这篇文章还是蛮不错的,讲到了GameObject.Find早就不推荐使用啦,分享给大家:csdn 博客《Unity3D 游戏开发GameObject.Find()Transform.Findc 查找隐藏对象》

转载链接(全文)

https://blog.csdn.net/wjlsxl_whb/article/details/53187577

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D相关面试题 的相关文章

  • Kali Linux 学习资源整理

    Kali Linux 官网 https www kali org Kali Linux官方教材 https kali training Penetration Testing Training with Kali Linux https w
  • cookies,session,token的区别和使用(接口参考)

    cookies session token的区别和使用 接口参考 1 依据和使用 基于cookie 因cookie的验证是有状态的 验证流程 用户输入登陆凭据 服务器验证凭据是否正确 并创建会话 然后把会话数据存储在数据库中 具有会话id的
  • Vue开发技巧总结

    1 路由参数解耦 通常在组件中使用路由参数 大多数人会做以下事情 export default methods getParamsId return this route params id 在组件中使用 route 会导致与其相应路由的高
  • 【管理学】作业与思考题

    绪论 管理学的研究对象是什么 在企业管理研究基础上抽象出的一般管理理论对其他组织的管理是否也具有指导意义 管理学的研究对象是人类的管理实践 从广义上来说 管理实践包括对个体活动的 管理和对群体活动的管理 任何个人即使在从事仅与自己相关的目标

随机推荐

  • [Github] GitKraken 简体中文翻译补丁

    GitKraken 简体中文翻译补丁 项目地址 项目原理 本项目通过将 rogeraabbccdd GitKraken zh tw 翻译包内的繁体中文文件转化为简体中文而成 采用了 Python3 9 作为转换工具并利用 Github Ac
  • 【高性能】Linux挂载GPT硬盘

    Linux挂载GPT硬盘 硬盘分区表存储了硬盘数据块的存储方式 根据分区表 可以将主流硬盘划分为MBR和GPT格式 其中MBR支持2T以下的硬盘 GPT则是新分区表标准 能支持2T以上的硬盘 64位Linux可以兼容MBR和GPT两类硬盘
  • 吉林大学计算机系高级语言程序设计(C语言)期末题目及解答(下)

    内容简介 因为正在准备考研复试 所以计划把吉大期末的C语言题目重新刷一遍 上机 做为笔记放在这里 有需要的朋友请自提 注 持续更新 因为文章过大所以分为了上下两篇 上篇也在我的博客列表里 本文所有代码均已测试通过 未通过的会在前面标注 未通
  • java 返回文件的二进制字符串给前端

    RequestMapping value fileToStream method RequestMethod GET ApiOperation 将文件转成流传给前端 public WebResponse fileToStream HttpS
  • java jar后台启动的三种方式

    java jar启动 linux中启动 java jar 后台运行程序 直接用java jar xxx jar 当退出或关闭shell时 程序就会停止掉 以下方法可让jar运行后一直在后台运行 java jar xxx jar 说明 在末尾
  • tensorflow基础操作

    目录 数据类型 数据载体 如何创建一个tensor 创建随机数 tensor的性质 检查维度 检查tensorflow是用cpu还是gpu 将tensor格式转换成numpy格式 检查tensor的数据类型 转换tensor 将格式转换成t
  • 性能测试调研:测试的目的是什么?

    昨天讲了 性能测试 你知道什么是99线吗 今天看看第二篇性能测试调研都有哪些内容 1 测试目的 2 系统架构及业务流程 3 测试范围及业务场景 4 性能测试指标 1 测试目的 测试背景 是新系统还是旧系统改造 评估测试重点 新系统预估可能的
  • Spring ApplicationContextAware 获取bean

    Spring 获取 bean spring最重要的功能是作为bean容器 方便的提供bean的初始化和存取服务 我们使用spring 也正是为了避免自己去创建或者管理对象 因此应该尽量从spring容器中去拿bean 而不是自己去new 如
  • OpenGL的Context(Profile)

    OpenGL在渲染的时候需要一个Context 这个Context记录了OpenGL渲染需要的所有信息 可以把它理解成一个大的结构体 它里面记录了当前绘制使用的颜色 是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态
  • 命令行卸载java_卸载java

    有小伙伴经常会遇到Java没有卸载干净的情况 造成重新安装JDK能正常安装 接着安装JRE的时候总是报1603错误 虽然说JRE安装报错了没安装上 但是eclipse IntelliJ IDEA和AndroidStudio都能正常打开和使用
  • 实时音频编解码之二编码学数学知识

    本文谢绝任何形式转载 谢谢 1 3 编码数学算法 1 3 1 定点和浮点 编码的一些参数是经过定标和量化的 然后再将其送入区间编码器进一步压缩数据量 为了降低执行编解码的内存和算力要求 Opus编码器中很多地方使用了Q定标方式将浮点数转化为
  • DTMF通信系统设计—基于MATLAB和STM32

    文章目录 1 摘要 2 设计任务 3 课程设计主要解决的问题 4 设计内容 4 1 整体设计方案 4 2 详细设计内容 5 结果与分析 5 1 基于MATLAB 的DTMF 通信系统 5 2 双机通信模拟 5 2 基于单片机的DTMF 通信
  • C语言堆排序

    堆排序 Heapsort 是一种在时间复杂度上达到了最优的基于比较的排序算法 堆排序算法是指利用堆这种数据结构所设计的一种排序算法 堆积是一个近似完全二叉树的结构 并同时满足堆积的性质 即子节点的键值或索引总是小于 或者大于 它的父节点 堆
  • 为什么想来我们公司工作?- 面试常见问题解析

    在面试的过程中 你的面试官可能会问你这样一个问题 你为什么想在我们公司工作 这是面试最常见的问题之一 这个问题看似简单 但回答时一定要提前有所准备 一般来说 面试官在面试时提问这个问题是希望通过应聘者的回答来衡量应聘者对他们公司的感兴趣程度
  • 综述:运动目标跟踪算法

    运动目标跟踪算法总结 1 传统的目标跟踪算法 运动目标跟踪 首先对目标进行有效地表达 然后在接下来的视频序列的每一帧中找到相似度与目 标最大的区域 从而确定目标在当前帧中的位置 早期的生成式方法主要有两种思路 1 依赖于目标外观模型 通过对
  • 华为2018校园招聘(提前批) 笔试 输出ascii最小的最长连续字符串

    题目 给定一串字符 里面有些字符有连续出现的特点 请寻找这些连续字符串中最长的串 如果最长的串有多个 请输出ascii最小的个 思路 利用start和end来记录当前连续出现的子字符串的起始位置 如果当前字符串长度 gt 历史最大长度或者两
  • 【OpenCV学习笔记】【算法学习】一(模板匹配)

    include
  • OpenCV的常用函数

    OpenCV的常用函数 1 imread函数 2 namedWindow函数 3 imshow函数 4 输出图像到文件 imwrite函数 1 imread函数 首先 我们看imread函数 可以在OpenCV官方文档中查到其原型如下 Ma
  • 2023年交通与智慧城市国际会议ICoTSC 2023

    会议日期 2023 5 26 至 2023 5 28 会议简介 2023年交通与智慧城市国际会议 ICoTSC 2023 重要信息 会议网址 www icotsc org 会议时间 2023年7月28 30日 召开地点 长沙 截稿时间 20
  • Unity3D相关面试题

    Unity3D相关面试题 第一部分 1 请简述值类型与引用类型的区别 2 C 中所有引用类型的基类是什么 3 请简述ArrayList和List的主要区别 4 请简述GC 垃圾回收 产生的原因 并描述如何避免 5 请描述Interface与