Unityインタビューの概要-機能の実装

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。
  • 親コンテナを作成し、フローティング文字プレハブをインスタンス化します。

おすすめ

転載: blog.csdn.net/wang_lvril/article/details/109543567