Ngân hàng câu hỏi của chương

Câu hỏi: PRU213 - Chương 2: Lập trình C# trong Unity

46 câu trắc nghiệm kèm lời giải của môn Game Programming with C# - Lập trình Game với C#, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/46 câuCòn 26
1How can dragging functionality be implemented in Unity?4 lựa chọnKhó0% trả lời đúng
ABy using only OnMousePosition to calculate the delta during the drag
BBy disabling the Input System during gameplay to set the fixed value for the delta during the drag
CBy setting a high mouse sensitivity value to the delta during the drag
DBy combining OnMousePosition and mouse button actions to calculate the delta during the drag
Lời giải
Để thực hiện chức năng kéo (drag) trong Unity, bạn cần kết hợp giữa vị trí chuột hiện tại và hành động nhấn chuột để tính toán độ lệch (delta) trong quá trình kéo. Điều này giúp đảm bảo tính chính xác và phản hồi tốt khi kéo các đối tượng trong game. Phương pháp này cho phép bạn dễ dàng điều chỉnh độ nhạy kéo và phản hồi của game theo ý muốn. Ngoài ra, nó cũng giúp giảm thiểu sự can thiệp của hệ thống Input trong quá trình kéo, từ đó cải thiện hiệu suất và giảm thiểu độ trễ.
Mở trang câu hỏi này →
2When is the Awake() method called in Unity?4 lựa chọnTrung bình
AWhen the script instance is being loaded
BOnly when the game starts
COnce per frame, after Start()
DContinuously during gameplay
Lời giải
Awake() là một phương thức đặc biệt trong Unity, được gọi khi một script được khởi tạo. Điều này có nghĩa là khi một script được tạo ra và gắn vào một đối tượng trong Unity, phương thức Awake() sẽ được gọi ngay lập tức. Điều này xảy ra ngay sau khi Start() được gọi, nhưng trước khi Update() được gọi. Vì vậy, Awake() chỉ được gọi một lần khi script được khởi tạo, chứ không phải liên tục trong suốt quá trình chơi game. Điều này cho phép bạn thực hiện các tác vụ cần thiết khi script được khởi tạo mà không làm gián đoạn quá trình chơi game.
Mở trang câu hỏi này →
Đề bài
if (Input.GetKeyDown(KeyCode.Space)) {
  Debug.Log("Jump");
}

else

Đề bài
if (Input.GetKeyDown(KeyCode.LeftShift)) {
  Debug.Log("Run");
}

else { Debug.Log("Idle"); }

