C# &Unity 唐老狮 No.3 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要:

Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho

如果你发现了文章内特殊的字体格式,那是AI补充的知识

目录

C#

[1. 泛型的约束有哪几种?](#1. 泛型的约束有哪几种?)

[2. 什么是闭包?可以举例说明](#2. 什么是闭包?可以举例说明)

[3. 内存泄漏指什么?常见的内存泄漏有哪些?](#3. 内存泄漏指什么?常见的内存泄漏有哪些?)

[4. 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?](#4. 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?)

[5. 请问A、B、C 三处打印结果分别为多少?为什么?](#5. 请问A、B、C 三处打印结果分别为多少?为什么?)

​编辑

Unity

[1. transform.forward和Vector3.forword的区别](#1. transform.forward和Vector3.forword的区别)

[2. Unity中如何解决过多创建和删除对象带来的卡顿问题?](#2. Unity中如何解决过多创建和删除对象带来的卡顿问题?)

3.游戏中的成就系统,我们一般会使用设计模式中的哪种模式来制作?为什么?

[4. 请简述热更新的流程](#4. 请简述热更新的流程)

[5. 我们应该如何优化UI(基于UGUI)](#5. 我们应该如何优化UI(基于UGUI))


C#

1. 泛型的约束有哪几种?

比较常见的有:

引用约束class 值类型约束struct 无参构造约束 new()

继承约束 不定名(比如需要T继承接口,继承抽象类等)

知识加油站:C# & Unity 面向对象补全计划 泛型的入门与进阶使用实例_unity ic2cpp泛型怎么修改-CSDN博客

2. 什么是闭包?可以举例说明

闭包在唐老师的课程之中出现在匿名函数(Lambda表达式)一节,可以望文生义,就是(外部)变量在内部函数 之中被闭合包裹 导致其脱离了原本的生命周期,即使外部函数已经执行完毕,该变量的生命周期依然能被内部函数延续

代码举例:

cs 复制代码
using UnityEngine;

public class Score : MonoBehaviour 
{
    void Start()
    {
        // 外部作用域的局部变量
        int externalVar = 10;

        // 创建闭包 (Lambda捕获externalVar)
        System.Func<int> closure = () =>
        {
            externalVar += 5; 
            return externalVar;
        };

        Debug.Log(closure()); // 输出 15
        Debug.Log(closure()); // 输出 20(证明变量状态被保留)
    }
}

3. 内存泄漏指什么?常见的内存泄漏有哪些?

是指动态内存没有被正确释放,造成没法用也没法gc的现象

常见:空指针,未及时关闭多线程,错误的循环代码

4. 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?

将数据结构或对象转为可存储/传输 格式的文件的过程叫做序列化

转json,转二进制,转xml,unity提供的 PlayerPrefs

存储/传输 长期可读写信息的时候用到

5. 请问A、B、C 三处打印结果分别为多少?为什么?

10 , 100, 100

二是c++的指针 &为取地址符 因此传入形参也会被指向地址

三是c#的安全指针 作用和指针类似 唐老师在c# 基础 ?介绍过ref和out

Unity

1. transform.forward和Vector3.forword的区别

unity世界空间是左手坐标系为准

前者是指当前物体的前方 默认指向z(0,0,1) 但是发生旋转改变局部坐标系以后会改变该向量的朝向,但是可以用父子关系的方式通过

transform.Translate(transform.forward, Space.World) 改变第二个参数来控制

后者是一个向量(0,0,1) 是常量,始终向z

2. Unity中如何解决过多创建和删除对象带来的卡顿问题?

对象池 知识加油站:

你都学会栈和队列了赶紧手搓一个对象池吧!!!(超详细,超简单适合新手宝宝学习)-CSDN博客

3. 游戏中的成就系统,我们一般会使用设计模式中的哪种模式来制作?为什么?

观察者模式 或者 事件中心

因为订阅者无需知道发布者的详细逻辑,只需要在该触发的地方进行订阅即可

还能解耦,还方便拓展(无非是加几个委托)

知识加油站:Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】_unity实例化-CSDN博客

4. 请简述热更新的流程

资源热更:

处理资源 ---> 打成ab包---->上传服务器 -----> 玩家使用---->异步下载---->完事

ai补充 代码热更:

代码修改与编译---->上传服务器----->客户端检测与下载---->代码加载与应用

5. 我们应该如何优化UI(基于UGUI)

1.剔除看不见的UI,同时尽量减少重叠

2.打图集,压缩纹理,简化材质

3.通过显示和隐藏面板, 而不是创建和销毁,或者通过canvasGroup 控制alpha,interactable blocksRaycasts等+禁用组件去控制面板,可适当提升性能

4.网格合批,因为UGUI的网格也是一个个三角面片,因此可以使用合批的方式进行优化

优化手段 Draw Calls 减少 帧率提升
合理使用图集 30% ~ 60% +15fps
分离动态/静态 Canvas 40% +20fps
替换 TextMeshPro 25% +10fps
禁用 Mask 改用 RectMask2D 20% +8fps
相关推荐
Zhen (Evan) Wang27 分钟前
.NET 6 + Dapper + User-Defined Table Type
sqlserver·c#·.net·wpf
FAREWELL000751 小时前
C#进阶学习(十四)反射的概念以及关键类Type
开发语言·学习·c#·反射·type
掘了1 小时前
实习 / 春秋招|必知必会的 ACM 模式输入输出与构造
c++·后端·面试
测试界茜茜1 小时前
16:00开始面试,16:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
FAREWELL000752 小时前
C#进阶学习(十三)C#中的预处理器指令
开发语言·学习·c#·预处理指令
爱上大树的小猪2 小时前
【前端基础】viewport 元标签的详细参数解析与实战指南
前端·css·面试
qq_297908012 小时前
c#简易超市充值卡程序充值消费查余额
经验分享·sqlserver·开源·c#·.net·开源软件
川石教育2 小时前
软件测试之接口测试常见面试题
面试·软件测试面试题·接口测试面试题·接口测试题库
程序猿chen2 小时前
量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体终局篇)
前端·vue.js·git·安全·面试·前端框架·跳槽
lovebugs3 小时前
Redis高可用架构全解析:主从复制、哨兵模式与集群实战指南
redis·后端·面试