Unity - Tips, Note

Dong Ho · about 9 mins read
    TitleSubTitle
    Unity Search (Ctrl+K): có thể save những search thường xuyên…có thể xem nhanh với inspector, kéo thả vào Hierarchy…
    “Lock the Inspector” để chỉnh sửa properties mà không bị nhảy sang Inspector khác“Toggle Debug Mode” để hiển thị cả biến private mặc dù không chỉnh sửa được chúng
    Focused Inspectors (Alt+P): luôn hiển thị Inspector ở một cửa sổ mớihoặc mở bằng Right-click và chọn Properties…
    Inspector-Transform expressions: L(a,b), R(a,b), +=, -=, *=, /= …sqrt(a), floor(a), ceil(a), round(a), cos(a), sin(a), tan(a), pi
    Không nên điều chỉnh Scale của Transform Component. Tùy chọn tốt nhất là tạo Models real-life sale.Kích thước của Mesh trong Unity (và do đó là thang đo của Transform) rất quan trọng, đặc biệt là trong quá trình mô phỏng vật lý.
    Transforms: Parenting Transforms về <0,0,0> trước khi thêm ChildĐiều này có nghĩa là tọa độ cục bộ của Child sẽ giống với tọa độ chung, giúp bạn dễ dàng đảm bảo rằng bạn đặt Child ở đúng vị trí.
    Việc thay đổi Scale ảnh hưởng đến Position của child TransformsVí dụ: Scale cha mẹ thành (0,0,0) sẽ định vị tất cả Child ở (0,0,0) so với cha mẹ.
    Testing properties: trong “Play Mode” có thể thay đổi value của properties để xem nó tác động thế nào đến trò chơikhi thoát “properties” value sẽ được reset.
    Deactivate GameObjects: đánh dấu GameObject là “inactive” (trong Inspector)trong Script sử dụng method SetActive
    Nếu bạn Deactivate một GameObject gốc thì bạn cũng Deactivate tất cả các GameObject con của nóviệc Deactivate sẽ ghi đè cài đặt “activeSelf” trên tất cả các GameObject con.
    “Tag” là một từ tham chiếu mà bạn có thể gán cho một hoặc nhiều GameObjectsử dụng “Tag” để tìm reference trong code (FindWithTag)
    Preset Manager: sử dụng để đặt trước giá trị mặc định của component, import AssetsUnity còn áp dụng Giá trị đặt trước mặc định khi bạn sử dụng lệnh Reset trong Inspector.
    Project Structure: Tổ chức tốt sẽ giúp bạn dễ dàng tìm thấy các tài sản mà bạn cần.Sử dụng các tên thư mục mô tả nội dung/mục đích/scope-phạm vi của chúng
    Input System: sử dụng interface của Unity, còn lại để Unity tự xử lý.Input.GetAxis(“Horizontal/Vertical”); …GetAxisRaw, GetKeyDown, GetKeyUp;
    Mobile device input: Multi-touch screen… trạng thái và số lượng ngón tay touch…Chuyên sâu hơn Touch còn có “Lực nhấn”, “điểm tiếp xúc đầu tiên”, là Pen (bút cảm ứng)…
    Physics: tùy tương tác muốn mô phỏng để sử dụng component phù hợp CharacterController, Rigidbody, CollisionCharacter Controller, Rigidbody, Kinematic, Convex, Constant Force, Interpolate/Extrapolate, Collision, Joints, Articulations, Cloth…
    Camera: Ctrl+Shift+F -> chuyển góc nhìn của Scence hiện tại vào Cameratừ Scene View -> chọn Camera -> Ctrl+Shift+F để nhanh chóng căn chỉnh Camera với những gì đang nhìn thấy trong Scene
    Reference: Biến gameObject sẽ luôn trỏ đến GameObject đang được đính kèm Script hiện tại.otherGameObj.GetComponent(); GameObject.Find(), FindWithTag, FindGameObjectsWithTag
    Translate: Phương thức này di chuyển GameObject theo một vector.gameObject.Translate(1, 0, 0); // X-Y-Z của ‘Translate’ tùy theo quy tắc bàn tay trái
    Rotate: Phương thức này xoay GameObject theo một góc.gameObject.transform.Rotate(new Vector3(0, 0, 1)); // X-Y-Z của ‘Vector3’ tùy theo quy tắc bàn tay trái
    Quy tắc bàn tay trái: [TRỤC X]: là hướng ngang (dang 2 tay)[TRỤC X]: hướng ngang (dang 2 tay), [+] đi về bên phải, [-] đi về bên trái
    Quy tắc bàn tay trái: [TRỤC Y]: là phương thẳng đứng (không nhầm lẫn với Z)[TRỤC Y]: là phương thẳng đứng, [+] lên trên, [-] xuống dưới
    Quy tắc bàn tay trái: [TRỤC Z]: là hướng người nhìn thẳng phía trước[TRỤC Z]: hướng người nhìn thẳng phía trước, [+] đi ra về phía trước, [-] đi về phía sau lưng
    Làm việc với UI Builder: trong inspector, giá trị nào được sửa sẽ có đánh dấu LEFT màu trắngtrong UXML sử dụng thuộc tính class=”" giống HTML CSS, các style khác sẽ là inline-style của Element
    “public class CharacterData : ScriptableObject” ko cần đính kèm vào GameObject“ScriptableObject” có thể sử dụng mà không cần tạo các đối tượng gắn vào GameObject.
    [CreateAssetMenu] // This adds an entry to the Create menuđể thêm một sub-menu vào “Assets/Create” menu để tạo nhanh một instance class (file.asset)
    Debug: VS attach to Unity, AssetDatabase cần full path, Resources ko kèm phần mở rộng của file nameAssetDatabase.LoadAssetAtPath cần điền full “Assets/…jpg”, Resources.Load tính từ Assets/Resources, ko tính Resources, không bao gồm phần mở rộng file (.jpg)
    Load UXML sẽ được object kiểu “VisualTreeAsset” => cần .Instantiate() để được “VisualElement”Load UXML sẽ được object kiểu “VisualTreeAsset” => cần .Instantiate() để được “VisualElement”
    “rootVisualElement” là một “VisualElement”, giống “gameObject” luôn có sẵn“rootVisualElement” là một “VisualElement”, giống “gameObject” luôn có sẵn và reference đển TOP-Element (giống “document” của HTML)
    “Custom Control” gồm UXML + Script C# extend “VisualElement” (CloneTree(this))Script C# cần “EXPOSE to UXML and UI Builder” và cần có “DEFAULT constructor”. Script C# đại diện UXML để sử dụng trong coding (gán giá trị cần thiết ở Contructor hoặc Init khi thích hợp).
    UXML đại diện luôn là “VisualTreeAsset”Kể cả có reference bằng kéo thả vào GameObject ([SerializeField])
    UIDocument GameObject có 3 điểm: Panel Setting, Source Asset, Sort OrderCó thể có nhiều UIDocument GameObject trong Screen và cùng trỏ đến 1 Panel Setting
    Show/Hide một VisualElement bằng ‘style.display’ và ‘style.visibility’this.style.display = DisplayStyle.Flex/None; this.style.visibility = Visibility.Visible/Hidden;
    sử dụng uxmlModal.CloneTree(this) thì không cần Instantiate() đã có luôn VisualElement cho “this”CloneTree của VisualTreeAsset sẽ Instantiate luôn cho “this” trong .CloneTree(this)
    các UIDocument chung panelSettings có “rootVisualElement” riêng“rootVisualElement” từ UIDocument không phải là “panelSettings”
    Gửi/Nhận Event lúc “AddListener” phải có “sender” và “receiver” ở cùng 1 nơisender.myEvent.AddListener(receiver.OnEventReceived); // [System.Serializable] public class MyIntEvent : UnityEvent<int> {}
    GameObject.FindWithTag trả về GameObject.GetComponentInChildren chỉ tìm được những Object/Component có extend ModalController : MonoBehaviour
    Khi tìm kiếm Reference, đối tượng đó phải có trong ScenceScript MonoBehaviour nằm trong Assets mà không đính kèm vào GameObject thì không thể tìm thấy
    SendMessage bị lỗi nếu không có “receiver”, children không nhận được Message“This GameObject” không tính Childrend! tất cả MonoBehaviour của GameObject sẽ được call
    SendMessage kích hoạt gọi tất cả method của “This GameObject” kể cả method “private”“SendMessage” call cả method “Private”, method name không có thì sẽ có log lỗi
    nếu muốn Children cũng được call thì sử dụng “BroadcastMessage”“BroadcastMessage” call methodName trên This+Children
    phân biệt instance MonoBehaviour (script) và “gameObject”SendMessage, BroadcastMessage có ở cả 2, nhưng Invoke, StartCoroutine thì chỉ có trên MonoBehaviour
    làm gì cũng cần có kế hoạch và plan, làm ra phải phát triển và bảo trìko đem con bỏ chợ, có nhiều lý thuyết và tool liên quan, chỉ cần thắc mắc-trò chuyện-tìm hiểu
    DongHD > Selection History > BACK-FORWARDTạo một file custom Editor hay sử dụng, khi phình to thì tạo “Unity Editor Extension”
    Detect nền tảng runtime với “Application.platform”if (Application.platform == RuntimePlatform.WindowsPlayer/Android/Android) …
    trong Visual Studio có thể thấy Asset Reference từ C#khi click vào thì sẽ có ping trên Unity Editor
    khi quay (Rotate) thì DẤU (+-) sẽ theo luật XOẮN ỐCsử dụng shorten Vector3.up/down/left/right/forward/back/zero/one
    Game mode mà để Simulator sẽ không nhận bàn phímSimulator của Game View chỉ để xem trên các device khác nhìn sẽ như thế nào
    Rotate hoặc Translate của Transform là MANUAL; Rigidbody là TỰ ĐỘNG với PhysicsPhân biệt MANUAL vs AUTO; Fixed vs Relative to coordinate system
    Trong RigidBody có thể Freeze Position ở ContraintsNếu Camera bị giật khi follow RigidBody thì đổi Interpolate khác
    Refactor thì sử dụng Project Window để kéo thả, Cut-Paste trực tiếp từ Windows Explorerfile.sln Unity sẽ tự tạo dựa trên Folder Name thêm vào Unity Hub (và nó cũng có trong .gitignore)
    Để tìm Prefab trên Hierarchy nằm ở đâu trong AssetsChọn Prefab trên Hierarchy và nhấn “Select” trong Inspector
    Refactor đổi tên thư mục bị Access Deny do script EditorTắt Unity và Visual Studio, đổi manual, nhớ xóa file OldName.meta
    AudioMixer phải “expose” thì mới dùng Script được, có thể “Rename” và “Unexpose”Properties được expose sẽ có indicator MŨI TÊN ->
    Timelines, Animation Track có thể “recording” hoặc “Edit in Animation window”Animation Rule: sẽ thay đổi tuyến tính giá trị giữa 2 POINT gần nhau. Mọi Properties có thể sửa trên Inspector đều có thể Add để Animation.
    Particale Sys: Varying properties over time (mặc định là Constant)Muốn thay đổi thì click vào icon mũi tên (Curve, Random Between…)
    Xem thêm các bài viết khác cùng chủ đề
    • → Unity - Tips, Note · 9 mins read
    Outline

    history cached

    play_arrow arrow_right_alt

    update skip_next

    create close

    settings arrow_downward

    ×

    Memo

    ...
    ×

    Under Maintenance