Pv_log

Programming Simple Functionality: Quiz) Create with Code 2 본문

Unity Learn 번역/Pathway: Junior Programmer

Programming Simple Functionality: Quiz) Create with Code 2

Priv 2021. 7. 24. 18:17

출처

 

Quiz: Create with Code 2 - Unity Learn

This quiz will assess your understanding of the concepts covered in the Create with Code 2 Mission.

learn.unity.com


 

 

문제 1

아래의 코드에서 만약 Random.Range가 8을 반환한다면, 무슨 디버그 메시지가 출력되나요?

int randomInt = Random.Range(0,10);
if(randomInt <= 3)
{
   Debug.Log("Low");
}
else if(randomInt > 8)
{
   Debug.Log("High");
}
else
{
   Debug.Log("Medium");
}

 

  1. Low
  2. Medium
  3. High
  4. Null

 

- 정답

더보기

답: 2

값 8은 3보다 작거나 크지(<= 3) 않습니다. 또한 8은 8보다 크지(> 8) 않습니다. 그러므로 마지막 "else" 구문은 true를 반환할 것이고, "Medium"이 콘솔 창에 출력될 것입니다.

 


 

문제 2

아래의 조건들 중에서 "Success"를 출력하는 것은 몇 번인가요?

 

  1. 1번
  2. 1번과 2번
  3. 1번, 2번, 3번
  4. 모두

 

- 정답

더보기

답: 2

&& 조건이 true가 되기 위해서는 2개의 불리언 값이 모두 true여야 합니다. || 조건은 2개의 불리언 값 중에 하나만 true이면 true가 됩니다. NOT 연산자(!)는 불리언 값을 뒤집습니다.

 


 

문제 3

콘솔 창에 "First string" "Second string" "Third string"이 출력되게 만들려면 아래의 공백에 어떤 코드를 넣어야 하나요?

string[] strings = new string[3];
 
strings[0] = "First string";
strings[1] = "Second string";
strings[2] = "Third string";
 
foreach (__________)
{
    print (item);
}

 

  1. item in string[3]
  2. string item in strings
  3. string in items[]
  4. string in strings[3]

 

- 정답

더보기

답: 2

foreach 반복문을 사용하시려면, 타입(string)을 참조한 다음, 변수의 새로운 이름(item)을 선언해주고, 실제 리스트 또는 배열 변수의 이름("strings")을 참조해야 합니다.

 


 

문제 4

아래의 코드를 실행했을 때, 콘솔 창에 어떤 결과가 출력되나요?

void Start()
{
    StartCoroutine(MyCoroutine());
}

private IEnumerator MyCoroutine()
{
 yield return new WaitForSeconds(5);
    Debug.Log("Test");
   StartCoroutine(MyCoroutine());
}

 

  1. "Test"가 게임을 시작했을 때 처음 출력되며, 3초 뒤에 한 번 더 출력됩니다.
  2. "Test"가 게임을 시작했을 때 출력됩니다.
  3. 코드 상에 에러가 있으므로, "Test"는 출력되지 않습니다.
  4. "Test"가 5초 뒤에 처음 출력되며, 이후 5초 간격으로 반복적으로 출력됩니다.

 

- 정답

더보기

답: 4

코루틴(Coroutine)은 start 메서드에서 호출되고 있으며, 5초 동안 기다린 뒤, "Test"를 출력, 코루틴을 다시 호출하는 구성으로 이루어져 있습니다. 이 사이클은 "Test"를 처음 출력한 이후부터 매 5초마다 무한히 반복될 것입니다.

 


 

문제 5

"Incorrect dialogue value"라고 콘솔 창에 출력되도록 만들려면, 아래의 빈칸에 어떤 코드를 넣어야 하나요?

int dialogue = 3;

void Start()
{
   _______________
   {
      case 2:
         print("Goodbye, old friend");
         break;
      case 1:
         print("Hello there");
         break;
      default:
         print("Incorrect dialogue value");
         break;
   }
}

 

  1. if (3)
  2. switch (dialogue)
  3. switch (3)
  4. case (default)

 

- 정답

더보기

답: 2

switch 문은 "switch" 키워드로 시작하며, 변수 이름은 대소문자를 구분하여 괄호 안에(변수 이름) 작성합니다.

 


 

문제 6

플레이어 오브젝트가 코인 오브젝트와 충돌했을 때, 코인 오브젝트는 플레이어 오브젝트의 물리에 영향을 미치지 않고 즉시 사라져야 합니다. 이 두 오브젝트의 충돌을 감지해 코인을 파괴하려면 어떤 이벤트 함수를 사용해야 하나요?

  1. OnTriggerExit
  2. OnTriggerEnter
  3. OnCollisionExit
  4. OnCollisionEnter

 

- 정답

더보기

답: 2

코인이 트리거(trigger)로 되어 있어야 물리에 영향을 미치지 않으며, OnTriggerEnter 함수는 플레이어와 코인 사이에 발생한 최초의 충돌을 감지합니다.

 


 

문제 7

유니티 스크립팅 API에 따르면, 아래의 코드는 Component.GetComponent 메서드에 사용할 수 있는 옵션들입니다.

public Component GetComponent(Type type);
public Component GetComponent(string type);

어떤 코드가 Component.GetComponent 메서드를 올바르게 구현했나요?

 

  1. GetComponent(”Player”);
  2. GetComponent(Player);
  3. GetComponent(Type: Player);
  4. GetComponent(<Player>);

 

- 정답

더보기

답: 1

이 메서드를 구현하는 올바른 방법은 ("Player");처럼 단일 문자열 매개변수를 전달하는 것입니다. 만약 타입을 지정하고 싶으시다면, <Player>();처럼 꺾쇠괄호 <> 사이에 매개변수가 오고 그 뒤에 괄호가 와야 합니다.

 


 

문제 8

유니티 스크립팅 API에 따르면, 아래의 코드는 Transform.Translate 메서드에 사용할 수 있는 옵션들입니다.

public void Translate(Vector3 translation);
public void Translate(Vector3 translation, Transform relativeTo);
public void Translate(float x, float y, float z);
public void Translate(float x, float y, float z, Transform relativeTo);

에러를 발생시키는 코드는 무엇인가요?

 

  1. transform.Translate(Vector3.up);
  2. transform.Translate(Vector3.up, 90f);
  3. transform.Translate(0f, 0f, 90f, gameObject.transform);
  4. transform.Translate(0f, 0f, 90f);

 

- 정답

더보기

답: 2

매개변수 (Vector3, float)를 허용하는 메서드 오버로드는 존재하지 않으므로, (Vector3.up, 90f)는 에러를 야기합니다. 다른 매개변수 조합들은 모두 리스트 상에 존재합니다.

 


 

문제 9

아래와 같이 애니메이션 트랜지션(animation transition)을 제공했을 때, 캐릭터의 트랜지션을 "Idle"에서 "Walk" 상태로 바꾸는 코드는 무엇인가요?

 

  1. setInt(“Speed_f”, 1);
  2. setFloat(“Speed_f”, 0.1f);
  3. setTrigger(“Speed_f”);
  4. setFloat(“Speed_f”, 0.3f);

 

- 정답

더보기

답: 4

Inspector 창에서 해당 트랜지션(transition) 조건이 "Speed_f 값이 0.25보다 큼"임을 알 수 있습니다. 조건이 소수점을 사용하고 0.25보다 높아야 하므로, 우리는 float을 사용해야 함을 알 수 있습니다.

 


 

문제 10

유니티 스크립팅 API에 따르면, 아래의 코드는 Input.GetButtonDown 메서드에 사용할 수 있는 옵션입니다.

public static bool GetButtonDown(string buttonName);

 

유저가 "Fire 1" 버튼을 눌렀을 때 발사체가 발사되도록 만들고 싶다고 가정했을 때, 아래의 빈칸에 어떤 코드를 넣어야 하나요?

public GameObject projectile;
void Update()
{
  if (__________) 
    Instantiate(projectile, transform.position, transform.rotation);
}

 

  1. GetButtonDown.Input(“Fire1”)
  2. Input.GetButtonDown(true)
  3. Input(“Fire1”).GetButtonDown
  4. Input.GetButtonDown("Fire1")

 

- 정답

더보기

답: 4

Input 클래스 내에 있는 해당 메서드에 접근하기 위해서는 먼저 Input.___. 라고 작성해야 합니다. GetButtonDown 메서드는 "Fire1"처럼 하나의 문자열 매개변수를 가질 수 있습니다.

 


 

문제 11

아래의 스크립트는 씬 상에 있는 Player 게임 오브젝트에 부착되어 있습니다. 아래의 코드를 실행했을 때, 콘솔 창에 어떤 결괏값이 출력되나요?

public class PlayerManager : MonoBehaviour
{
 string playerName = "Frank";
 void Start()
  {
    Debug.Log("Hello: " + gameObject.name + playerName);
  }
}

 

  1. Hello: + PlayerManager Frank
  2. Hello: PlayerFrank
  3. Hello: Frank
  4. Hello: Player.name Frank

 

- 정답

더보기

답: 2

"gameObject.name" 코드는 스크립트가 활성화되었을 때 오브젝트의 이름을 반환할 것입니다. 이 경우에는 "Player"가 반환됩니다. gameObject.name과 playerName 사이에 공백이 없으므로, 출력되는 결괏값은 "PlayerFrank"가 됩니다.

 


 

문제 12

데이터 타입에 대한 설명으로 옳지 않은 것은 무엇인가요?

  1. 딕셔너리(dictionary)를 사용하면, 문자열을 사용해 요소들을 찾아볼 수 있지만, 배열이나 리스트에서는 정수로만 요소를 찾을 수 있습니다.
  2. 불리언(bools)은 항상 2가지의 값만 가질 수 있습니다: true 또는 false.
  3. 런타임 도중 배열의 크기를 늘리는 것이 리스트의 크기를 늘리는 것보다 더 쉽습니다.
  4. double 타입은 float 타입보다 더 정확합니다.

 

- 정답

더보기

답: 3

런타임 도중에 리스트의 사이즈를 늘리는 것이 배열의 사이즈를 늘리는 것보다 더 쉽습니다.

 


 

문제 13

아래의 변수들 중에 올바르게 초기화하지 않은 것은 무엇인가요?

 

  1. 1번 - 리스트
  2. 2번 - 배열
  3. 3번 - 딕셔너리
  4. 4번 - 불리언

 

- 정답

더보기

답: 2

새로운 배열을 초기화할 때는 대괄호 안에 배열의 사이즈 값을 넣어주어야 합니다. 즉, "= new GameObject[5]" 형태로 작성해주어야 합니다.

 


 

문제 14

변수의 접근 제어자에 대한 설명으로 옳지 않은 것은 무엇인가요?

  1. Constant (const) 변수는 초기화 이후에는 수정이 불가능합니다.
  2. Private 변수는 다른 클래스에서 접근할 수 없습니다.
  3. Protected 변수는 static 클래스에서만 접근할 수 있습니다.
  4. Public 변수는 아무 클래스에서나 접근할 수 있습니다.

 

- 정답

더보기

답: 3

Protected 변수는 해당 편수를 포함하고 있는 클래스 또는 해당 클래스에서 파생된 클래스 상에서만 접근이 가능합니다.

 


 

문제 15

아래 코드의 실행 결과는 무엇인가요?

public class ExampleClass : MonoBehaviour
{
 void Start()
  {       
   SceneManager.LoadScene(Random.Range(0, SceneManager.sceneCount));
  }
}

 

  1. 사용 가능한 모든 씬 중에서 무작위로 씬을 선정해 로드
  2. 현재 로드된 씬의 수를 무작위로 제공
  3. SceneManager 내에서 무작위로 씬을 정렬
  4. 현제 로드된 모든 씬 중에서 무작위로 하나의 씬을 선정해 로드

 

- 정답

더보기

답: 4

Random.Range는 0부터 로드된 씬의 전체 개수 사이에서 난수를 생성합니다. LoadScene 메서드는 씬을 로드하는데 난수를 사용합니다.

 


 

문제 16

숫자를 매개변수로 받아 가장 근접한 정수로 반올림한 복사 값을 반환하는 메서드를 구성하려고 할 때, 아래의 빈칸에 순서대로 어떤 값을 넣어야 하나요?

_____ DuplicateNumber(float _____)
{
  number *= 2;
 int newNumber = Mathf.RoundToInt(number);
  _____ newNumber;
}

 

  1. void
    int
    return
  2. float
    return
    number
  3. int
    int
    static
  4. int
    return
    number

 

- 정답

더보기

답: 4

첫 번째 공백은 "int" 값을 반환해야 하므로 "int"입니다. 두 번째 공백에는 메서드 상에서 사용되는 float 변수의 이름이 "number"이므로, "number"가 와야 합니다. 세 번째 공백에는 int 변수를 반환해야 하므로 "return"이 와야 합니다.

 


 

문제 17

