• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

발사체 스피드

22.02.27 14:07 작성 조회수 165

0

안녕하세요 강의 잘보고 있습니다^^

궁긍한게 있는데요..

 

7-4장 키입력에 따라 발사에서

ShotScript에서

 

public class ShotScript : MonoBehaviour

{    

    public float speed = 5.0f;

     void Update()    {

        print(speed);

        transform.Translate(Vector3.right *  Time.deltaTime * speed);

    }

}

 

질문.1

public float speed = 5.0f; // 스피드를 1이든.. 100이든 적용이 안됩니다.

무엇이 문제일까요?

변수명을 바꾸면 작동됩니다(작동되었다 안되었다함)

프린트로 speed를 찍어보면 다른값이 출력됩니다

왜 코드상의 5가 아닌 다른 값이 출력될까요? = 왜 스피드가 코드와 다르게 적용될까요?

----------------------------------------------------------------------------------------

=> 문제점은 찾았습니다

코드상에 speed 숫자를 바꾸고 나서 유니티 에이터 speed를 리셋하지 않으면 적용되지 않터군요..

그러면 스피드를 수정하려면 코드가 우선인가요 유니티에디터에 값이 우선순위인가요

항상 두번씩 코드와 에디터를 수정해야하나요?

프리펩 같은 경우 유니티에디터에서 값수정하러 가는 경로가 너무 복잡해서요..

너무 불편한데.. 다른 방법이 있는듯 해서 질문드립니다

 

 

꾸뻑^^

미리 감사인사 드립니다..

답변 고맙습니다..

답변 1

답변을 작성해보세요.

0

답변이 늦었네요 죄송합니다. 

보니까 답변을 찾으신거 같은데요. 

우선이  코드가 먼저인지 에디터가 먼저인지가 작업의 순서에 따라서 다릅니다. 

 

public float speed = 5.0f;

우선 위의 코드가 있다고 생각해보겠습니다.

아무 문제가 없으면 컴파일이 됩니다. 이때 코드가 먼저입니다. 

(코드에디터에서 처음 코드를 생성하고  유니티로 돌아오는 순간

c#코드에 있던 5.0의 값을 가지고 에디터가 값을 관리합니다. )

-> 이때 에디터에 5.0의 값이 박힌다는 뜻입니다. 

 

이후에 코드에서 값을 수정해봐도 소용이 없죠. 에디터가 우선순위가 되는 것입니다. 

그 다음부터는 에디터에서 값을 바꿔줘야 합니다. (에디터가 우선)

 

 

그래서 이 값을 중간에 바꿔주기 위해서는 게임이 실행 중에 값을 바꿔줘야 합니다. 

아니면 다른 방법으로는 초기화를 실행하는 다른 기능 (함수) 같은걸로 처리를 해줘야 합니다. (나중에 소개)

위의 첫번째 예 게임실행중에 값을 바꾸는 예제로 다음과 같이 할수 있을 것 같습니다

값을 이렇게 실행해 주는 것은 거의 하지 않는 작업이긴 하지만 테스트를 위해서 아래같이 작업할 수 있습니다.

void Update(){

     speed = 1;

     print(speed);

}

위의 코드가 실행되면 speed 가 1 이 되겠죠. 실행중에 에디터에서 확인을 해보면 1이고요. 실행이 끝나면 5로 돌아갈겁니다.  벌써 초기값으로 코드가 생성된 시기에 관리되니까요. 

값을 바꾸려면 에디터에서 바꾸어야 한다는 겁니다. 

 

 

결론적으로는 이렇습니다.

1. 코드가 처음 컴파일될때의 초기값이 유니티 에디터로 들어갑니다. 

    (이때 코드가 우선)

2. 이후 실행시는 유니티에디터에 값이 있으므로 에디터가 우선입니다.

    (에디터에서 값을 바꾸면 코드와는 관계가 없게 됩니다)

 

다른 해결 방법

public 으로 쓰고 에디터에서 사용하지 않기 위해서는 이 내용도 나중에 설명이 나오긴 하는데요. 

아래처럼 어노테이션을 쓰셔도 됩니다.  (많이들 사용하는 방법입니다)

[HideInInspector]

public int speed = 5;

이렇게 하면 public 이지만 유니티에서는 나오지 않거든요.

 

답변이 되시길 바랍니다