Unity面试总结

1.从接到任务到完成任务,一共几个过程,每个过程注意什么?

  • 需求分析:确保理解和策划想法一致。
  • 搭建ui或场景:
  • 编写代码:
  • 测试功能:
  • 解决bug:

2.设计一个背包系统,格子500. 伪代码实现 增,删,改,查。struct sitem{ string uid,int index, int count, int itemcode }

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace PaiXu 8{ 9 struct sitem { 10 public string uid; //唯一id 11 public int index; //位置 12 public int itemCoad; //物品id 13 public int itemAmount; //物品数量 14 } 15 16 class Class2 17 { 18 public int bagCount = 500; 19 20 //申请一个背包列表 21 public List<sitem> bagList = new List<sitem>(); 22 23 24 //初始化单个背包格 25 public void InitSimpBagItem(int index) 26 { 27 bagList[index] = new sitem(); 28 } 29 //初始化整个背包 30 public void InitBag() { 31 for (int i = 0; i < bagCount; i++) { 32 InitSimpBagItem(i); 33 } 34 } 35 36 //检查格子是否为空 37 public bool CheckNull(int index) { 38 if (bagList[index].itemAmount == 0) 39 { 40 return true; 41 } 42 else { 43 return false; 44 } 45 } 46 //检查背包中是否含有这个物品(id),返回位置 47 public int CheckItem(int id) { 48 for (int i = 0; i < bagCount; i++) { 49 if (bagList[i].itemCoad == id) { 50 return i; 51 } 52 } 53 return -1; 54 } 55 //获取位置最小的空格子 56 public int FindFull() { 57 for (int i = 0; i < bagCount; i++) { 58 if (bagList[i].itemAmount == 0) { 59 return i; 60 } 61 } 62 return -1; //满了 63 } 64 65 66 //增 67 public void AddItem(sitem sitem) { 68 //检查是否存在 69 int bagIndex = CheckItem(sitem.itemCoad); 70 if (bagIndex == -1) 71 { 72 int newBagIndex = FindFull(); 73 if (newBagIndex == -1) 74 { 75 return; 76 } 77 else 78 { 79 sitem.index = newBagIndex; 80 sitem.itemAmount = 1; 81 bagList[newBagIndex] = sitem; 82 } 83 } 84 else { 85 sitem.itemAmount = bagList[bagIndex].itemAmount + 1; 86 bagList[bagIndex] = sitem; 87 } 88 } 89 90 //删 91 public void DelectItem(int id) { 92 int bagIndex = CheckItem(id); 93 if (bagIndex == -1) 94 { 95 return; 96 } 97 else { 98 sitem item = bagList[bagIndex]; 99 item.itemAmount -= 1; 100 if (item.itemAmount <= 0) { 101 InitSimpBagItem(bagIndex); 102 } 103 bagList[bagIndex] = item; 104 } 105 } 106 } 107}

3.描述一下背包如何实现?

使用MVC设计模式:

modle 和  control 层

  • 首先要定义背包的大小
  • 再定义格子类,包含的每个格子的数据,如:格子位子,物品id,数量,物品信息
  • 再搞一个背包管理类,申请一个 格子类的列表,初始化。
  • 包含一些方法,如初始化格子,判断格子是否为空,获取位置最小的空格子,增 删 改 查 等等。

view层

  • 获取背包信息,生成相应的格子,形成背包。

4.如何在UI上显示模型?

  • 使用RenderTexture 和 rawIamge。
  • 创建一个专门照射3D模型的相机,为了避免影响主视角,可以把相机位置设置到远一些的地方。
  • 创建一个RenderTexture,把它指定给该相机,然后指定给Rawimag
  • 该相机下的任何物体都会被渲染纹理记录并显示再RawIamg。
  • 注意事项:RenderTexture可以设置分辨率,最好和游戏一样。相机的Clear Flags设置为Solid Color。

5.Lua和C#是如何实现通信的?

交互过程:

  • C#  call  Lua :由C#文件调用Lua解析器底层dll库,由dll文件执行相应的Lua文件;C# -> dl l-> Lua
  • Lua call   C# :首先生成C#源文件所对应的Wrap文件,warp文件把字段方法注册到lua解释器中,就可以通过Warp文件调用C#文件了。  Lua ->Warp->C#

交互原理:

  • 主要通过虚拟栈实现。
  • C# call Lua:C#将数据放入栈顶,Lua去栈顶获取数据,在lua中做处理,然后把结果放回栈顶,再C#从栈顶取出数据,完成交互.
  • Lua call C#:巴拉巴拉巴拉巴拉

6.做ui过程中需要注意什么?如何避免

  • 画布Canvas是unity UI的基本组件。Canvas上有一个元素或多个元素变化时,会污染整个画布。解决:分离动态元素和静态元素。

  • 减少不必要的RayCast Target 。UGUI的点击事件也是一个效率损耗,所以如无必要,建议关掉控件的raycastTarget属性。

  • 如无必要关闭ricetext。

  • 避免使用Camera.main

  • 隐藏画布,禁用Canvas组件。

  • 只在频繁的动态元素上使用Animator组件,对于很少变化的元素,可以使用DoTween插件来完成动画。

7.伤害飘字怎么实现?

  • 首先制作飘字预制体,拥有出现动画,和自动销毁功能,可传出伤害参数。
  • 获取世界坐标内要显示飘字跟随的目标位置,转换为屏幕坐标。transfrom.position -> anchorPoint.
  • 创建一个父级容器,实例化飘字预制体。
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )