KoreanFoodie's Study

6. 머티리얼, GetAxis, Input.GetKey( ) : 유니티 튜토리얼 본문

Game Dev/Unity : Tutorial

6. 머티리얼, GetAxis, Input.GetKey( ) : 유니티 튜토리얼

GoldGiver 2021. 9. 3. 22:46

머티리얼

게임 오브젝트의 컬러는 머티리얼(Material)이 결정한다. 머티리얼은 셰이더와 텍스쳐가 합쳐진 에셋으로, 오브젝트의 픽셀 컬러를 결정한다

셰이더는 주어진 입력에 따라 픽셀의 최종 컬러를 결정하는 코드이다. 셰이더는 질감과 빛에 의한 반사와 굴절 등의 효과를 만든다. 텍스처는 표면에 입히는 이미지 파일이다.

셰이더는 물감으로, 텍스처는 스케치나 밑그림으로 이해하면 된다. 밑그림이 같아도 물감의 종류에 따라 화풍이 달라진다!

이 중 알베도(Albedo)는 반사율이라는 뜻으로, 물체가 어떤 색을 반사할지를 결정한다!

 

C# 스크립트

이제 기초적인 코드들을 살펴보자.

    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.UpArrow) == true)
        {
            playerRigidbody.AddForce(0f, 0f, speed);
        }

        if (Input.GetKey(KeyCode.DownArrow) == true)
        {
            playerRigidbody.AddForce(0f, 0f, -speed);
        }
        
        if (Input.GetKey(KeyCode.RightArrow) == true)
        {
            playerRigidbody.AddForce(speed, 0f, 0f);
        }
        
        if (Input.GetKey(KeyCode.LeftArrow) == true)
        {
            playerRigidbody.AddForce(-speed, 0f, speed);
        }
        
    }

위의 코드는 기초적인 동작을 제어하는 코드로, 각각 화살표에 해당하는 키를 누르고 있는 동안 어떤 방향으로 이동할지를 의미한다.

Input.GetKeyDown() // 해당 키를 누르는 순간 true를 return
Input.GetKeyUp() // 해당 키를 눌렀다가 떼는 순간 true를 return

추가적으로, 위의 function도 알아주자. Update()같은 경우, 1/60초마다 한 번씩 실행되며, 안에 있는 조건문을 훑게 된다.

 

gameObject

gameObject는 컴포넌트 입장에서 자신이 추가된 게임 오브젝트를 가리킨다. 이는 GameObject 타입의 변수이며, 모든 컴포넌트는 gameObject 변수를 이용해 자신의 게임 오브젝트에 접근할 수 있다.

    public void Die() 
    {
        gameObject.SetActive(false); // SetActive()는 GameObject 타입에 내장된 메서드

    }

예를 들어, 자신의 죽음은 위와 같이 표현된다.

 

게임오브젝트 할당하기

이전에 우리는 Rigidbody를 드래그/드랍하는 방식으로 할당했지만, 코드상에서 참조가 가능하다!

    private Rigidbody playerRigidbody;
    public float speed = 8f;

    void Start()
    {
        playerRigidbody = GetComponent<Rigidbody>();
    }

GetComponent를 사용하여 Rigidbody를 직접 연결하고, 변수를 private으로 바꿔 인스펙터 창에서 직접 컴포넌트를 건드리지 못하게 만들었다.

 

GetAxis( )

AddForce 메서드를 적용한 물체는, 힘이 점진적으로 주어지기 때문에 급격한 방향전환이 불가능하다. 대신 GetAxis( ) 메서드를 이용하면, 속도 자체를 바꾸어 방향 전환이 가능하다!

    void FixedUpdate()
    {
        // 수평축과 수직축의 입력값을 감지하여 저장
        float xInput = Input.GetAxis("Horizontal");
        float zInput = Input.GetAxis("Vertical");

        // 실제 이동 속도를 입력값과 이동 속력을 사용해 결정
        float xSpeed = xInput * speed;
        float zSpeed = zInput * speed;

        // Vector3 속도를 (xSpeed, 0, zSpeed)로 생성
        Vector3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);

        // 리지드 바디의 속도에 newVelocity 할당
        playerRigidbody.velocity = newVelocity;

   }

또한 입력키 커스터마이제이션과 조이스틱 같은 다양한 입력 장치에 대응하기 위해, GetAxis( ) 를 사용해야 한다!

자세한 설정은 Input Manager에서 가능하다

 

Summary

  • 카메라 컴포넌트의 Clear Flags를 변경하여 게임 배경을 변경할 수 있다
  • Clear Flags에서 Skybox는 가상의 하늘을 그린다. Solid Color는 단색으로 배경을 채운다
  • Update( ) 메서드는 매 프레임마다 (게임 화면이 갱신될 때마다) 실행된다
  • 리지드바디 컴포넌트의 Constraints 필드에서 특정 축의 위치나 회전이 변경되지 않도록 고정할 수 있다
  • 리지드바디 컴포넌트는 현재 속도를 표현하는 변수 velocity를 제공한다
  • Input.GetKey( ) 메서드는 키보드 특정 키의 입력을 감지한다
  • Input.GetAxis( ) 메서드는 입력축에 대응하는 버튼의 입력을 감지하며, 입력을 -1.0에서 1.0 사이의 숫자로 반환한다
  • 입력축 (Axis)를 통해 코드 수정 없이 사용 버튼을 변경하고 멀티 플랫폼에 대응할 수 있다!
Comments