1.從接到任務到完成任務,一共幾個程序,每個程序注意什么?
- 需求分析:確保理解和策劃想法一致,
- 搭建ui或場景:
- 撰寫代碼:
- 測驗功能:
- 解決bug:
2.設計一個背包系統,格子500. 偽代碼實作 增,刪,改,查,struct sitem{ string uid,int index, int count, int itemcode }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PaiXu
{
struct sitem {
public string uid; //唯一id
public int index; //位置
public int itemCoad; //物品id
public int itemAmount; //物品數量
}
class Class2
{
public int bagCount = 500;
//申請一個背包串列
public List<sitem> bagList = new List<sitem>();
//初始化單個背包格
public void InitSimpBagItem(int index)
{
bagList[index] = new sitem();
}
//初始化整個背包
public void InitBag() {
for (int i = 0; i < bagCount; i++) {
InitSimpBagItem(i);
}
}
//檢查格子是否為空
public bool CheckNull(int index) {
if (bagList[index].itemAmount == 0)
{
return true;
}
else {
return false;
}
}
//檢查背包中是否含有這個物品(id),回傳位置
public int CheckItem(int id) {
for (int i = 0; i < bagCount; i++) {
if (bagList[i].itemCoad == id) {
return i;
}
}
return -1;
}
//獲取位置最小的空格子
public int FindFull() {
for (int i = 0; i < bagCount; i++) {
if (bagList[i].itemAmount == 0) {
return i;
}
}
return -1; //滿了
}
//增
public void AddItem(sitem sitem) {
//檢查是否存在
int bagIndex = CheckItem(sitem.itemCoad);
if (bagIndex == -1)
{
int newBagIndex = FindFull();
if (newBagIndex == -1)
{
return;
}
else
{
sitem.index = newBagIndex;
sitem.itemAmount = 1;
bagList[newBagIndex] = sitem;
}
}
else {
sitem.itemAmount = bagList[bagIndex].itemAmount + 1;
bagList[bagIndex] = sitem;
}
}
//刪
public void DelectItem(int id) {
int bagIndex = CheckItem(id);
if (bagIndex == -1)
{
return;
}
else {
sitem item = bagList[bagIndex];
item.itemAmount -= 1;
if (item.itemAmount <= 0) {
InitSimpBagItem(bagIndex);
}
bagList[bagIndex] = item;
}
}
}
}
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.
- 創建一個父級容器,實體化飄字預制體,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/222934.html
標籤:java
