SpriteRenderer in ScriptUnity의 Script를 이용해서 Object의 Sprite Renderer의 값을 바꿀 수 있는데 다음과 같이 진행하면 구현할 수 있다.
해당 Object에 그 Object를 컨트롤할 Script를 적용시킨다.
그리고 Script에서 다음과 같이 진행한다.
SpriteRenderer renderer;
//이 선언은 Start문이나 Awake문에 해주면 된다.
renderer = GetComponent<SpriteRenderer>();
Application.targetFrameRateApplication.targetFrameRate는 기기마다 다른 연산속도로 인해 게임진행속도가 다르게 흘러가는 걸 방지하기 위한 장치다.Application.targetFrameRate를 이용하면 모든 기기에서 같은 속도의 게임을 만들 수 있다.//1초에 최대 60프레임만 계산한다
Application.targetFrameRate = 60;
싱글톤이란 무엇인가? 싱글톤 패턴(Singleton Pattern)은 객체의 인스턴스를 하나만 생성하는 패턴이다. 프로그램 내에서 하나로 공유해야 하는 객체가 존재할 때 사용한다.
다음과 같은 상황에서 사용한다.
Unity프로젝트에서는 보통 GameManger 하나를 여러부분에서 공유하여 사용하기 때문에 다음과 같이 작성하여 Singleton으로 사용한다.
public static GameManager Instance;
//Awake나 Start문에 작성한다.
Instance = this;
Time.deltaTime 에 대해 알아보자
Time.deltaTime에 대해 알기 위해deltaTime에 대해 알아보자.
💡
deltaTime이란 무엇일까?
deltaTime이란frame과frame사이의 시간을 말한다. 그럼deltaTime을 왜 사용하는가? 그럼FPS에 대해 먼저 알아야 한다.
흔히FPS는 1초에 찍히는frame수를 이야기 하는데, 이 때frame은 순간의 한 장면을 말한다. 그런데 개인의 컴퓨터나 휴대폰의 성능은 천차만별이고 이 성능에 따라 이FPS가 달라지게 되는데, 따로 설정을 하지 않으면FPS에 따라 게임의 움직임에 차이가 생길 수 있다.
❓ 그런데, 왜
FPS가 다르다고 성능에 차이가 생기나요?이것은
Script를 생성했을 때 생성된Update문의 주석을 보면 알 수 있다.// Update is called once per frame void Update() {...Update is called once per frame = 프레임당 한 번
Update가 호출된다.즉, 플레이하는 각 기기의 성능별로 1초에 호출하는
Update수가 다르다는 의미가 된다...!
만약 내가Update당Object를 오른쪽으로 1씩 움직이는 게임을 만들었다고 해보자.FPS가 120인 컴퓨터에선Update가 120번 호출되어 120움직이고FPS가 60인 컴퓨터에선Update가 60번 호출되어 60만큼 움직일 것이다. 이 것을 해결해 주는 것이 바로deltaTime이다.
다시한번 deltaTime이 무엇인지 말하면 frame과 frame사이의 시간이다.
1초를 deltaTime으로 나누면 어떻게 될까? deltaTime은 frame에서 frame으로 넘어가는 시간이니 1초에 생기는 frame 수인 FPS가 나오게 된다.
1s = deltaTime x FPS
1초를 deltaTime으로 쪼개면 FPS가 나온다는 결과는 무엇을 보여주는가?
1초에 생기는 변화 값을 deltaTime과 FPS를 통해 통제가 가능하다는 것을 보여준다. Update함수에서 내가 1초에 k만큼 변화를 주고 싶은 변수가 있을 때, k에 deltaTime을 곱하게 되면 결국엔 1초마다 나오는 변화는 k가 되면서 FPS의 변화에 상관없이 일정해지게 된다.
//in Update()
1초에 변화가 생기는 값 = k(내가 주고자 하는 변화 값) x deltaTime x FPS
뭔가 계속 어렵게 설명을 했는데, 결국엔 Time.deltaTime은 frame과 frame간의 순간적인 시간을 알아서 계산해주기 때문에, 내가 캐릭터의 움직임이든 시간이든 모든 변화를 만들 때 Time.deltaTime을 곱해주면 1초에 생기는 변화는 FPS에 상관없이 같아지게 되는 것이다.
상당히 못 그렸지만 1초에 10fps 일 때, goRight 변수를 1초마다 k씩 증가시킬 때의 과정을 보여주는 그림이다.

신경쓰지 않아도 되는 TMI...
deltaTime값은 사실 1/fps로 정확하게 나오진 않는다. 하지만 결국frame과deltaTime을 곱한 값을 더해가면 똑같아지기 때문에 신경쓰진 말자.
Time.deltaTime 이용 예시
Update에 넣어주면 시간의 흐름을 구할 수 있다.totalTime += Time.deltaTime;