【2023-3-4】U3D实习面试经验

目录

2023.4.6 【lb科技自己给自己挖坑,填的项目坑】

1.讲述一下你在实习期间或在校中的项目?觉得比较难的地方

2.collide和trigger区别

3.怪物如何达到一个点

4.layer 和 tag区别?layer所占内存的性能?

5.JS自带的JsonUtilty能否识别字典?第三方插件为啥能识别字典,其底层逻辑?

6.屏幕坐标、视口坐标、世界坐标?视口的大小(0,1)&屏幕大小(600,800)转换?×

 7.UGUI为啥需要canvas?×

8.image和texture渲染先后顺序??×

9. TCP/UDP的区别?及其应用场景?面试官:说说UDP和TCP的区别及应用场景 - 知乎 (zhihu.com)

 10.HTTP状态码404,400?×

11.补充


2023.4.6 【lb科技自己给自己挖坑,填的项目坑】

1.讲述一下你在实习期间或在校中的项目?觉得比较难的地方

2.collide和trigger区别

3.怪物如何达到一个点

4.layer 和 tag区别?layer所占内存的性能?

"Layer" 和 "tag" 是两个不同的概念,它们在不同的上下文中使用,并且与内存性能有关的具体细节取决于使用它们的方式和具体情况。

  1. Layer(层)

    • 在计算机编程和软件开发中,"layer" 通常指的是图形界面或用户界面设计中的一层。这种分层结构用于组织和管理用户界面的不同元素,例如窗口、按钮、文本框等。每一层可能包含不同的用户界面元素,并且可以以不同的方式进行渲染和处理。

    • Layer的内存占用和性能取决于具体的图形处理引擎和硬件。一般来说,较复杂的图形界面可能需要更多的内存和计算资源来渲染和处理。

  2. Tag(标签)

    • "Tag" 通常用于标识或分类数据元素,对象或内容。在编程和数据管理中,标签可以用于标记数据,以便更容易地检索、组织或处理它们。例如,文件系统中的文件可以使用标签进行分类,网页上的内容可以使用标签进行结构化,以便搜索引擎更好地理解它们。

    • 标签本身通常不占用大量内存。它们是用来提高数据管理和检索效率的工具。

关于内存性能,性能和内存占用取决于具体的应用程序、上下文和使用情况。无法简单地说"layer"或"tag"的性能是多少,因为它们通常用于不同的目的和情境。要考虑内存性能,需要根据具体情况进行优化,并考虑整个应用程序的结构和需求,以减少内存占用并提高性能。这可能包括使用更有效的数据结构、释放不再需要的内存、避免内存泄漏等。

总之,"layer"和"tag"是两个不同的概念,它们在不同的上下文中使用,性能和内存占用问题取决于具体情况和如何使用它们。

5.JS自带的JsonUtilty能否识别字典?第三方插件为啥能识别字典,其底层逻辑?

在 Unity 中,JavaScript(通常称为UnityScript)不再被官方支持,而官方推荐使用C#进行游戏开发。因此,我将解释C#中的JSON序列化和字典处理。

  1. C#中的JSON序列化和字典

    Unity内置的JsonUtility类主要用于将C#对象序列化为JSON格式的字符串以及将JSON字符串反序列化为C#对象。但是,它对于C#中的字典(Dictionary)来说并不是直接支持的。JsonUtility主要支持的是简单的POCO(Plain Old C# Objects)类型,它们是基本的数据结构。

    如果你要将字典序列化为JSON字符串,或者从JSON字符串反序列化为字典,通常需要使用第三方JSON库,如Json.NET(也称为Newtonsoft.Json)。

  2. 第三方插件如Json.NET的底层逻辑

    第三方JSON库如Json.NET非常强大,它之所以能够处理复杂的数据结构,包括字典,是因为它的底层实现具有高度的灵活性和可配置性。以下是Json.NET的一些核心特点和底层逻辑:

    • 反射:Json.NET使用反射来检查C#对象的属性和字段,以便将其序列化为JSON或从JSON反序列化为C#对象。这使得它可以动态地处理各种对象类型,包括字典。

    • 自定义序列化:Json.NET允许你为特定类型的对象创建自定义的序列化和反序列化逻辑。这意味着你可以为字典类型定义特定的序列化规则,以满足你的需求。

    • 可扩展性:Json.NET允许你扩展其功能,以支持特定的数据结构或处理方式。这意味着你可以编写自定义的转换器来处理字典或其他复杂的对象。

    因此,Json.NET之所以能够处理字典以及其他复杂的数据结构,是因为它具有高度可配置的底层逻辑和对反射的灵活使用,使得它能够动态地解析和序列化各种类型的数据。