입력된 2개의 float 값 중에서 더 큰 값을 반환하는 메서드를 선언하고자 할 때, 어떤 코드가 적합한가요?

_____________________
{
 float result;
 if (num1 > num2)
    result = num1;
 else
    result = num2;
 return result;
}

 

  1. void FindMax(float, return)
  2. float FindMax(float num1, float num2)
  3. float FindMax(num1, num2)
  4. void FindMax(float num1, float num2)

 

- 정답

더보기

답: 2

이 메서드는 float 값을 반환합니다. 그러므로 첫 번째 단어(반환 타입)는 "float"이 되어야 합니다. 메서드는 2개의 float 타입 매개변수, "num1"과 "num2"를 사용하므로, 괄호 안에는 "float num1, float num2"가 와야 합니다.

 


 

문제 18

다음과 같이 작동하는 로딩 씬 시퀀스를 제작하고자 합니다.

레벨 선택 화면에는 각각 다른 레벨에 해당하는 버튼들이 있습니다. 유저가 레벨을 클릭하면, 선택한 레벨 번호를 나타내는 새로운 로딩 스크린이 뜨고, 5초 뒤에 해당 레벨의 씬을 로드하려고 합니다. 이것을 높은 수준에서 어떻게 구현하실 건가요?

  1. 사용자가 버튼을 클릭하면, 레벨 숫자를 private 리스트에 추가하고, 로딩 씬을 로드합니다. 로딩 씬에서는 DontDestroyOnLoad 메서드를 사용해 레벨 로딩 딜레이를 구현합니다.
  2. 사용자가 버튼을 클릭하면, 레벨 숫자를 public int형 변수에 저장한 뒤, 로딩 씬을 로드합니다. 로딩 씬에서는 Coroutine을 사용하여 int형 변수로 레벨 로딩을 지연시킵니다.
  3. 사용자가 버튼을 클릭하면, 레벨 번호를 private float형 변수에 저장한 뒤, 로딩 씬을 로드합니다. 로딩 씬에서, InvokeRepeating 메서드를 사용하여 int형 변수로 레벨 로딩을 지연시킵니다.

 

- 정답

더보기

답: 2

레벨 숫자의 경우, 로딩 씬에 접근해야 하므로, 소수가 필요하지 않고 public int형 변수에 저장하는 것이 좋습니다. Coroutine을 사용하면 코드 실행을 몇 초 간 지연시킬 수 있으므로, Coroutine을 사용하여 선택된 레벨의 로딩을 지연시키는 것이 좋습니다.

 


 

문제 19

다음 중, 변수 및 메서드의 사용법 중 올바르지 않은 것은 무엇인가요?

  1. 변수 이름은 길어야 하고 짧은 것보다는 완전한 단어를 포함해야 합니다. (예: "int secondsElapsed"가 "int secElpsd"보다 낫습니다).
  2. 메서드 이름에는 일반적으로 동사 또는 동작이 포함되어야 합니다. (예: "void GenerateRandomObject"가 "RandomObject"보다 낫습니다).
  3. 메서드는 일반적으로 두세 가지의 작업을 수행해야 합니다. - 만약 메서드가 각각 1개의 작업만 수행할 경우, 메서드를 결합하는 것이 좋습니다.
  4. 불리언 변수의 이름을 지을 때는 일반적으로 "is", "has", "can"과 같은 단어를 포함하여 불리언 변수임을 나타냅니다. (예: “isRaining”, “hasStarted”, “canMove”)

 

- 정답

더보기

답:

(본문)

 


 

문제 20

OX문제:

아래의 코드 일부분은 일반적인 객체 지향 프레임워크가 아닌, 유니티의 Entity Component System(ECS)을 사용하고 있습니다.

using System;
using Unity.Entities;

namespace Shooter.ECS
{
    [Serializable]
    public struct MoveSpeed : IComponentData
    {
        public float Value;
    }

    public class MoveSpeedComponent : ComponentDataWrapper<MoveSpeed> { }
}

 

  1. True
  2. False

 

- 정답

더보기

답: 1

해당 코드는 Unity.Entities 네임스페이스(namespace)를 사용하고, IComponentData를 구현하며, 객체가 아닌, MoveSpeed처럼 데이터를 중심으로 구조화되어 있으므로, 이는 ECS를 사용한 클래스임을 알 수 있습니다.

 


 


수고하셨습니다!


Comments