<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩을 복습해보자</title>
    <link>https://tipsyho.tistory.com/</link>
    <description>코딩 관련 내용들을 모두 적어보기</description>
    <language>ko</language>
    <pubDate>Wed, 15 Jul 2026 11:40:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>문과의코딩</managingEditor>
    <item>
      <title>GameManager의 관리</title>
      <link>https://tipsyho.tistory.com/entry/GameManager%EC%9D%98-%EA%B4%80%EB%A6%AC</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;르탄 만들기에서 배운 내용은 기본적으로 설정을 적용하고 이를 각 스크립트에 적용하게 하기 위한 방법을 배웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백그라운드와 그라운드는 기본적으로 고정형으로 스크립트를 짤 필요가 없었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;enemy 역할인 rain의 경우 prefabs를 만들어 관리 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 player 역할인 르탄과 다시 게임을 초기화 시켜주기 위한 패널을 제외하고 모든 게임 설정을 GameManager에서 싱글톤 작성하고 관리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 르탄과 rain의 경우 rigidbody 2D를 이용하여 물리력을 적용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;player인 르탄의 함수는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&amp;nbsp;direction&amp;nbsp;=&amp;nbsp;1f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float toward = 1.0f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;float&amp;nbsp;moveSpeed&amp;nbsp;=&amp;nbsp;1f;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방향과 속도를 변수로 설정해 주고 업데이트 함수를 통하여 버튼을 누르면 방향을 바꾸도록 설정하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;void&amp;nbsp;Update() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(&amp;nbsp;Input.GetMouseButtonDown(0)) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toward&amp;nbsp;*=&amp;nbsp;-1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;direction&amp;nbsp;*=&amp;nbsp;-1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(transform.position.x&amp;nbsp;&amp;gt;&amp;nbsp;2.8f) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;direction&amp;nbsp;=&amp;nbsp;-1f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toward&amp;nbsp;=&amp;nbsp;-1.0f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(transform.position.x&amp;nbsp;&amp;lt;&amp;nbsp;-2.8f) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;direction&amp;nbsp;+=&amp;nbsp;1f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toward&amp;nbsp;=&amp;nbsp;1.0f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform.localScale&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Vector3(toward,&amp;nbsp;1,&amp;nbsp;1); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform.position&amp;nbsp;+=&amp;nbsp;new&amp;nbsp;Vector3(direction,&amp;nbsp;0,&amp;nbsp;0)&amp;nbsp;*&amp;nbsp;moveSpeed&amp;nbsp;*&amp;nbsp;Time.deltaTime; &lt;br /&gt;&lt;br /&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포지션을 변경하여 위치를 변경시키게 하였고 로컬 스케일을 통해 방향을 변하게 만들고 크기를 고정시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임 매니저에서 모든걸 관리하는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public&amp;nbsp;static&amp;nbsp;GameManager&amp;nbsp;I; &lt;br /&gt;public&amp;nbsp;Text&amp;nbsp;scoreText; &lt;br /&gt;int&amp;nbsp;totalScore; &lt;br /&gt;public&amp;nbsp;float&amp;nbsp;limit&amp;nbsp;=&amp;nbsp;60f; &lt;br /&gt;public&amp;nbsp;Text&amp;nbsp;timeText; &lt;br /&gt;&lt;br /&gt;void&amp;nbsp;Awake() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I&amp;nbsp;=&amp;nbsp;this; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;public&amp;nbsp;GameObject&amp;nbsp;Rain; &lt;br /&gt;&lt;br /&gt;public&amp;nbsp;GameObject&amp;nbsp;Panel; &lt;br /&gt;&lt;br /&gt;public&amp;nbsp;float&amp;nbsp;CreateRain&amp;nbsp;=&amp;nbsp;0.5f; &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;Start&amp;nbsp;is&amp;nbsp;called&amp;nbsp;before&amp;nbsp;the&amp;nbsp;first&amp;nbsp;frame&amp;nbsp;update &lt;br /&gt;void&amp;nbsp;Start() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InvokeRepeating(&quot;makeRain&quot;,&amp;nbsp;0,&amp;nbsp;CreateRain); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initGame(); &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;void&amp;nbsp;makeRain() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Instantiate(Rain); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public&amp;nbsp;void&amp;nbsp;addScore(int&amp;nbsp;score) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;totalScore&amp;nbsp;+=&amp;nbsp;score; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scoreText.text&amp;nbsp;=&amp;nbsp;totalScore.ToString(); &lt;br /&gt;} &lt;br /&gt;//&amp;nbsp;Update&amp;nbsp;is&amp;nbsp;called&amp;nbsp;once&amp;nbsp;per&amp;nbsp;frame &lt;br /&gt;void&amp;nbsp;Update() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;limit&amp;nbsp;-=&amp;nbsp;Time.deltaTime; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(limit&amp;nbsp;&amp;lt;&amp;nbsp;0)&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Time.timeScale&amp;nbsp;=&amp;nbsp;0.0f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Panel.SetActive(true); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;limit&amp;nbsp;=&amp;nbsp;0f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeText.text&amp;nbsp;=&amp;nbsp;limit.ToString(&quot;N2&quot;); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;public&amp;nbsp;void&amp;nbsp;retry()&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SceneManager.LoadScene(&quot;MainScene&quot;); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;void&amp;nbsp;initGame() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Time.timeScale&amp;nbsp;=&amp;nbsp;1.0f; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;totalScore&amp;nbsp;=&amp;nbsp;0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;limit&amp;nbsp;=&amp;nbsp;30.0f; &lt;br /&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;싱글톤을 이용하여 유일한 게임매니저로 작성하였고 택스트와 시간을 관리하였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임오브젝트를 직접 불러오는것도 게임매니저를 통해 완성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Awake 함수로 싱글톤 게임 매니저를 초기화 시키고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Start 함수에서 invokeRepeating 함수를 통해 적의 탄생을 관리하고 재시작시 초기화도 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적 함수를 가져오고 그걸 함수로 만들어 invokeRepeating을 이용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>유니티 코딩</category>
      <author>문과의코딩</author>
      <guid isPermaLink="true">https://tipsyho.tistory.com/4</guid>
      <comments>https://tipsyho.tistory.com/entry/GameManager%EC%9D%98-%EA%B4%80%EB%A6%AC#entry4comment</comments>
      <pubDate>Fri, 20 Oct 2023 16:57:46 +0900</pubDate>
    </item>
    <item>
      <title>유니티 기본 시작 함수와 그 업데이트 순서 공부</title>
      <link>https://tipsyho.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B8%B0%EB%B3%B8-%EC%8B%9C%EC%9E%91-%ED%95%A8%EC%88%98%EC%99%80-%EA%B7%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%88%9C%EC%84%9C-%EA%B3%B5%EB%B6%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;유니티는 크게 함수의 시작을 크게 2가지로 나눈다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 시작함수(즉 초기화의 함수이다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Awake 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수는 start 함수 전에 호출되고 인스턴스화 된 직후 바로 호출된다. 게임 오브젝트가 시작하는 동안 비활성화 상태에서는 호출 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;start 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 프레임 업데이트 전에 호출되는 것으로 씬 에셋에 포함된 모든 오브젝트에 대해 Update 등 이전에 호출된 모든 스크립트를 위한 start 함수가 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 업데이트 함수 즉 프레임 연산에 관련된 함수들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FixedUpdate 함수(물리연산)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update 함수 전에 호출되는데 모든 물리 계산 및 업데이트는 FixedUpdate 후 즉시 발생합니다. 움직임 계산을 적용시 Time.deltaTime 만큼 곱할 필요가 없다. 물리 연산 함수이다. 고정된 프레임으로 고정된 실행 주기로 CPU를 많이 사용한다. 따라서 물리 영역에 관련된 함수를 넣는 경우가 많다. 50프레임 정도 기준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Update 함수 (게임로직)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임당 한 번 호출되는 함수로 주요 기본 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LateUpdate 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update가 끝난후 프레임당 한번 호출된다. Update에서의 모든 계산은 LateUpdate가 시작될때 완료된다. 보통 3인칭 카메라나 로직의 후처리에 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 종료나 활성화 관련 함수가 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OnDestory 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오브젝트가 사라질때 작동하는 함수 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화 함수는 초기화 함수 Awake와 Start 함수 사이에 활동한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;onEnable 함수&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오브젝트가 활성화된 경우만 이 함수는 오브젝트 활성화 직후 이함수를 호출한다. 최초의 초기화 함수는 아니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OnDisable 함수&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비활성화 함수는 lateUpdate 까지 끝나고 종료 되기 전에 실행되는 함수로 onEnable과 연동되어 실행&lt;/p&gt;</description>
      <category>유니티 코딩</category>
      <author>문과의코딩</author>
      <guid isPermaLink="true">https://tipsyho.tistory.com/3</guid>
      <comments>https://tipsyho.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B8%B0%EB%B3%B8-%EC%8B%9C%EC%9E%91-%ED%95%A8%EC%88%98%EC%99%80-%EA%B7%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%88%9C%EC%84%9C-%EA%B3%B5%EB%B6%80#entry3comment</comments>
      <pubDate>Wed, 18 Oct 2023 10:53:08 +0900</pubDate>
    </item>
  </channel>
</rss>