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 bagList = new List();
    
    
            // 
            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を使用します.
  • 3 Dモデルに特化したカメラを作成し、主な視野角に影響を与えないように、カメラの位置を遠くに設定することができます.
  • RenderTextureを作成し、カメラに割り当て、Rawimag
  • に割り当てます.
  • カメラの下の任意の物体は、レンダリングされたテクスチャによって記録され、RawIamgの再表示される.
  • 注意事項:RenderTextureは解像度を設定できますが、ゲームと同じようにしたほうがいいです.カメラのClear FlagsはSolid Colorに設定されています.

  • 5.LuaとC#はどのように通信を実現しますか?


    インタラクティブプロセス:
  • C#call Lua:C#ファイルからLua解析器の下部dllライブラリを呼び出し、dllファイルから対応するLuaファイルを実行する.C# -> dl l-> Lua
  • Luacall C#:まずC#ソースファイルに対応するWrapファイルを生成し、warpファイルはフィールドメソッドをlua解釈器に登録し、WarpファイルでC#ファイルを呼び出すことができます.  Lua ->Warp->C#

  • 相互作用の原理:
  • 主に仮想スタックによって実現される.
  • C#call Lua:C#スタックの上にデータを入れ、Luaはスタックの上に行ってデータを取得し、luaで処理し、結果をスタックの上に戻し、C#はスタックの上からデータを取り出し、インタラクションを完了する.
  • Luacall C#:バラバラ
  • 6.uiをする過程で何に注意する必要がありますか?回避方法

  • キャンバスCanvasはunity UIの基本コンポーネントです.Canvasに1つ以上の要素が変化すると、キャンバス全体が汚染されます.解決:動的要素と静的要素を分離します.
  • 不要なRayCast Targetを減らす.UGUIのクリックイベントも効率的なロスなので、必要がなければコントロールのraycastTargetプロパティをオフにすることをお勧めします.
  • ricetextを閉じる必要がない場合
  • Cameraの使用を避ける.main
  • キャンバスを非表示にし、Canvasコンポーネントを無効にします.
  • 頻繁なダイナミック要素でのみAnimatorコンポーネントを使用し、変化の少ない要素ではDoTweenプラグインを使用してアニメーションを完了できます.

  • 7.ダメージフロートはどうやって実現しますか?

  • まずフロートプリフォームを作成し、アニメーションが表示され、自動的に破壊される機能を持ち、ダメージパラメータを伝達することができる.
  • 世界座標内にフロート追従を表示するターゲット位置を取得し、画面座標に変換します.transfrom.position -> anchorPoint.
  • 親コンテナを作成し、フロートプリフォームをインスタンス化します.