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

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

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

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

目录

 C#

1.其他类型转object类型(值类型转引用类型) 称为装箱

2.值类型指向栈内存,赋值修改自己栈上的内容

3.委托可以赋值、调用,支持多播(组合多个方法)

4.显示声明接口

5. 在扩容函数之中,以一个标志位进行双倍扩容 eg: 4 8 16 32......

Unity 

1.向量点乘 为数 可以根据其夹角判断两向量的方向关系

2.CD, Unity 的 API 绝大多数只能在主线程调用

3.对比表

4.在同一个线程之中,执行协程


 C#

1.其他类型转object类型(值类型转引用类型) 称为装箱

int x = 10;
object obj = x; // 装箱

反之(引用转值)称为拆箱

int y = (int)obj; // 拆箱

补充:虽然和装拆箱没有关系 但是可以用as(类型转换) is(检查类型) 配合使用

2.值类型指向栈内存,赋值修改自己栈上的内容

int a = 10;
int b = a; // b 是 a 的副本
b = 20;    // a 仍然是 10

引用类型指向堆内存,赋值修改指向栈的内存,新变量和原变量指向同一对象

int[] arr1 = new int[] { 1, 2, 3 };
int[] arr2 = arr1; // arr2 和 arr1 指向同一对象
arr2[0] = 10;      // arr1[0] 也变为 10

3.委托可以赋值、调用,支持多播(组合多个方法)

public delegate void MyDelegate(string message);
MyDelegate del = Console.WriteLine;
del("Hello");

事件是更加安全的委托,只能用在类之中使用,也只能在定义它的类中触发(Invoke),外部只能订阅(+=)和取消订阅(-=

public event EventHandler MyEvent;
MyEvent += (sender, args) => Console.WriteLine("Event triggered");
MyEvent?.Invoke(this, EventArgs.Empty);

4.显示声明接口

知识加油站:

C# & Unity 面向对象补全计划 之 接口_unity c# 接口-CSDN博客

interface IA { void Test(); }
interface IB { void Test(); }

class MyClass : IA, IB
{
    void IA.Test() => Console.WriteLine("IA.Test");
    void IB.Test() => Console.WriteLine("IB.Test");
}

// 使用
MyClass obj = new MyClass();
((IA)obj).Test(); // 调用 IA.Test
((IB)obj).Test(); // 调用 IB.Test

5. 在扩容函数之中,以一个标志位进行双倍扩容 eg: 4 8 16 32......

private void EnsureCapacity(int min)
{
    if (_items.Length < min)
    {
        int newCapacity = _items.Length == 0 ? 4 : _items.Length * 2;
        if (newCapacity < min) newCapacity = min;
        Array.Resize(ref _items, newCapacity);
    }
}

Unity 

1.向量点乘 为数 可以根据其夹角判断两向量的方向关系

        只是加油站:unity中的数学 之 向量篇_unity 向量-CSDN博客

  • 结果为标量,计算公式:a·b = |a||b|cosθ
  • 作用
    • 判断两个向量的方向关系:
      • 结果 > 0:夹角 < 90°(同方向)
      • 结果 = 0:夹角 = 90°(垂直)
      • 结果 < 0:夹角 > 90°(反方向)
    • 计算投影长度(如角色面朝方向的速度)

向量叉乘 为新向量 可以判断两个向量的顺序(相对方向) 可以用新向量做原平面的法线向量

  • 结果为垂直于原两向量的新向量(右手法则),计算公式:|a×b| = |a||b|sinθ
  • 作用
    • 判断相对方向(顺时针/逆时针)。
    • 计算平面法向量(如计算地形坡度)。
    • 用于旋转轴计算(如绕某个轴旋转)。

2.CD, Unity 的 API 绝大多数只能在主线程调用

c:在宏观位置以及逻辑上不能同时修改位置

d:你也不能重复销毁同一个对象(因其内存不存在)

3.对比表

特性StreamingAssetsPathPersistentDataPath
读写权限只读(移动端)可读写
打包包含打包时原样保留不包含,首次运行时创建
平台路径示例Android: jar:file:// 包内路径Android: /storage/emulated/0/Android/data/...
典型用途存放初始资源(配置表、预制体)存放动态生成的文件(存档、截图)
访问方式需用 UnityWebRequest 或 System.IO(PC)直接使用 System.IO 读写

4.在同一个线程之中,执行协程

        知识加油站:unity保姆级教程之协同程序_unity协同-CSDN博客

        "协程在遇到 yield return 时会暂停自身,控制权返回给Unity的主线程工作流(处理渲染、输入等),当预设条件满足(例如:指定时间结束/资源加载完成)后,Unity主线程会在正确时机继续执行协程剩余代码 

        这里我举一个经典的等待时间的例子:

        

IEnumerator Example2()
{
    Debug.Log("实时时间:" + Time.time);
    yield return new WaitForSeconds(2f);
    Debug.Log("2秒后:" + Time.time); 
}

        执行顺序为:开始协程 ----> 打印实时时间 ------>等待两秒(这期间会执行其他本线程的逻辑)------->打印2秒后的时间

        这里我要说一个暴论,在<<游戏编程模式>>一书之中,使用了while去模拟游戏的循环,添加了各种各样的打断条件,其实协程的底层也可以这么看,如果我说的有误,请以你的理解为准

  • 协程本质
    • 基于 C# 的迭代器(IEnumerator)+ 协程调度器
    • 协程不是多线程,所有代码仍在主线程执行

http://www.kler.cn/a/568190.html

相关文章:

  • 【论文阅读笔记】FcaNet: Frequency Channel Attention Networks(2021/7/23)
  • Deepseek开源周第四天:从 DualPipe 到 EPLB
  • 查找Excel包含关键字的行(の几种简单快速方法)
  • 北京中烟创新科技有限公司:荣誉与创新并行
  • 考研复试问题总结-数据结构(1)
  • 【一条龙教程】用AI DS+创作原创音乐 (配合Midjourney漫画)制作原创MTV
  • 构建神经网络之Matplotlib(持续完善)
  • 为什么Agent会失败?2025年对AI的预测
  • wordpress按不同页调用不同的标题3种形式
  • 【银河麒麟高级服务器操作系统】服务器测试业务耗时问题分析及处理全流程分享
  • 神经网络代码入门解析
  • 同时导出Oracle,PostgreSQL库中相同的表位CSV后调用Beyond Compare脚本对比
  • 国高材服务:新能源汽车连接器电气腐蚀性能评价
  • latex 环境配置
  • 0x03 http协议和分层架构
  • ALM研发管理:全新甘特图,让项目管理更高效
  • 接口返回结构的命名问题
  • Git系列详细介绍和操作
  • Linux上构建RPM包指南
  • Android OCR技术实现与优化指南