본문 바로가기
관/핫한 닷지 프로젝트 게임개발

닷지 프로젝트 오브젝트 기초 06(스크립트 개선하기).

by 4차원 박스 2020. 7. 20.

1차로 만든 플레이어 컨트롤러 스크립트를 개선해본다.

개선할점
1. 움직임이 미끄러진다

AddForce()메서드는 힘을 추가하며 누적된 힘으로 속도를 점진적으로 늘려가므로
속도가 빨라질 때까지 시간이 걸린다. 또한 관성력도 존재하여 방향전환이 어렵다.

2. 입력받는 코드가 복잡한점
간결하게 고쳐본다.

3. 퍼블릭으로 컴포넌트를 만들어서 드래그드롭과정이 필요하다
불편할 뿐더러 잘못된 값을 할당할 위험이 있으므로 변수에 컴포넌트의 참조를 할당한다.
Start()메서드를 이용하여 게임이 시작될때 
playerRigidbody에 리지드바디 컴포넌트의 참조를 할당해본다.

 

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

 

또한 이제 playerRigidbody 를 퍼블릭으로 선언할 필요가 없으니
private로 해준다. private를 붙이거나 어차피 따로 선언하지 않으면
자동으로 private 가 되니 그냥 지워준다.

 

GetComponent() 메서드

원하는 타입의 컴포넌트를 자신의 게임 오브젝트에서 찾아오는 메서드임
<>부분에 가져올 타입을 받는다.
만약 게임오브젝트에 찾으려는 타입의 컴포넌트가 없으면 GetComponent() 메서드는 널값을 반환한다.

<>는 제네릭 기법이라한다.
제네릭 = 메서드나 클래스가 여러타입에 호환되게 한다.
<>안에 원하는 타입을 명시하면 클래스나 메서드가 해당 타입에 맞춰 동작한다.
제네릭을 사용하지 않으면 같은 처리를 위한 여러 타입의 메서드나 클래스를 일일이 만들어야
하는 극한의 비효율을 자랑하게 된다. 따라서 제네릭을 사용한다
제네릭 덕분에 하나의 GetComponent() 메서드로 모든 타입의 컴포넌트에 대응할 수 있다.

 

다음은 조작감 과 업데이트 문을 간결하게 개선한다.

우선 입력받는 함수를 바꾸고, 이동속력을 받아서 표현 하는 코드를 
다음과 같이 만든다.

    void Update()
    {
        float xinput = Input.GetAxis("Horizontal");
        float zinput = Input.GetAxis("Vertical");

        float xspeed = xinput * speed;
        float zspeed = zinput * speed;

        Vector3 NewVelocity = new Vector3(xspeed, 0f, zspeed);
        playerRigidbody.velocity = NewVelocity;
    }

 

이렇게 고쳐준다.

 

이 코드의 기능은 다음 포스팅에서 알아본다.

댓글