분류 전체보기 54

[Retro유니티] GameManager, TextMeshPro & Build

목표- Game Manager와 UI 만들기- Scene관리자로 Scene 로드하기- PlayerPrefs를 사용해 데이터를 저장하기- 게임을 빌드하기 에셋종류별로 폴더를 추가생성하고 정리한다. 바닥회전기능을 구현하여 Level 게임오브젝트에 적용해보자.using System.Collections;using System.Collections.Generic;using UnityEngine;public class Rotator:MonoBehaviour{ public float rotationSpeed = 60.0f; void Update() { // 1초에 y축기준 몇 도 회전할것인지 transform.Rotate(new Vector3(0f, rotationSpeed..

[Retro유니티] BulletSpawner - Update() 함수로 실행반복

Update() 메서드로 탄알을 만들것이다.그런데 Update() 메서드는 1초에 수십번 실행된다. (정확히는, 화면이 갱신될 때마다 실행된다.)따라서 무지성으로 넣으면 1초에 수십개씩 탄알이 쏟아질 것이다.따라서, timeAfterSpawn을 체크 후 탄알을 발사하는 로직을 작성해야 한다. Time.deltatime아까,Update() 메서드는 1초에 수십번 실행된다. (정확히는, 화면이 갱신될 때마다 실행된다.)라고 했다.즉, 컴퓨터 성능에 따라 초당 프레임은 가변이라는 것이다.따라서 직전 Update() 실행과 현재 Update 실행사이의 시간간격은 일정하지 않다.  Update() 사이의 물리적 시간간격을 알기위해 내장변수 Time.deltaTime을 사용한다. Instantiate(원본)런타임에..

[Retro유니티] Bullet Spawner 구현 - Start()

3D Cylinder로 된 Bullet Spawner를 만들자.일단 만드는건 대충 빠르게 만들고. 중요한건 script다. BulletSpawner.cspublic -> 사용할 상수값(탄알 생성주기 최소값, 최대값)-> 탄알생성에 쓸 원본 Prefab을 GameObject로 선언 private-> 조준대상 GameObject의 Transform Component-> 탄알생성주기-> 마지막 탄알생성시점부터 흐른 시간 참고) Range 함수는 argument가 int면 int를, float면 float를 return한다. target = FindObjectOfType().transform;=> PlayerController 타입의 Component를 보유한 GameObject를 찾고, 해당 GameObjec..

[Retro유니티] Bullet 구현

Object 만들고, 색입히고, RigidBody 넣는 것 까지는 동일하다. Collider 설정물리적 표면이 존재하는 Object는(ex. 3D Sphere), Collider를 가진 다른 Game Object와 충돌하면 튕겨나갈 수 있다.탄알은 탄알과 충돌시 튕겨나가지 않고 그냥 통과하게 해야한다. 이를 위해 Trigger로 설정된 Collider가 필요하다.Player가 특정 영역으로 진입했는지 검사할 때 Trigger Collider를 많이 사용한다.Trigger Collider 자체는 물리적인 표면이 없다.여기선 Bullet이 충돌을 감지하되, Game Object를 튕겨나가게 하지 않게하기 위해 Trigger Collider를 사용한다. Prefab: 언제든지 재사용할 수 있는 미리 만들어진 ..

[Retro유니티] Player Object 설계 2 - GetComponent/linearVelocity/GetAxis 사용

몇 가지 문제를 개선하자.1. AddForce를 통해 움직임을 구현한 탓에, 즉각적 방향전환이 안된다.2. 입력감지코드가 복잡하다. if문 4개보다 더 간단히 하자.3. playerRigidBody에 Component를 드래그&드롭으로 할당하는게 human-error에 취약하며 불편하다. 코드로 실행하고싶다. 1. Start() 메서드 수정-> 드래그가 아니라, 코드상에서 RigidBody Component를 Object에 할당하기 위함.private Rigidbody playerRigidBody;로 선언하면, 더이상 드래그로 Component를 할당할 수 없다. Inspector 창에 public 아닌 변수는 표시되지 않기 때문이다. GetComponent 메서드꺾쇠로 원하는 타입을 받는다. Compo..

[Retro유니티] Player Object 설계 1 - AddForce를 통한 움직임 구현

1. Hierarchy창에서, 3D Object로 Player Object 생성 2. Project창에서, Material 로 Color 생성  3. Material 색 변경 및 Player에게 부여 - Camera Component의 Clear Flag를 변경하여 게임 변경색을 변경가능하다.  - Clear Flag의 Skybox는 가상의 하늘을 그린다. Solid Color를 통해 단색으로 배경을 채울 수 있다.  4. 탄알 충돌 구현을 위해, Tag 설정- 탄알입장에서, 충돌한 물체가 Player인지 단순GameObject인지 구분할 구분자가 필요.- Tag는 Game Object를 분류하고, Code에서 Game Object를 구별하는데 사용된다.- Code입장에서는, "탄알이 Player Tag..

Unity 프로젝트용 .gitignore

Unity 프로젝트는 쌩으로 push하기엔 너무 크다(용량이 1GB가 넘어간다).따라서 다 쳐내기 위한 .gitignore를 기록한다. https://github.com/github/gitignore/blob/main/Unity.gitignore gitignore/Unity.gitignore at main · github/gitignoreA collection of useful .gitignore templates. Contribute to github/gitignore development by creating an account on GitHub.github.com   # This .gitignore file should be placed at the root of your Unity project ..

[Retro유니티] Component 사용: myRigidBody

(앞으로, Retro 의 Unity 게임 프로그래밍 에센스 책을 따라 독학을 진행할 예정이다.)  Today I learned일단 Component 추가자체는 Godot과 크게 다를게 없었다.게임엔진은 일반적으로 Component 패턴을 사용하는 모양이다. 상속은 오히려 불필요한 품이 들어가는 경우가 있는데, 서로 독립적인 Component Pattern 을 활용하면 게임같은, 오브젝트의 종속성이 애매한 경우에 대응하기에 좀더 적합한 모양이다. 아직 수준이 낮은 단계이긴 하나, C# 또한 수월히 배웠다. 사실 참조타입/값타입 말고는 따로 볼게 없었다(기본설정이 private라는것과).그리고 Copilot이 매우 강력했다.또한, VisualStudio 가 기본 에디터라, 매우 호감인 부분이었다.Godot은..

241104 Unity 셋업

결국 사후지원과 de facto standard가 중요한데...고도보다 유니티가 낫지않나 싶다.고도엔진의 최근논란때문이 아니다. 시간이 없는 사람은 최대한 범용적인 기술을 mainstream으로 택하여, 불필요한 학습 overhead를 줄일 필요가 있다.내 말은, 빵빵한 자료와 지원이 중요하다는거다.특히 삽질할 시간이 없는 뉴비한테는.그래서 결론을 내렸다. 유니티로 가야한다. 나는 시간을 돈을 주고서라도 사야하는 입장이다. 엔진소스코드를 뜯어본다? 애초에 내 수준에서는 그럴 일이 없다. 따라서, 오픈소스인 것은 장점이 없다.현재 내 목표는 인디게임개발이다. 가장 급한것의 순서는 아래로 정리된다.1순위: 코딩능력 다른 모든 에셋은 대체가능하다. 픽셀은 돚거해서 쓰면 되고, BGM은 무음으로 쓰면된다.그러나..