总之,Unity的JsonUtility主要用于简单的对象序列化,而第三方JSON库如Json.NET之所以能够处理字典等复杂数据结构,是因为它们具有更强大和灵活的底层逻辑和功能。这些库允许你自定义序列化和反序列化规则,以适应不同的数据结构和需求。

/*-----------------------------------------------------补充-----------------------------------------------------------------*/

Json.NET自定义序列化【Newtonsoft.Json】:

可以通过创建自定义转换器(Custom Converters)来实现这一点。以下是如何自定义序列化和反序列化的一般步骤

1.创建自定义转换器类

创建一个继承自JsonConverter类的自定义转换器类

using Newtonsoft.Json;

public class MyCustomConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // 实现自定义的序列化逻辑
        // 在writer中写入JSON表示
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // 实现自定义的反序列化逻辑
        // 从reader中读取JSON并转换为对象
        return null;
    }

    public override bool CanConvert(Type objectType)
    {
        // 返回true或false以指示该转换器是否能够处理特定类型的对象
        return objectType == typeof(MyCustomType);
    }
}

2.注册自定义转换器

在使用Json.NET进行序列化和反序列化之前,你需要将自定义转换器注册到Json.NET的JsonSerializerSettings中。例如:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new MyCustomConverter());

// 然后在序列化和反序列化时使用这些设置
string json = JsonConvert.SerializeObject(myObject, settings);
MyCustomType deserializedObject = JsonConvert.DeserializeObject<MyCustomType>(json, settings);

3.实现自定义逻辑

在自定义转换器的WriteJson方法中,你可以编写将对象转换为JSON表示的逻辑。在ReadJson方法中,你可以编写将JSON表示转换为对象的逻辑。通过这种方式,你可以完全控制对象的序列化和反序列化过程,以满足特定的需求,包括处理自定义数据结构、特殊字段映射等。

/*----------------------------------------------------------------------------------------------------------------------------*/

6.屏幕坐标、视口坐标、世界坐标?视口的大小(0,1)&屏幕大小(600,800)转换?×

(24条消息) Unity中屏幕坐标、视口坐标和世界坐标、局部坐标与其之间的相互转换_unity2d物体的局部坐标轴_To-String的博客-CSDN博客

 7.UGUI为啥需要canvas?×

一句话概括Canvas就是渲染 UI 的组件,UGUI是Unity新支持的2D界面控件,所有的UI控件都需要在包含Canvas组件的物体下边充当子物体,我们可以在GameObject->UI下创建物体时,会自动生成Canvas以及与其对应的EventSystem控件。

UGUI Canvas(画布)详解 - 知乎 (zhihu.com)Unity3D的UGUI——Canvas之美_51CTO博客_unity3d canvas

/*-----------------------------------------------------补充-----------------------------------------------------------------*/

