1.タスクの受信から完了まで、合計でいくつかのプロセスがあります。各プロセスで何に注意する必要がありますか?
- 需要分析:理解と計画のアイデアが一貫していることを確認します。
- uiまたはシーンを構築します。
- コードを書く:
- テスト機能:
- バグを修正:
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デザインパターンを使用します。
モデルとコントロールレイヤー
- 最初にバックパックのサイズを定義します
- 次に、グリッドシート、アイテムID、数量、アイテム情報など、各グリッドのデータを含むグリッドクラスを定義します。
- バックパック管理クラスを作成し、グリッドクラスのリストを申請して、初期化します。
- グリッドの初期化、グリッドが空かどうかの判断、最小スペースの取得、追加、削除、変更など、いくつかのメソッドが含まれています。
ビューレイヤー
- バックパック情報を取得し、対応するグリッドを生成して、バックパックを形成します。
4. UIにモデルを表示するにはどうすればよいですか?
- RenderTextureとrawIamgeを使用します。
- 3Dモデルを特別に照らすカメラを作成します。メインの視点に影響を与えないように、カメラの位置をさらに設定できます。
- RenderTextureを作成し、それをカメラに割り当ててから、Rawimagに割り当てます。
- カメラの下にあるオブジェクトはすべて、レンダリングテクスチャによって記録され、RawIamgに表示されます。
- 注:RenderTextureは、できればゲームと同じ解像度を設定できます。カメラのクリアフラグは単色に設定されています。
5. LuaとC#はどのようにコミュニケーションを実現しますか?
インタラクティブなプロセス:
- C#call Lua:C#ファイルからdllライブラリの基礎となるLuaパーサーを呼び出し、対応するLuaファイルをdllファイルで実行します; C#-> dl l-> Lua
- Lua呼び出しC#:最初にC#ソースファイルに対応するラップファイルを生成します。ワープファイルはLuaインタープリターにフィールドメソッドを登録し、次にワープファイルを介してC#ファイルを呼び出すことができます。ルア->ワープ-> C#
相互作用の原理:
- 主に仮想スタックを介して。
- C#はLuaを呼び出します:C#はデータをスタックの一番上に置き、Luaはスタックの一番上に移動してデータを取得し、Luaで処理を実行してから、結果をスタックの一番上に戻します。次に、C#はスタックの一番上からデータをフェッチして対話を完了します。
- ルアコールC#:バラバラバラバラ
6. uiを作成するとき、何に注意する必要がありますか?回避する方法
- Canvas Canvasは、UnityUIの基本コンポーネントです。キャンバス上で1つまたは複数の要素が変更されると、キャンバス全体が汚染されます。解決策:動的要素と静的要素を分離します。
- 不要なRayCastターゲットを減らします。UGUIクリックイベントも効率の低下であるため、必要がない場合は、コントロールのraycastTargetプロパティをオフにすることをお勧めします。
- 必要がない場合は、ricetextを閉じます。
-
Camera.mainの使用は避けてください
-
キャンバスを非表示にして、Canvasコンポーネントを無効にします。
-
頻繁に動的な要素でのみAnimatorコンポーネントを使用します。めったに変更されない要素の場合は、DoTweenプラグインを使用してアニメーションを完成させることができます。
7.傷ついた浮遊語を達成する方法は?
- まず、外観アニメーションと、ダメージパラメータを送信できる自動破壊機能を備えたフローティングキャラクターのプレハブを作成します。
- ワールド座標で表示するフローティングキャラクターの目標位置を取得し、画面座標に変換します。transfrom.position-> anchorPoint。
- 親コンテナを作成し、フローティング文字プレハブをインスタンス化します。