inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

레트로의 유니티 C# 게임 프로그래밍 에센스

PlayerMovement (2/4)

if (CharacterController.isGrounded) currentVelocityY = 0f;

532

성연철

작성한 질문수 1

0

static이 아닌 필드, 메서드 또는 속성 CharacterController.isGrounded

에 개체참조가 필요합니다. 라고 오류가 납니다 ㅠㅠ

C# unity

답변 6

1

손동욱

if (CharacterController.isGrounded) currentVelocityY = 0f;

가 아니라

if (characterController.isGrounded) currentVelocityY = 0f;

입니다. 대문자로 작성하셔서 그렇습니다. 

PlayerMovement.cs 에서 제일 위에 보면 멤버변수들을 선언하고 있어요.

private CharacterController characterController;

private PlayerInput playerInput;

private Animator animator;

이런 식으로요.

이제민 강사님께서 변수들의 자료형과 변수명들을 동일하게 쓰되 대문자 소문자만 바꿔 쓰셔서

헷갈리신 것 같습니다.

저같은 경우는 멤버변수를 선언할 경우는 다른 지역변수나 위와 같은 헷갈림을 방지하기 위해서 변수 선언시

앞에 m_ 를 사용하고(스몰엠 언더바 로 읽습니다) 뒤에 변수명이 길어질 경우는 조금 줄이는 편입니다.

(사실 멤버변수를 선언하는 방식 중 m_ 는 고전방식이고 요즘은 _언더바만 사용하도록 변해가는 추세라고 합니다)

이런 식으로 지을 수 있겠네요.

private CharacterController m_CharCtrl;

private PlayerInput m_PlayerInput;

private Animator m_Anim;

이런 식으로 지었을 경우, 위의 if문의 내용은

if (m_CharCtrl.isGrounded)

{

    currentVelocityY = 0.0f;

}

라고 쓸 수 있겠습니다.

일반적으로 모든 변수는 대문자가 아니라 소문자로 시작하는 것이 국룰인데

이에 대해서는 파스칼 표기법, 카멜 표기법 등으로 검색하시면 잘 알 수 있습니다.

1

손동욱

정확히 어떤 코드인지는 알 수가 없으나

함수를 static 으로 선언하시면 항상 메모리에 로드되어 있기 때문에 오류가 안뜰겁니다.

static 으로 선언하지 않거나 해선 안되는 경우엔, 그냥 new 로 개체를 생성해주세요.

0

손동욱

C# 프로그래밍 기본 마지막 강의인 오브젝트와 클래스? 를 다시 들어보세요.

마지막에 rb 변수를 선언하는데 그 rb가 멤버변수 입니다.

즉 public Rigidbody m_Rb; 라고 선언했겠네요.

멤버변수를 선언하는 이유는 제민님이 잘 알려주십니다. 말 그대로 컴포넌트들을 게임오브젝트에 갖다 붙이고

갖다 붙인 애들을 갖고 놀려고 멤버변수로 선언한 것들에 적용시켜서 코딩을 하고 갖고 놀겠다는 뉘앙스로 생각하시면 됩니다.

허나, 위의 PlayerMovement 스크립트의 경우 유니티 인스펙터 창에서 그런것들이 안보일겁니다.

(그런 것들이란, 멤버변수로 선언한 Animation, PlayerInput, characterController 등)

왜냐하면 public이 아니라 private 으로 선언했기 때문입니다.

+추가)

더 앞에 있는 선수 강의인

게임 엔진의 원리 : 게임 오브젝트와 컴포넌트로 다시 들어보세요.

여기서도 후반부에 똑같은걸 설명하시네요.

0

성연철

아 너무 감사합니다 ㅠㅠ 

대문자 소문자 하나에도 이렇게 바뀌는거 보면 너무 어렵긴 하네요ㅠㅠ..

개인시간 까지 할애해서 도와주셔서 너무 감사합니다 ㅠㅠ

0

성연철

어떤 개체를 선언해야 할까요? 영상에서 나온 그대로 따라가고 있는데 오류가 떠서 너무 난감하네요 ㅠㅠ 

    public void Move(Vector2 moveInput)

    {

        var targetSpeed = speed * moveInput.magnitude;

        var moveDierction = Vector3.Normalize(transform.forward * moveInput.y + transform.right * moveInput.x);

        var smoothTime = characterController.isGrounded ? speedSmoothTime : speedSmoothTime / airControlPercent;

        targetSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, smoothTime);

        currentVelocityY += Time.deltaTime * Physics.gravity.y;

        var velocity = moveDierction * targetSpeed + Vector3.up * currentVelocityY;

        characterController.Move(velocity * Time.deltaTime);

        if (CharacterController.isGrounded) currentVelocityY = 0f;

여기서 맨 아랫줄이 오류가 나고있습니다..

0

성연철

CharacterController.isGrounded

이 부분이 오류가 납니다.

코루틴 관련 질문 있습니다.

0

66

1

강의 업데이트 질문

0

89

1

궁금한 부분이 있어서 질문 남깁니다.

0

161

1

FreeLook 카메라 Zone 설정관련

0

115

1

와..정말 감탄이 나오네요..

0

145

1

추상 클래스에 대해 이해가 잘 안되었는데

0

117

1

IsTargetOnSight가 자꾸 false로 나와요.

0

105

2

레이캐스트 에셋 임포트하는방법을 모르겠어요.

0

86

1

레이케스트 에셋을 다운받았는데 임포트 방법을 모르겠습니다.

1

141

2

혹시 어드레서블 강좌 추가계획이 있으실까요?

0

126

1

시네머신 FreeLook 관련

0

223

1

텍스트 드래그 앤 드롭

0

378

2

안녕하세요 랜덤오브젝트 생성기에서 질문있습니다.

0

244

1

유니티 에디터 버전

0

374

1

text가 아닌 TextMeshPro를 사용해도 괜찮나요?

0

1731

2

상속 관련 질문입니다.

0

350

1

TPS 캐릭터 문제점 있습니다.

0

437

1

총을 쏴서 적을 맞췄을 때 저를 추적하는 코드는 어디 나와있나요??

0

278

0

github

0

305

0

wave 를 0으로 초기화해주는 부분이없는데 왜 0부터 시작하나요?

0

315

0

TPS게임 제작 Aim애니메이션 관련 질문 드립니다.

1

367

1

점프관련해서 UI버튼클릭을 통한 전달값에 대한 질문입니다.

0

305

1

인터페이스

1

238

0

혹시 본 강의에서 Dictionary 나온 파트가 있을까요?

0

266

0