当前位置: 首页 > news >正文

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

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

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

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

目录

C#

1.Equals可以判断一些引用类型是否相等 尤其是对象不同时

2.深浅拷贝主要区别为引用类型是否独立

3.第二种速度更快 因为List涉及到了扩容

4.B先打印 ,A:10 B:11

5.A 11 B11 因为是引用类型

Unity

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

2. 请简述一下Prefab(预制体)的本质是什么?

3.Unity是否支持写成多线程程序?如果支持的话需要注意什么?

4. 请简述一下对象池,在游戏开发中我们什么时候会用到它?

5. 什么是DrawCall?DrawCall为什么会影响游戏运行效率?如何减少DrawCall?


C#

1.Equals可以判断一些引用类型是否相等 尤其是对象不同时

       对值类型 二者都可以使用 

static void test() {int a0 =1;int a1 =2;Console.Write(a0==a1?a0:a1);Console.Write(a0.Equals(a1));
}
test();

        但是当对象比较变成 不同的类  时 == 就不被允许了(除非operator重载运算符)

        当然,你去比较两个相同类型的对象仍然是可以的 

a Obja0 = new a();
b Objb = new b();
a Obja1 = new a();
Obja0 = Obja1;Console.Write(Obja0.Equals(Objb));
Console.Write(Obja0.Equals(Obja1));
Console.Write(Obja0  == Obja1);
特性== 操作符Equals 方法
本质运算符(可重载)虚方法(可重写)
默认行为值类型:比较值;引用类型:比较引用地址值类型:比较值;引用类型:比较引用地址
可自定义性通过重载 operator == 改变行为通过重写 Equals 方法改变行为
null 处理可直接比较 null(如 obj == null需先检查是否为 null,否则可能抛 NullReferenceException
多态性静态绑定(编译时决定行为)动态绑定(运行时根据实际类型决定行为)

         另外对于string引用类型却有值类型的特殊性,Equals比较的是其字符串内容(值)

2.深浅拷贝主要区别为引用类型是否独立

public class MyClass : ICloneable
{public int Value { get; set; }public List<int> List { get; set; } = new List<int>();// 浅拷贝实现public object Clone(){return new MyClass{Value = this.Value,    // 值类型直接复制List = this.List       // 引用类型复制指针};}
}// 使用示例
MyClass original = new MyClass 
{ Value = 10,List = new List<int>() 
};// 浅拷贝
MyClass shallowCopy = (MyClass)original.Clone();// 修改拷贝对象
shallowCopy.Value = 20;       // 不影响 original.Value(值类型独立)
shallowCopy.List.Add(1);      // 会影响 original.List(共享同一个列表实例)
using System;
using System.Collections.Generic;public class MyClass : ICloneable
{public int Value { get; set; }public List<int> List { get; set; }// 实现深拷贝public object Clone(){return new MyClass{Value = this.Value,  // 值类型直接复制List = new List<int>(this.List)  // 创建新列表实例(深拷贝关键)};}
}// 使用示例
MyClass original = new MyClass 
{ Value = 10,List = new List<int>() 
};// 深拷贝
MyClass deepCopy = (MyClass)original.Clone();// 修改拷贝后的对象
deepCopy.Value = 20;       // 不影响 original.Value
deepCopy.List.Add(1);      // 不影响 original.List
特性浅拷贝(Shallow Copy)深拷贝(Deep Copy)
复制层次仅复制对象本身及其直接字段(一层)递归复制对象及其所有引用字段的完整对象树
引用类型字段复制引用地址(新旧对象共享同一引用对象)创建新对象并复制内容(新旧对象引用完全独立)
性能高效(仅复制一层)较低效(需递归复制所有嵌套对象)
适用场景引用字段不可变或无需独立修改时引用字段需要完全独立修改时

3.第二种速度更快 因为List涉及到了扩容

        关于扩容简单写法请看这篇之中的c#部分第五题:
C# &Unity 唐老狮 No.1 模拟面试题-CSDN博客

4.B先打印 ,A:10 B:11

        异常捕捉的机制是先try然后接着finally执行捕获 再执行其他地方的代码 但是return是已经返回出去了i,因此是先return 再B处 再A处

5.A 11 B11 因为是引用类型

Unity

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

        会穿过去 ,或者卡在大球的某个部分抖动,解决方法:

1.将碰撞检测改为更好的方式:

2.射线检测

可以给小球加一个很短的射线检测 当撞击前就做出一定的预处理

这个方案由ai提供 我还真没用过

3.修改固定时间步长
在 Project Settings --> Time 中减少 Fixed Timestep 值(如从0.02改为0.01),提升检测频率

2. 请简述一下Prefab(预制体)的本质是什么?

        本质是一个配置文件,里面有很多关于该预制体的参数和基本信息,甚至可以自行修改

3.Unity是否支持写成多线程程序?如果支持的话需要注意什么?

        支持,但是要注意unity本身就带有一个主线程,其大部分api都只能在主线程里面跑,如果在其他线程和主线程同时调用unity的一这些api(比如translate,GetComponent等等)会导致线程冲突报错 所以禁止直接调用Unity API,但可通过 MainThreadDispatcher 将任务排队到主线程执行

// 示例:主线程调度器
public class MainThreadDispatcher : MonoBehaviour {private static Queue<Action> tasks = new Queue<Action>();void Update() {while (tasks.Count > 0) tasks.Dequeue().Invoke();}public static void RunOnMainThread(Action action) => tasks.Enqueue(action);
}

        同时还要注意多线程本身就应该注意的问题:

        内存泄漏,是指要在合适的时机对后台关闭后台线程,不然这个线程将会一直运行 哪怕你停止运行了游戏 在Editor之中仍然在跑,直到这个线程持有了大量的资源,导致可用内存逐渐减少, 这种现象就是内存泄漏

        避免死锁,即多个线程相互等待对方释放资源而陷入僵持状态

4. 请简述一下对象池,在游戏开发中我们什么时候会用到它?

知识加油站:

Unity 高级一些的对象池(初版)(非基础警告)_unity 高级对象池-CSDN博客

        对象池也叫缓存池 是一个用于存储和拿出频繁销毁物体或对象的管理类

在大量且频繁创建与销毁的场景之中会用到,比如音效,子弹,大量敌人

5. 什么是DrawCall?DrawCall为什么会影响游戏运行效率?如何减少DrawCall?

        知识加油站:这里挖个坑 关于shader基础知识的链接将会放在这里

        DrawCall就是 CPU 向 GPU 发送指令,要求 GPU 对一组图元(如三角形、四边形等)进行渲染的操作,每一次对图形api的调用都会产生一次drawcall

        如果大量的drawcall:

  • CPU 开销:每次 Draw Call 都需要 CPU 进行准备工作,如设置渲染状态、传递顶点数据、纹理数据等。大量的 Draw Call 会使 CPU 花费大量时间在这些准备工作上,从而减少了 CPU 用于处理游戏逻辑等其他重要任务的时间。
  • GPU 上下文切换:GPU 在处理不同的 Draw Call 时,可能需要切换渲染状态,如切换纹理、材质、着色器等。频繁的上下文切换会增加 GPU 的额外开销,降低渲染效率。
  • 带宽限制:Draw Call 需要在 CPU 和 GPU 之间传输数据,包括顶点数据、索引数据、纹理数据等。大量的 Draw Call 会导致数据传输量增大,可能会超出总线带宽限制,造成数据堵塞,影响渲染速度

        减少:

        1.对UI进行剔除:对于不在屏幕范围内或被其他 UI 遮挡的 UI 元素,不进行绘制,可以通过计算 UI 元素是否在视口内,以及使用遮挡剔除技术来实现,例如,在 Unity 中可以利用 Canvas Group 组件的 Alpha 值为 0 时自动进行剔除的特性,或者自定义脚本根据 UI 的可见性来控制是否渲染

       2. 对网格进行合批(动态 在一定程度上unity自动处理,但是有很大限制,可以自己编写脚本处理

        静态 只针对静态的物体,当勾选了static选项以后 unity会自动做处理)

        3. 对图片进行打图集        

       唐老师在unity核心之中讲过打图集相关内容

       也可以参考本篇Unity UGUI 之 图集_unity 图集-CSDN博客

AI补充:

  • 使用批处理渲染器:一些渲染器提供了批处理功能,如 URP(Universal Render Pipeline)中的 SRP Batcher。它可以在不改变材质和模型的情况下,对物体进行批处理,提高渲染效率。
  • 优化材质和着色器:尽量减少材质和着色器的复杂度,避免使用过多的变体。过多的材质变体和复杂的着色器计算会增加 Draw Call 的开销。可以通过合并相似的材质,减少不必要的纹理采样和计算来优化。

        

相关文章:

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

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…...

【Uniapp-Vue3】开发userStore用户所需的相关操作

在项目根路径下创建的stores文件夹中创建user.js文件 并将以下内容复制到user.js中 import {ref} from "vue" import { defineStore } from pinia; const uniIdCo uniCloud.importObject("uni-id-co") const db uniCloud.database(); const usersTable…...

DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s

FlashMLA的核心技术特性包括对BF16精度的全面支持&#xff0c;以及采用块大小为64的页式键值缓存&#xff08;Paged KV Cache&#xff09;系统&#xff0c;实现更精确的内存管理。在性能表现方面&#xff0c;基于CUDA12.6平台&#xff0c;FlashMLA在H800SXM5GPU上创下了显著成绩…...

易语言模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

DeepSeek 提示词:基础结构

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

文件系统

目录 1.认识磁盘 磁盘的物理结构 CHS定位法 磁盘的逻辑结构 2.认识文件系统 inode 分区和分组 磁盘上的文件系统 3.软硬链接 软链接 软链接的操作 创建软链接 查看软链接 删除软链接 软链接的特点 软链接的使用场景 硬链接 硬链接的操作 创建硬链接 查看硬…...

力扣LeetCode:1472 设计浏览器历史记录

题目&#xff1a; 你有一个只支持单个标签页的 浏览器 &#xff0c;最开始你浏览的网页是 homepage &#xff0c;你可以访问其他的网站 url &#xff0c;也可以在浏览历史中后退 steps 步或前进 steps 步。 请你实现 BrowserHistory 类&#xff1a; BrowserHistory(string h…...

【FL0091】基于SSM和微信小程序的社区二手物品交易小程序

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…...

【笔记ing】每天50个英语词汇

ex- e-out exclude 排外&#xff0c;排除 expect 期待&#xff0c;期望 单词构成&#xff1a; 前缀&#xff08;prefix&#xff09;&#xff1a;情感&#xff08;emotion&#xff09;方向&#xff08;orientation&#xff09; 词根&#xff08;root&#xff09;&#xf…...

联想 SR590 服务器 530-8i RAID 控制器更换损坏的硬盘

坏了的硬盘会自动亮黄灯。用一个空的新盘来替换&#xff0c;新盘最好不要有东西。但是有东西可能也没啥&#xff0c;因为我看 RAID 控制器里有格式化的选项 1. 从 IPMI 把服务器关机&#xff0c;电源键进入绿色闪烁状态 2. 断电&#xff0c;推开塑料滑块拉出支架&#xff0c;…...

Java基础关键_012_包装类

目 录 一、基本数据类型对应的包装类 1.概览 2.说明 二、包装类 1.最大值与最小值 2.构造方法 3.常用方法&#xff08;Integer为例&#xff09; &#xff08;1&#xff09;compare(int x, int y) &#xff08;2&#xff09;max(int a, int b) 和 min(int a, int b) &…...

【react】TypeScript在react中的使用

目录 一、环境与项目配置 1. 创建 TypeScript React 项目 2. 关键tsconfig.json配置 3.安装核心类型包 二、组件类型定义 1. 函数组件&#xff08;React 18&#xff09; 2.类组件 三、Hooks 的深度类型集成 1. useState 2. useEffect 3. useRef 4. 自定义 Hook 四、事…...

vllm的使用方式,入门教程

vLLM是一个由伯克利大学LMSYS组织开源的大语言模型推理框架&#xff0c;旨在提升实时场景下的大语言模型服务的吞吐与内存使用效率。以下是详细的vLLM使用方式和入门教程&#xff1a; 1. 前期准备 在开始使用vLLM之前&#xff0c;建议先掌握一些基础知识&#xff0c;包括操作…...

IDEA 使用codeGPT+deepseek

一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行&#xff0c;您需要在操作系统中预先配置 Python 环境。具体来说&#xff0c;您需要安装 Python 3.8 或更高…...

vue3中测试:单元测试、组件测试、端到端测试

1、单元测试&#xff1a;单元测试通常适用于独立的业务逻辑、组件、类、模块或函数&#xff0c;不涉及 UI 渲染、网络请求或其他环境问题。 describe(increment, () > {// 测试用例 }) toBe()&#xff1a;用于严格相等比较&#xff08;&#xff09;&#xff0c;适用于原始类…...

机器学习介绍与数据集

一、机器学习介绍与定义 1.1 机器学习定义 机器学习&#xff08;Machine Learning&#xff09;是让计算机从数据中自动学习规律&#xff0c;并依据这些规律对未来数据进行预测的技术。它涵盖聚类、分类、决策树、贝叶斯、神经网络、深度学习&#xff08;Deep Learning&#xf…...

React 源码揭秘 | 更新队列

前面几篇遇到updateQueue的时候&#xff0c;我们把它先简单的当成了一个队列处理&#xff0c;这篇我们来详细讨论一下这个更新队列。 有关updateQueue中的部分&#xff0c;可以见源码 UpdateQueue实现 Update对象 我们先来看一下UpdateQueue中的内容&#xff0c;Update对象&…...

关于网络端口探测:TCP端口和UDP端口探测区别

网络端口探测是网络安全领域中的一项基础技术&#xff0c;它用于识别目标主机上开放的端口以及运行在这些端口上的服务。这项技术对于网络管理和安全评估至关重要。在网络端口探测中&#xff0c;最常用的两种协议是TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用…...

Vue.js 中使用 JSX 自定义语法封装组件

Vue.js 中使用 JSX 自定义语法封装组件 在 Vue.js 开发中&#xff0c;使用模板语法是常见的构建用户界面方式&#xff0c;但对于一些开发者&#xff0c;特别是熟悉 JavaScript 语法的&#xff0c;JSX 提供了一种更灵活、更具表现力的替代方案。通过 JSX&#xff0c;我们可以在…...

设计模式教程:备忘录模式(Memento Pattern)

备忘录模式&#xff08;Memento Pattern&#xff09;详解 一、模式概述 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;允许在不暴露对象实现细节的情况下&#xff0c;保存对象的内部状态&#xff0c;并在需要时恢复该状态。备忘录模式…...

Jenkins 学习总结滩

先唠两句&#xff1a;参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜&#xff0c;它是菜单&#xff08;资源路径&#xff09;的一部分。 查询参数/dishes?spicytrue&typeSichuan -> …...

多品类迷雾:为何亚马逊店铺无法用“宽泛口号”建立有效定位

当一个品牌或店铺像福特汽车一样&#xff0c;横跨多个品类和型号时&#xff0c;便面临一个根本性的定位困境&#xff1a;它无法在任何一个具体的品类中建立“专家”认知&#xff0c;因此被迫退回到寻找一个覆盖所有产品的“最大公约数”——通常是一个宽泛、无力、难以验证的抽…...

Refined Now Playing:重塑网易云音乐播放体验的终极视觉革命

Refined Now Playing&#xff1a;重塑网易云音乐播放体验的终极视觉革命 【免费下载链接】refined-now-playing-netease &#x1f3b5; 网易云音乐沉浸式播放界面、歌词动画 - BetterNCM 插件 项目地址: https://gitcode.com/gh_mirrors/re/refined-now-playing-netease …...

RLHF框架选型指南:Trlx/DeepSpeedChat/ColossalAI-Chat在A100和3090显卡下的显存占用实测

RLHF框架选型实战&#xff1a;Trlx/DeepSpeedChat/ColossalAI-Chat在A100与3090显卡下的性能对决 当团队面临有限的计算资源时&#xff0c;如何选择最适合的RLHF框架成为关键决策。本文将基于实际硬件环境&#xff0c;深度剖析三大主流框架在A100 40GB与RTX 3090 24GB显卡下的显…...

Phi-4-mini-reasoning实操手册:WebShell日志分析技巧与常见报错解决方案

Phi-4-mini-reasoning实操手册&#xff1a;WebShell日志分析技巧与常见报错解决方案 1. 模型简介与部署验证 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员&#xff0c;它特别强化…...

Unity 物联网通信实战:从零集成 MQTTnet 到发布订阅

1. 为什么选择MQTTnet做Unity物联网通信 如果你正在开发一个需要实时数据交互的Unity应用&#xff0c;比如智慧城市大屏或者设备监控面板&#xff0c;MQTT协议绝对是你的首选。而MQTTnet作为.NET平台最成熟的MQTT客户端库&#xff0c;在Unity中的表现尤为出色。我去年做过一个工…...

没有开发板也能运行 AirUI:LuatOS 模拟器使用指南

最近刷朋友圈&#xff0c;总能看到大家分享AirUI相关的内容&#xff0c;比如自己DIY的空气质量分析仪、Air8101畅玩板&#xff0c;还有各种新的示例和好看的UI交互&#xff0c;看着确实很有意思。 很多人可能会问&#xff1a;没有开发板的话&#xff0c;也能体验AirUI吗&#x…...

VIVADO布局利器:PBlock精准约束与资源优化实战

1. PBlock&#xff1a;FPGA布局设计的精准手术刀 第一次接触VIVADO的PBlock功能时&#xff0c;我正被一个视频处理项目折磨得焦头烂额。设计中的H.264编码模块总是无法满足时序要求&#xff0c;反复调整约束文件也无济于事。直到同事提醒我试试PBlock&#xff0c;这个困扰我两周…...

如何将PerfView与Azure DevOps集成:实现持续性能监控的完整指南

如何将PerfView与Azure DevOps集成&#xff1a;实现持续性能监控的完整指南 【免费下载链接】perfview PerfView is a CPU and memory performance-analysis tool 项目地址: https://gitcode.com/gh_mirrors/pe/perfview PerfView是一款强大的CPU和内存性能分析工具&…...

Fixer性能优化指南:如何配置Unicorn服务器获得最佳响应速度

Fixer性能优化指南&#xff1a;如何配置Unicorn服务器获得最佳响应速度 【免费下载链接】fixer A foreign exchange rates and currency conversion API 项目地址: https://gitcode.com/gh_mirrors/fi/fixer Fixer作为一款外汇汇率和货币转换API&#xff0c;其响应速度直…...