UGUI(Unity GUI)需要 Canvas 的主要原因是为了提供一种灵活的方式来渲染UI元素,并确保UI元素在3D场景中的正确呈现。以下是 Canvas 在 UGUI 中的作用和原因:

  1. UI层级管理

    Canvas 允许你创建多个不同层级的UI,以便管理和控制UI元素的显示顺序。每个 Canvas 可以有自己的渲染顺序,这意味着你可以将UI元素分为多个层级,如底层UI、中间UI、顶层UI等。这有助于确保UI元素按照你的预期顺序进行渲染,以避免重叠或遮挡问题。

  2. 分辨率独立性

    Canvas 具有分辨率独立性,可以在不同分辨率和屏幕尺寸上自动缩放和调整UI元素的位置和大小。这使得你的UI可以在各种设备上保持一致的外观,而不需要手动调整每个元素的位置和大小。

  3. 深度测试

    Canvas 支持深度测试,确保UI元素按照正确的顺序进行渲染,而不会出现不正确的遮挡效果。这对于创建复杂的UI布局非常重要,因为它确保了正确的渲染顺序。

  4. 相机独立性

    Canvas 允许你将不同的 Canvas 关联到不同的摄像机,从而在多个摄像机视图中显示不同的UI元素。这在需要多个相机视图的场景中非常有用,例如分屏游戏、AR/VR应用等。

  5. 性能优化

    Unity的 Canvas 使用了一些性能优化技巧,例如批处理(batching),以减少渲染调用的数量,提高UI渲染的效率。

总的来说,Canvas是UGUI的核心组件,它提供了管理UI元素的强大工具,使得UI的创建和管理更加灵活和方便,同时确保UI在不同场景和设备上的正确渲染。因此,Canvas在UGUI中是一个非常重要的概念

/*----------------------------------------------------------------------------------------------------------------------------*/

8.image和texture渲染先后顺序??×

在Unity中,Image和Texture的渲染顺序可以简单地理解为:

  1. Image的渲染顺序

    Image通常用于UI元素,它们在Canvas上的渲染顺序受Canvas的Sorting Order和Sibling Index的影响。Canvas的Sorting Order决定了UI元素的渲染顺序,而同一Canvas内的Sibling Index则用于确定在相同Sorting Order下的渲染顺序。较高Sorting Order和较高Sibling Index的Image会在较低的Image之上渲染。

  2. Texture的渲染顺序

    Texture通常用于3D对象的材质,它们的渲染顺序受到材质的Queue属性和渲染模式的影响。Queue属性决定了材质的渲染队列,较低Queue值的材质会首先渲染,而较高Queue值的材质会在其上层渲染。此外,使用透明渲染模式的Texture会在不透明渲染模式的Texture之后渲染,因为透明渲染模式允许透明度。

简而言之,Image用于UI元素的渲染顺序与Canvas的属性和Sibling Index有关,而Texture用于3D对象的渲染顺序与材质的Queue属性和渲染模式有关。这些因素决定了它们在屏幕上的呈现顺序。

9. TCP/UDP的区别?及其应用场景?面试官:说说UDP和TCP的区别及应用场景 - 知乎 (zhihu.com)

TCP 是面向连接的、可靠的流协议。UDP 是面向报文的,UDP 是不具有可靠性的数据报协议。

 10.HTTP状态码404,400?×

404、500、502等HTTP状态码介绍 - Nuke'Blog - 博客园 (cnblogs.com)

出现网页错误时, 404、502这些数字代表啥 - 知乎 (zhihu.com)

11.补充

2023.4.8【CT笔】

1.Unity自带的回调函数中,OnEnable,Awake,Start 哪个可能在通一个对象周期中反复发生 ?OnEnable

2.Unity2D平台开发,碰撞方法是?void OnCollisionEnter2D(collision collision);×

3.Light组件中,哪个属性可以实现图像投影Cookie,Flare,ShadowType,color?Cookie

4.Unity3D提供了用于保存和读取数据的类型PlayerPrefs,Resource,DataSave,Player?PlayerPrefs

5.角色控制器自动使用重力的方法是SimpleMove,Move?SimpleMove

6.物理更新一般放在哪个函数里OnEnable,Awake,Start,FixedUpdate?FixedUpdate

7.屏幕坐标系?屏幕坐标系是建立在屏幕上的二维坐标系;是以像素为单位,屏幕的左下角为(0, 0),右上角为 (Screen.width, Screen.height);×××视口坐标系是与屏幕坐标系息息相关的,它是将 Game视图的屏幕坐标系单位化,即左下角为(0, 0),右上角为(1, 1),z轴坐标是相机的世界坐标中z轴坐标的负值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值