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

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

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

如果你发现了文章内特殊的字体格式,那是AI补充的知识,我发现原网站下面有答案,我将会把答案以不同样式穿插在回答之中

目录

C#

[1. 如果我们想为Unity中的Transform类添加一个自定义的方法,应该如何处理?](#1. 如果我们想为Unity中的Transform类添加一个自定义的方法,应该如何处理?)

[2. 请说出using关键字的两个作用](#2. 请说出using关键字的两个作用)

[3. C#中Dictionary不支持相同键存储 如果想要一个键对应多个值如何处理?](#中Dictionary不支持相同键存储 如果想要一个键对应多个值如何处理?)

[4. 请问下面代码的最终打印结果是什么?为什么?](#4. 请问下面代码的最终打印结果是什么?为什么?)

[5. 上题中的代码,如果我们希望打印出0~9,应该如何修改代码?](#5. 上题中的代码,如果我们希望打印出0~9,应该如何修改代码?)

Unity

[1. Unity中如何将本地坐标转为世界坐标?](#1. Unity中如何将本地坐标转为世界坐标?)

[2. Unity中如何计算出两个向量之间的夹角,请说出两种方式](#2. Unity中如何计算出两个向量之间的夹角,请说出两种方式)

[3. 请写出UGUI中两种处理异形按钮的具体方法](#3. 请写出UGUI中两种处理异形按钮的具体方法)

[4. 请说出Unity中如何进行数据持久化,至少说出5种方式](#4. 请说出Unity中如何进行数据持久化,至少说出5种方式)

[5. 在Unity中如何控制渲染优先级?(谁先渲染谁后渲染,分情况回答)](#5. 在Unity中如何控制渲染优先级?(谁先渲染谁后渲染,分情况回答))


C#

1. 如果我们想为Unity中的Transform类添加一个自定义的方法,应该如何处理?

this拓展方法,下面是一个演示

自定义静态拓展方法

cs 复制代码
public  static class Test 
{
    public static void TransformObj(this Transform transform, int a) {
        Debug.Log(a);
    }
}

在其他地方使用

cs 复制代码
       this.transform.TransformObj(1);

合理输出

2. 请说出using关键字的两个作用

安全使用流文件读写

using 命名空间

Unity数据持久化 之 向文件流读写(详细Plus版)_unity filestream-CSDN博客

**3. C#中Dictionary不支持相同键存储

如果想要一个键对应多个值如何处理?**

字典套字典,字典套顺序表

虽然有一点点麻烦,但是确实比较常用

4. 请问下面代码的最终打印结果是什么?为什么?

10个10 Action本质是委托,委托 相当于一个函数的容器 ,被调用时将依次执行 其添加的匿名函数 ,闭包是捕获变量而不是其值,所有委托共享同一个 i 变量

5. 上题中的代码,如果我们希望打印出0~9,应该如何修改代码?

cs 复制代码
static void Main(string[] args)
{
    Action action = null;
    for (int i = 0; i < 10; i++)
    {
        int temp = i;  
        action += () =>
        {
            Console.WriteLine(temp);
        };
    }
    action();
}

Unity

1. Unity中如何将本地坐标转为世界坐标?

Api:TransformPoint

cs 复制代码
         // 定义一个本地坐标点
        Vector3 localPoint = new Vector3(1, 1, 1); 
        // 获取物体的Transform组件
        Transform objectTransform = transform; 
        // 将本地坐标转换为世界坐标
        Vector3 worldPoint = objectTransform.TransformPoint(localPoint); 
        Debug.Log("世界坐标: " + worldPoint);

2. Unity中如何计算出两个向量之间的夹角,请说出两种方式

Api: Vector3.Angle

因为点乘是a·b = |a| * |b| * cosθ

所以θ = arccos((a·b) / (|a| * |b|))

cs 复制代码
using UnityEngine;

public class DotAngleCalculation : MonoBehaviour
{
    void Start()
    {
        // 定义向量1
        Vector3 vector1 = transform.forward; 
        // 定义向量2
        Vector3 vector2 = new Vector3(0, 1, 0); 

        // 计算向量1的模长
        float magnitude1 = vector1.magnitude;
        // 计算向量2的模长
        float magnitude2 = vector2.magnitude;

        // 计算向量点积
        float dotResult = Vector3.Dot(vector1, vector2); 

        // 计算夹角的余弦值
        float cosAngle = dotResult / (magnitude1 * magnitude2);

        // 使用反余弦函数得到弧度制的夹角
        float radianAngle = Mathf.Acos(cosAngle); 

        // 将弧度转换为角度
        float angle = radianAngle * Mathf.Rad2Deg; 

        Debug.Log("两向量夹角为:" + angle + " 度");
    }
}

3. 请写出UGUI中两种处理异形按钮的具体方法

拼接和Mask2D

4. 请说出Unity中如何进行数据持久化,至少说出5种方式

json,二进制,xml,playerprefs,数据库?

sc是编辑器数据持持

5. 在Unity中如何控制渲染优先级?(谁先渲染谁后渲染,分情况回答)

相关推荐
纳兰青华4 分钟前
bean注入的过程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘
java·开发语言·spring·list
好开心啊没烦恼7 分钟前
Python 数据分析:DataFrame,生成,用字典创建 DataFrame ,键值对数量不一样怎么办?
开发语言·python·数据挖掘·数据分析
liulilittle9 分钟前
VGW 虚拟网关用户手册 (PPP PRIVATE NETWORK 基础设施)
开发语言·网络·c++·网关·智能路由器·路由器·通信
Devil枫19 分钟前
Kotlin高级特性深度解析
android·开发语言·kotlin
ChinaDragonDreamer21 分钟前
Kotlin:2.1.20 的新特性
android·开发语言·kotlin
安之若素^42 分钟前
启用不安全的HTTP方法
java·开发语言
一个天蝎座 白勺 程序猿1 小时前
Python(28)Python循环语句指南:从语法糖到CPython字节码的底层探秘
开发语言·python
持梦远方1 小时前
C 语言基础入门:基本数据类型与运算符详解
c语言·开发语言·c++
zzywxc7872 小时前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
灵性花火2 小时前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt