
Unity3d面试
文章平均质量分 67
四夕立羽
这个作者很懒,什么都没留下…
展开
-
Unity3d:场景加载 GameObejct上脚本执行顺序
场景1脚本public class LoadScene1 : MonoBehaviour{ // Start is called before the first frame update void Start() { StartCoroutine(StartScene()); } IEnumerator StartScene() { AsyncOperation aync = SceneManager.LoadScene原创 2022-05-10 22:31:08 · 1123 阅读 · 1 评论 -
C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换
概述挖坑填数+分治法对挖坑填数进行总结i =L; j = R; 将基准数挖出形成第一个坑a[i],例如第一次的基准数就是0索引的j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。再重复执行2,3二步,直到i==j,将基准数填入a[i]中,相遇时再按照基准更新左半边索引,和右半边索引quick_sort(s, l, i - 1);quick_sort(s, i + 1, r);递归调用,直到每个递归的l 与 r相等原创 2022-05-03 19:17:23 · 920 阅读 · 0 评论 -
C#:TopK:1万个数取前最大的100,堆排序
把1万个数字的前100个 首先放入数组,构成最小堆再循环100到一万之间的。 每次循环判断当前数字是否大于ary[0]当大于时,首先把头节点remove,再把当前数字放入ary[0], 在那100个数之内进行最小堆排序当循环完循环100到一万后。 最大的前100个数字就出来了。时间复杂度第一次构建最小堆时,可以不堆排序,而是把最小值放入到头节点例如:k为头100,n为1万时间复杂度:O(k+n*logk) 空间复杂度:O(n)堆排序using System;using System..原创 2022-05-01 22:31:58 · 1233 阅读 · 0 评论 -
网络:七层,HTTP应用层、TCP传输层、IP网络层,拔网线TCP还在,三次握手保证双向与减少因延时传输错误
网络七层应,表,会,传,网,数,物HTTP应用层TCP传输层IP网络层应用层与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。表示层这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发原创 2022-04-11 22:33:39 · 337 阅读 · 1 评论 -
Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
ui上面展示粒子一般来说有两种方案1.通过rendertexture渲染,可以完美处理层级问题,不过性能不好,多个摄像机2.直接放到ui界面调整特效sort in layer,不过如果ui特效穿插多,层级不好管理,且多canvas造成合批问题现在来第三种方法粒子BakeMesh(要2018.2以上版本)来自Github:https://github.com/mob-sakai/ParticleEffectForUGUI优点:可像UGUI一样通过上下调整层级排序,接受Mask处理各方案比较粒子原创 2022-03-27 11:18:51 · 5669 阅读 · 1 评论 -
C#:数据结构queue队列源码:循环使用数组头标,尾标,防止不停扩容数组
https://referencesource.microsoft.com/#mscorlib/system/collections/queue.cs概述初始化:默认32个,每次2倍扩。所以在初始化时,能预设大小,防止频繁扩容public Queue(): this(32, (float)2.0)入队扩容:内部是个数组,发现size不够,扩容。当头索引在尾索引前,复制size大小到新newarray里;当尾索引在头前,先复制头到数组size-1标,再复制数组0标到尾private vo原创 2022-03-25 20:00:00 · 1130 阅读 · 0 评论 -
C#:stack栈源码,数组栈,链栈
转https://www.cnblogs.com/forever-ys/p/15322022.htmlhttps://referencesource.microsoft.com/#mscorlib/system/collections/stack.cs概述:数组栈:Push不够时进行扩容Array.Copy,每次2倍每次Push放在数组的尾部每次Pop,数组尾部取出,取出后最后项目 _array[_size] = null(释放内存),然后size-1C#源码采用数组栈链栈:Top对象保转载 2022-03-25 09:52:47 · 332 阅读 · 0 评论 -
Unity3d:UGUI源码,Rebuild优化
Image怎么绘制的Unity中渲染的物体都是由网格(Mesh)构成的,而网格的绘制单元是图元(点、线、三角面)绘制信息都存储在Vertexhelper类中,除了顶点外,还包括法线、UV、颜色、切线。Rebuild概念Canvas负责将子节点的UI元素的网格合并,并生成相应的渲染指令再发送到Unity的图形管道的过程。所以Canvas就是渲染UI的组件,当UI发生变化就要执行一次Batch,它是影响性能更大的元凶。注意Canvas的Batch只会影响其子节点,但不会影响其子Canvas。Rebui原创 2022-03-23 23:09:00 · 4403 阅读 · 0 评论 -
unity3d:UGUI源码EventSystem输入系统常见问题
1. button从按下到响应的过程1.先是EventSystem在Update中调用当前输入模块InputModules的Process方法处理所有的鼠标事件,2.并且输入模块会调用RaycastAll来得到目标信息,3.通过子物体未挂载IEventSystemHandler,再找父物体方式找到事件实际接收者并执行点击事件2. button子物体text也勾选了RaycastTarget,为什么是响应button,而不是text创建一个Button,那这个Button还包含了Text组件,如果t原创 2022-03-23 21:40:00 · 2502 阅读 · 0 评论 -
C#数据结构:两栈实现队列,两队列实现栈
两个栈实现队列:栈实现先进先出栈1负责队尾,栈2负责队头每次入队,栈2无元素且栈1无元素,入栈2;否则入栈1每次出队,栈2有元素,出栈2顶;否则把全部栈1入栈2,再出栈2顶bool Pop(ref int value) { if (m_stack2.Count > 0) { value = m_stack2.Pop(); return true; } while (m原创 2022-03-16 20:45:00 · 1061 阅读 · 0 评论 -
Lua与C#交互原理(转)
https://www.cnblogs.com/slysky/p/7919114.htmlhttps://blog.csdn.net/j756915370/article/details/105906839概括:通过栈来实现。lua调用c#就是将lua层的参数和c#导出函数入栈,然后执行函数。c#调用lua就是将c#层的参数和lua函数入栈,然后执行函数虚拟栈Lua在C函数和脚本函数之间创建了一种虚拟栈的结构,栈的元素代表一个Lua的值(table, string, nil等等8种基本类型)。Lu转载 2022-03-10 22:30:18 · 4174 阅读 · 0 评论 -
Lua:泛型for,迭代器,闭包实现ipairs(转)
https://www.jb51.net/article/86840.htm泛型for基本格式for <var-list> in <exp-list> do <body> end 实现自己的ipairsprint("ipair实现原理---------------")local function iter(s, i) i = i + 1 local v = s[i] if v then return i, v endendfunction my转载 2022-03-09 18:45:46 · 409 阅读 · 0 评论 -
Lua:深拷贝与浅拷贝,强引用与弱引用
Lua深拷贝与浅拷贝function DeepCopy(object) -- 已经复制过的table,key为复制源table,value为复制后的table -- 为了防止table中的某个属性为自身时出现死循环 -- 避免本该是同一个table的属性,在复制时变成2个不同的table(内容同,但是地址关系和原来的不一样了) local lookup_table = {} local function _copy(object) if type(o原创 2022-03-08 14:49:09 · 2180 阅读 · 0 评论 -
Unity3d:实现自己的Dotween,C#扩展方法,插值旋转,插值移动
C#扩展方法C#扩展方法第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。public static class ExtendMethods { public static tween DoRotate(this Transform transform, Vector3 target, float time) { tween myTween = new tween("DoRotate", transform, target,原创 2022-01-14 22:06:44 · 3481 阅读 · 0 评论 -
Unity3d+C#:Dictionary源码与使用注意(转)
转https://www.cnblogs.com/xiaomowang/p/12405639.htmlEntry结构体entry这样一个结构体,它的定义如下面代码所示,这是Dictionary中存放数据的最小单位,调用Add(Key,Value)方法添加的元素都会被封装在这样的一个结构体中private struct Entry { public int hashCode; // Lower 31 bits of hash code, -1 if unus转载 2022-01-08 10:52:21 · 733 阅读 · 0 评论 -
C#:List源码,使用注意,优化
List内部是用数组实现的,而不是链表,并且当没有给予指定容量时,初始的容量为0Add// Adds the given object to the end of this list. The size of the list is// increased by one. If required, the capacity of the list is doubled// before adding the new element.//public void Add(T item) {原创 2022-01-07 22:55:22 · 830 阅读 · 0 评论 -
Unity3d:c#,Mono,IL2CPP,托管代码,AOT,JIT
Mono跨平台ILIntermediate Language,中间语言,面向对象的汇编语言工作流通过C#编译器mcs,将C#编译为IL(中间语言,byte code)通过Mono运行时中的编译器将IL编译成对应平台的原生码IL三种转译方式即时编译(Just in time,JIT):程序运行过程中,将CIL的byte code转译为目标平台的原生码。提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中的CIL的byte code部分转译为目标平台的原生码原创 2022-01-05 23:08:03 · 2887 阅读 · 1 评论 -
unity3d:协程实现原理(转),IEnumerator,yield,编辑器下协程
转https://www.cnblogs.com/iwiniwin/p/14878498.htmlIEnumeratorIEnumerator是所有非泛型枚举器的基接口。换而言之就是IEnumerator定义了一种适用于任意集合的迭代方式。任意一个集合只要实现自己的IEnumerator,它的使用者就可以通过IEnumerator迭代集合中的元素public interface IEnumerator{ object Current { get; } bool MoveNext()转载 2022-01-05 16:30:06 · 713 阅读 · 0 评论 -
unity3d:Astar寻路,A星,A*,二叉堆优化Open表
原理视频油管:https://youtu.be/i0x5fj4PqP4别人的B站翻译:https://www.bilibili.com/video/BV1v44y1h7Dt?spm_id_from=333.999.0.0基本概念3个数值G:起点到当前点步数:会随着路径的改变,例如找到一条更好的路了,A的点G = 原本A的G 和 cur路径到A的G(cur的G + cur到A的G)中的最小值H:当前点到终点步数,乐观估计,无视障碍物。即实际的H(包含绕开障碍物的整条代价) > 按照无障碍物原创 2021-12-27 22:38:10 · 2429 阅读 · 0 评论 -
unity3d:渲染管线,一个cube输出到屏幕过程
应用阶段:设置摄像机,光源等,得到顶点数据几何阶段:顶点变为图元。顶点着色器进行顶点着色与坐标转换,局部->世界->观察(摄像机为圆点)->裁剪(圆点为中心的立方体)->屏幕—》输出图元光栅:图元变为片元:顶点三个三个画三角形,然后把通过遍历得到的采样点一个一个上色,形成一个模型的过程逐片元操作:片元到像素:经过裁剪检测,Alpha检测,模板检测,深度检测,混合Q:哪些可配置,可编程,不可控制1、图元组装和光栅化几个阶段是由硬件自己完成的2、顶点着色器、几何着色器和片段着原创 2021-12-19 22:56:55 · 1398 阅读 · 0 评论 -
unity3d:cube是24个顶点,uv贴图到cube的6个面
转https://blog.csdn.net/o83290102o5/article/details/117428173一个cube是24个顶点,12个三角面Shader "my/jc"{ SubShader { Tags { "RenderType"="Opaque" } Pass { CGPROGRAM #pragma verte转载 2021-12-19 18:19:57 · 1943 阅读 · 1 评论 -
unity3d:渲染流水线
转自https://www.jianshu.com/p/2d8eeec9d0ef应用阶段本阶段主要是将与渲染有关的场景数据包括:模型图元数据、光源数据、摄像机数据传递到几何阶段。这个阶段是在CPU中进行的,因此可以由程序员全权控制,比如应用一些算法对渲染性能做一些优化。备注:图元:构成模型的基本单元,点、线、三角形。图元的基本单元是顶点。概括:此部分由CPU主导。在此部分可以设置场景设置,防止模型,放置摄像机以及灯光几何阶段:主要是将模型的顶点数据包括位置信息和着色信息转换到屏幕空间。此后的阶转载 2021-12-18 00:17:26 · 616 阅读 · 0 评论 -
unity3d:Matrix4x4矩阵位移,缩放,旋转
二维坐标轴旋转公式推导https://www.cnblogs.com/fangsmile/p/8622421.html设点M在原坐标系中的坐标为(x,y),对应向量的模为r,幅角为α.将坐标轴绕坐标原点,按照逆时针方向旋转角θ形成新坐标系,点M在新坐标系中的坐标为(如图2-4),则由此得到坐标轴的旋转的坐标变换公式矩阵旋转公式推导https://www.cnblogs.com/wywnet/p/3585075.htmlMatrix4x4矩阵https://www.cnblogs原创 2021-12-16 01:35:39 · 5270 阅读 · 0 评论 -
unity3d:GC优化
https://edu.uwa4d.com/course-intro/0/165?purchased=true读书笔记减少对象数量内存对齐在网络发送数据时使用共用体并缓存对象// StructLayout使设计者可以控制类或结构的数据字段的物理布局 // Explicit与FieldOffset一起可以控制每个数据成员的精确位置 [StructLayout(LayoutKind.Explicit)]public class CSDataC{ / public membe原创 2021-12-15 01:31:19 · 759 阅读 · 0 评论 -
unity3d:物理优化
https://zhuanlan.zhihu.com/p/387410992?utm_medium=social&utm_oi=703841245952212992项目是否确实需要物理模块降低固定时间步(Fixed Timestep)Edit>>Project Settings >> Time,在那里,你能找到 Fixed Time Step ,它的默认值为 0.02默认值为 0.02(每秒),如果更新不是很频繁不用太精确,可以 0.03 - 0.04设置0.03转载 2021-12-12 16:56:51 · 1151 阅读 · 0 评论 -
unity3d:动画animator,AvatarMask,边走边攻击,单独设置run动画速度
分为3layer,run-idel层(layer0),攻击时上半身层(layer1),原地攻击层(layer2),其中layer1,layer2里面完全复制的动画状态机其中layer1设置mask,屏蔽下半身动作在移动时切换layer1,layer2的权重,同时只存在一个为0,一个为1using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.AI;public原创 2021-12-11 21:55:30 · 6635 阅读 · 0 评论 -
lua面向对象:new,继承,多态
--保存类类型的虚表local _class = {}local lua_obj_count = 0function BaseClass(super) -- 生成一个类类型 local class_type = {} -- 在创建对象的时候自动调用 class_type.__init = false class_type.__delete = false class_type.super = super class_type.New = function(...) lua_obj_原创 2021-08-24 00:35:44 · 1299 阅读 · 0 评论 -
unity3d:单例模式,Mono场景唯一,不销毁;C# where T:new(),泛型约束;Lua单例模式,table ,self
C#单例模式 /// <summary> /// C#单例模式 /// </summary> public abstract class Singleton<T> where T : class,new() { private static T instance; private stat...原创 2018-06-03 16:10:31 · 931 阅读 · 0 评论 -
C#:冒泡排序,已经排好序的优化
第一层循环,i从 0到max-1第二个循环,j从0到max-i-1每次比较j与j+1的大小,如果发生位置交换,hasExchagend置true如果第一次冒泡没发生交换,hasExchagend == false,说明已经全部是排好顺序的,直接breakpublic static void BubbleSort(int[] array) { bool hasExchagend = false; for (int i = 0; i <原创 2017-04-26 16:53:51 · 561 阅读 · 0 评论