APrints "Jump" when the Space key is pressed, "Run" when the LeftShift key is pressed, and "Idle" when nothing is pressed.
BOnly prints "Jump" when the Space key is pressed and does nothing for other keys.
CPrints "Jump" when the Space key is pressed and "Idle" in all other cases.
DPrints "Idle" regardless of which key is pressed.
Lời giải
Khi bạn nhấn phím Space, chương trình Unity sẽ thực hiện hành động in ra "Jump". Nếu bạn nhấn phím LeftShift, chương trình sẽ in ra "Run". Trong trường hợp bạn không nhấn bất kỳ phím nào, chương trình sẽ in ra "Idle". Điều này có nghĩa là chương trình sẽ kiểm tra trạng thái các phím trên bàn phím và thực hiện hành động tương ứng. Ví dụ, nếu bạn nhấn Space và LeftShift cùng lúc, chương trình sẽ in ra "Jump" vì điều kiện Input.GetKeyDown(KeyCode.Space) sẽ được thực hiện trước. Điều này cho thấy chương trình sử dụng điều kiện if-else để kiểm tra trạng thái các phím và thực hiện hành động phù hợp.
Mở trang câu hỏi này →
AInput.GetKey() only works for keyboard, while Input.GetKeyDown() works for both mouse and keyboard.
BInput.GetKey() is for axis input, and Input.GetKeyDown() is for button input.
CInput.GetKey() checks a key is pressed, while Input.GetKeyDown() checks for a key release.
DInput.GetKey() detects continuous pressing, while Input.GetKeyDown() detects a single press event.
Lời giải
Trong Unity, Input.GetKey() và Input.GetKeyDown() là hai hàm khác nhau được sử dụng để kiểm tra trạng thái của phím bấm. Input.GetKey() được sử dụng để kiểm tra xem một phím nào đó có đang được giữ xuống hay không. Nó sẽ trả về giá trị True nếu phím đó đang được giữ xuống và False nếu không. Ngược lại, Input.GetKeyDown() được sử dụng để kiểm tra xem một phím nào đó có đang được nhấn xuống lần đầu tiên hay không. Nó sẽ trả về giá trị True nếu phím đó được nhấn xuống lần đầu tiên và False nếu không. Điều này có nghĩa là Input.GetKey() sẽ trả về True cho đến khi phím đó được thả ra, trong khi Input.GetKeyDown() chỉ trả về True một lần khi phím đó được nhấn xuống lần đầu tiên. Vì vậy, Input.GetKey() được sử dụng để phát hiện trạng thái liên tục của phím bấm, trong khi Input.GetKeyDown() được sử dụng để phát hiện sự kiện nhấn xuống một lần.
Mở trang câu hỏi này →
AExecuteCoroutine(MyCoroutine());
BMyCoroutine.Start();
CBeginCoroutine(MyCoroutine());
DStartCoroutine(MyCoroutine());
Lời giải
Để bắt đầu một coroutine trong Unity C# scripting, bạn cần sử dụng hàm StartCoroutine(). Hàm này sẽ khởi tạo và bắt đầu thực hiện coroutine. Trong ví dụ trên, MyCoroutine() là một coroutine được định nghĩa như một phương thức trả về IEnumerator. Khi bạn gọi StartCoroutine(MyCoroutine()), Unity sẽ bắt đầu thực hiện coroutine và chờ đợi cho đến khi nó kết thúc. Điều này cho phép coroutine thực hiện các hành động đồng thời với code chính của chương trình. Ngoài ra, bạn cũng có thể sử dụng hàm StartCoroutine() để bắt đầu các coroutine khác nhau trong cùng một chương trình.
Mở trang câu hỏi này →
6What functionality does the GameObject class NOT provide in Unity scripting?4 lựa chọnTrung bình67% trả lời đúng
AFinding GameObjects
BMaking connections between GameObjects
CAdding or removing components attached to GameObjects
DCreating new scenes in Unity using GameObjects
Lời giải
Tương tự như các lớp khác trong Unity, lớp GameObject cung cấp một số tính năng cơ bản để tương tác với các đối tượng trong trò chơi. Tuy nhiên, lớp GameObject không cung cấp khả năng tạo mới các cảnh trong Unity. Điều này là do việc tạo mới cảnh thường liên quan đến việc quản lý các tài nguyên và dữ liệu lớn, và Unity cung cấp các lớp và phương thức khác để hỗ trợ việc này. Thay vào đó, bạn có thể sử dụng lớp GameObject để tìm kiếm các đối tượng, thêm hoặc xóa các thành phần, và tạo mối liên kết giữa các đối tượng.
Mở trang câu hỏi này →
AInput.GetButton()
BInput.GetKey()
CInput.GetTouch()
DInput.GetAxis()
Lời giải
Hàm thường được sử dụng bởi Input Manager để xử lý sự kiện bàn phím trong Unity là Input.GetKey(). Hàm này được sử dụng để kiểm tra xem một nút nào đó đã được nhấn hay chưa. Nó sẽ trả về giá trị True nếu nút được nhấn và False nếu nút không được nhấn. Hàm này rất hữu ích trong việc kiểm tra trạng thái của các nút trên bàn phím và thực hiện các hành động tương ứng. Ví dụ, bạn có thể sử dụng hàm này để kiểm tra xem nút 'A' đã được nhấn hay chưa và thực hiện một hành động khi nút đó được nhấn.
Mở trang câu hỏi này →
AUsing a switch statement to handle each game state and execute related actions
BUsing multiple if-else statements to check the current state and perform corresponding actions
CUsing a for loop to iterate through the game states
DUsing a while loop to keep checking the game state
Lời giải
Để thực hiện một cấu trúc quyết định xử lý các trạng thái trò chơi khác nhau như "Bắt đầu", "Chơi", và "Trò chơi kết thúc" trong Unity, chúng ta có thể sử dụng một số phương pháp khác nhau. Một trong những cách phổ biến nhất là sử dụng một câu lệnh switch để xử lý từng trạng thái trò chơi và thực hiện các hành động liên quan. Ví dụ, chúng ta có thể sử dụng một biến trạng thái để lưu trữ trạng thái hiện tại của trò chơi và sử dụng câu lệnh switch để kiểm tra trạng thái và thực hiện các hành động tương ứng. Điều này giúp giảm thiểu số lượng mã và làm cho mã dễ đọc và bảo trì hơn. Ngoài ra, chúng ta cũng có thể sử dụng các phương pháp khác như sử dụng nhiều câu lệnh if-else để kiểm tra trạng thái và thực hiện các hành động tương ứng, nhưng phương pháp switch thường được coi là hiệu quả hơn.
Mở trang câu hỏi này →
9When is the Start function in a MonoBehaviour script typically called?4 lựa chọnDễ100% trả lời đúng
ABefore gameplay, ideal for initialization tasks
BDuring frame updates for GameObject actions
CAfter gameplay, for cleanup tasks
DWhen responding to user input during gameplay
Lời giải
Hàm Start trong một script MonoBehaviour thường được gọi trước khi bắt đầu gameplay. Đây là một trong những phương thức đặc biệt được Unity cung cấp, được gọi một lần khi trò chơi bắt đầu. Trong phương thức này, bạn có thể thực hiện các tác vụ khởi tạo cần thiết cho trò chơi, chẳng hạn như khởi tạo các biến, tải dữ liệu, tạo các đối tượng cần thiết, v.v. Điều này giúp đảm bảo rằng trò chơi có thể chạy một cách trơn tru và hiệu quả. Ngoài ra, bạn cũng có thể sử dụng phương thức này để thực hiện các tác vụ cần thiết trước khi bắt đầu gameplay, chẳng hạn như tải dữ liệu, khởi tạo các biến, v.v.
Mở trang câu hỏi này →
10When is the LateUpdate function in Unity scripts typically called?4 lựa chọnDễ100% trả lời đúng
AAfter all Update functions have been called for the frame
BOn the frame when the script instance is being loaded
CDuring the first frame when the script is enabled
DAt a fixed interval for physics-related updates
Lời giải
Hàm LateUpdate trong Unity scripts thường được gọi khi nào? Hàm LateUpdate được gọi sau khi tất cả các hàm Update khác đã được gọi trong một khung hình. Điều này có nghĩa là các hàm Update khác đã được thực hiện trước khi LateUpdate được gọi. Điều này rất quan trọng vì nó cho phép các hàm Update khác thực hiện các tác vụ cần thiết trước khi LateUpdate thực hiện các tác vụ cần thiết của nó. Ví dụ, nếu bạn muốn cập nhật vị trí của một đối tượng sau khi tất cả các đối tượng khác đã được cập nhật, bạn có thể sử dụng hàm LateUpdate. Hàm LateUpdate cũng được sử dụng để cập nhật các đối tượng có liên quan đến vật lý, chẳng hạn như các đối tượng có liên quan đến lực hấp dẫn hoặc lực ma sát.
Mở trang câu hỏi này →
11In C#, what is the difference between value types and reference types?4 lựa chọnDễ100% trả lời đúng
AValue types are used only for numeric data, while reference types can represent any data.
BValue types are stored on the heap, while reference types are stored on the stack.
CThere is no difference; the terms are interchangeable in C# programming.
DValue types directly contain their data, while reference types contain a reference to their data.
Lời giải
Trong C#, giá trị kiểu và kiểu tham chiếu là hai loại biến khác nhau. Giá trị kiểu là những biến được lưu trữ trực tiếp trong bộ nhớ, không cần phải lưu trữ địa chỉ. Ví dụ: int, float, bool, char. Ngược lại, kiểu tham chiếu là những biến được lưu trữ dưới dạng địa chỉ trong bộ nhớ, và để truy cập giá trị thực tế, chúng ta cần phải đi đến địa chỉ đó. Ví dụ: string, array, class, delegate. Điều này có nghĩa là khi bạn thay đổi giá trị của một biến kiểu tham chiếu, giá trị của biến khác cũng sẽ thay đổi nếu cả hai biến tham chiếu đến cùng một đối tượng. Điều này giúp giảm thiểu việc sử dụng bộ nhớ và tăng hiệu suất của chương trình.
Mở trang câu hỏi này →
AComponent-based design ensures better performance across different platforms
BComponent-based design is more familiar to developers than inheritance-based design from GameObject
CComponent-based design simplifies debugging and reduces the complexity of your scripts
DComponent-based design allows for greater flexibility and reusability of GameObject functionalities
Lời giải
Khi thiết kế một trò chơi trong Unity, bạn có thể chọn giữa hai phương pháp thiết kế khác nhau: thiết kế dựa trên thành phần (component-based design) và thiết kế dựa trên thừa kế (inheritance-based design). Thiết kế dựa trên thành phần cho phép bạn tạo ra các thành phần độc lập có thể được sử dụng lại trong nhiều GameObject khác nhau. Điều này giúp tăng tính linh hoạt và tái sử dụng của các tính năng GameObject. Ví dụ, bạn có thể tạo một thành phần "Phát Súng" độc lập và sử dụng nó trong nhiều loại nhân vật khác nhau. Điều này giúp giảm thiểu sự lặp lại mã và tăng cường khả năng mở rộng của trò chơi. Ngoài ra, thiết kế dựa trên thành phần cũng giúp đơn giản hóa quá trình debug và giảm thiểu phức tạp của mã.
Mở trang câu hỏi này →
ARigidbody
BTransform
CQuaternion
DVector3
Lời giải
Trong Unity, có nhiều cách để biểu diễn các chuyển động. Tuy nhiên, nếu bạn đang tìm kiếm một lớp đặc biệt dành cho Unity để biểu diễn các xoay, thì lớp Quaternion chính là lựa chọn phù hợp. Quaternion là một lớp được sử dụng để biểu diễn các chuyển động xoay trong không gian 3D. Nó cho phép bạn dễ dàng thực hiện các phép toán như cộng, trừ, nhân và chia các chuyển động xoay. Ngoài ra, Quaternion cũng được sử dụng để biểu diễn các chuyển động xoay trong các hệ thống cơ học và vật lý trong Unity.
Mở trang câu hỏi này →
AHandling initialization tasks before gameplay
BExecuting actions triggered by collisions
CResponding to user input during gameplay
DControlling GameObject actions for each frame during gameplay
Lời giải
Trong Unity, hàm Update là một hàm đặc biệt được sử dụng trong các script MonoBehaviour. Hàm này được gọi mỗi khung hình (frame) trong quá trình chơi game. Mục đích chính của hàm Update là kiểm soát các hành động của GameObject trong mỗi khung hình. Điều này có nghĩa là bất kỳ hành động nào được thực hiện trong hàm Update sẽ được lặp lại mỗi khung hình, cho phép bạn tạo ra các hiệu ứng động và phản ứng với các sự kiện trong game. Ví dụ, bạn có thể sử dụng hàm Update để di chuyển GameObject, kiểm soát tốc độ, hoặc thực hiện các hành động khác dựa trên thời gian và trạng thái của game.
Mở trang câu hỏi này →
15How does a script operate in Unity compared to a traditional program?4 lựa chọnDễ75% trả lời đúng
AUnity intermittently passes control to the script by calling specific event functions
BUnity requires manual updates every frame to run script
CUnity executes the script only once at the start of the game
DUnity runs the script continuously in a loop like a traditional program
Lời giải
Trong Unity, một kịch bản (script) hoạt động khác với một chương trình truyền thống. Thay vì chạy liên tục trong một vòng lặp, kịch bản Unity được thực hiện bởi Unity khi cần thiết. Điều này có nghĩa là Unity sẽ gọi các hàm (function) cụ thể trong kịch bản khi cần, thay vì chạy kịch bản liên tục. Điều này cho phép Unity quản lý hiệu suất và hiệu quả hơn, đặc biệt là trong các trò chơi phức tạp. Ví dụ, khi một nhân vật di chuyển, Unity sẽ gọi hàm cập nhật vị trí của nhân vật trong kịch bản, thay vì chạy kịch bản liên tục để cập nhật vị trí.
Mở trang câu hỏi này →
16How can mouse input be customized in Unity?4 lựa chọnTrung bình
ABy adding Rigidbody components to the mouse
BBy using the Transform component
CBy modifying Input Actions to adjust sensitivity
DBy enabling Sprite Renderer on the mouse pointer
Lời giải
Để tùy chỉnh đầu vào chuột trong Unity, bạn có thể sử dụng các phương pháp khác nhau. Một trong những cách phổ biến nhất là sử dụng Input Actions. Input Actions cho phép bạn điều chỉnh độ nhạy của chuột, điều này rất hữu ích khi bạn muốn tạo ra một trải nghiệm chơi game có độ chính xác cao. Ngoài ra, bạn cũng có thể sử dụng các thành phần khác như Rigidbody và Transform để tùy chỉnh đầu vào chuột, nhưng điều này thường không cần thiết. Vì vậy, câu trả lời đúng cho câu hỏi này là "By modifying Input Actions to adjust sensitivity".
Mở trang câu hỏi này →
17What is the primary purpose of Unity's Input System?4 lựa chọnDễ100% trả lời đúng
ATo define the physics behavior of objects
BTo manage the appearance of game objects
CTo control lighting in the scene
DTo handle user input from devices, touch, or gestures
Lời giải
Unity Input System là một công cụ mạnh mẽ giúp bạn quản lý và xử lý các đầu vào từ người dùng trong trò chơi của mình. Mục đích chính của Unity Input System là để xử lý các đầu vào từ thiết bị, chạm hoặc các cử chỉ khác nhau. Điều này bao gồm việc nhận diện các nút bấm, chạm, di chuyển và các hành động khác từ các thiết bị như bàn phím, chuột, tay cầm chơi game, màn hình cảm ứng và các thiết bị khác. Với Unity Input System, bạn có thể tạo ra các trải nghiệm chơi game đa dạng và phong phú, đáp ứng được nhu cầu của người chơi.
Mở trang câu hỏi này →
18How would you make the character jump only when the "W" key is pressed once?4 lựa chọnDễ100% trả lời đúng
AUse Input.GetKeyDown(KeyCode.W) in Update().
BUse Input.GetKeyDown(KeyCode.W) in FixedUpdate().
CUse Input.GetKey(KeyCode.W) in Update().
DUse Input.GetKey(KeyCode.W) in FixedUpdate().
Lời giải
Để khiến nhân vật nhảy chỉ khi nhấn phím 'W' một lần, chúng ta cần sử dụng hàm Input.GetKeyDown(KeyCode.W) trong phương thức Update(). Hàm này sẽ trả về giá trị True nếu phím được nhấn trong lần cập nhật hiện tại, và False nếu phím không được nhấn. Điều này giúp chúng ta thực hiện hành động nhảy một lần khi nhấn phím 'W' mà không cần phải giữ phím. Trong khi đó, hàm Input.GetKey(KeyCode.W) sẽ trả về giá trị True nếu phím được nhấn trong bất kỳ lần cập nhật nào, và hàm Input.GetKeyDown(KeyCode.W) trong FixedUpdate() sẽ không phù hợp vì nó không được sử dụng để kiểm tra hành động người dùng.
Mở trang câu hỏi này →
ATo provide a base class with methods and properties essential for scripting GameObject behavior in Unity.
BTo manage the user interface elements of a Unity game.
CTo define the main game mechanics and rules.
DTo act as the main entry point for Unity applications.
Lời giải
Trong Unity C#, lớp MonoBehaviour đóng vai trò quan trọng khi tất cả các script trong Unity đều kế thừa từ nó. Lớp này cung cấp một số phương thức và thuộc tính cơ bản cần thiết để lập trình hành vi của GameObject trong Unity. Ví dụ, các phương thức như Start(), Update(), OnDestroy() cho phép lập trình viên thực hiện các hành động khi GameObject được tạo, mỗi frame hoặc khi GameObject bị hủy. Ngoài ra, lớp MonoBehaviour cũng cung cấp các thuộc tính như GetComponent(), GetComponentInChildren() để giúp lập trình viên truy cập và sử dụng các thành phần của GameObject. Tóm lại, lớp MonoBehaviour là lớp cơ sở quan trọng giúp lập trình viên có thể tạo ra các script hiệu quả và dễ dàng quản lý hành vi của GameObject trong Unity.
Mở trang câu hỏi này →
ARegister callbacks for OnMouseDown(InputAction.CallbackContext context) and OnMousePosition(InputAction.CallbackContext context), starting the drag on context.performed and tracking the mouse position until the button is released.
BUse OnMouseDrag(InputAction.CallbackContext context) and check if context.performed is true for starting drag, and context.canceled for ending the drag.
CImplement OnMouseDown() and OnMouseUp() methods, and calculate the drag distance in Update() method.
DUtilize OnLeftClick(InputAction.CallbackContext context) for detecting drag start, and track movement in OnMouseMovement(InputAction.CallbackContext context) until context.canceled is true.
Lời giải
Khi thực hiện chức năng kéo chuột trong một trò chơi Unity, bạn cần sử dụng sự kết hợp của các callback và điều kiện InputAction trong script C# của mình. Trước hết, bạn cần đăng ký callback cho OnMouseDown và OnMousePosition. Sau đó, bạn sẽ bắt đầu kéo chuột khi context.performed là true và theo dõi vị trí chuột cho đến khi nút được nhấn được thả ra. Điều này cho phép bạn dễ dàng quản lý chức năng kéo chuột trong trò chơi của mình.
Mở trang câu hỏi này →