본문 바로가기

게임개발31

[스파르타 국비] 유니티로 만드는 게임개발 2주차 1. awake 함수 스크립트 인스턴스가 로드 되는 중에 호출되는 함수, 스크립트 비활성인 상태에서도 호출됨 (인스턴스가 만들어진 후에 로드 되는 함수) 씬에 있는 모든 게임 오브젝트의 awake 함수는 무작위로 호출되기 때문에 awake 함수안에서 다른 게임 오브젝트를 호출 할 때 그 오브젝트가 인스턴스화 되지 않았을 수도 있기 때문에 문제가 발생 그래서 awake 함수에서는 자신의 인스턴스 자체를 참조하거나 변수를 초기화 하는데 사용한다 public class gameManager : MonoBehaviour { public static gameManager gameManage; void Awake() { // this -> "gameManager"인스턴스를 gameManage 변수에 저장 gameM.. 2024. 1. 23.
[스파르타 국비] 유니티로 만드는 게임개발 1주차 1. 유니티 좌표계 X축 : 오른쪽 방향 Y축 : 위쪽 방향 Z축 : 앞 쪽(모니터를 바라볼 때 정면) 방향 toward = -1.0f; transform.localScale = new Vector3(toward, 1, 1); 캐릭터의 방향을 왼쪽으로 변경하려면 유니티는 X축의 정뱡향이 오른쪽이므로 마이너스 값을 줘서 역방향으로 설정 (언리얼이나 다른 게임 엔진의 경우 좌표계가 다르기 때문에 그에 맞춰서 설정해야됨) 2. 프리팹 게임이 끝나기 전까지 빗방울은 계속 떨어지기 때문에 빗방울이라는 오브젝트가 계속 생성되게끔 프리팹으로 만들어서 계속 호출 GameManager 스크립트 역할 : 전반적인 게임 동작을 관리(빗방울 오브젝트, 점수..등) public GameObject rain; 유니티에서 rain.. 2024. 1. 20.
멀티쓰레드 Lock 구현 방식 1. SpinLock Lock을 얻기 위해 계속해서 Lock 획득을 할 때 까지 루프를 돌면서 수행하는 방식으로 하나의 쓰레드가 Lock을 오랜시간동안 점유하고 있다면 다른 쓰레드는 Lock을 획득하기 위해서 루프를 돌면서 Lock이 풀렸는지 계속 확인하므로 CPU에 부담이 가해진다. SpinLock 코드 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace ServerCore { class SpinLock { // volatile 키워드를 사용해서 가시성 역할 수행 volatile int _locked = 0; public void Acquire() { // .. 2024. 1. 15.
소켓 프로그래밍 소켓이란? OS는 User(사용자)영역과 Kernel(커널)영역으로 나뉘는데 OS 커널 영역에 구현되어 있는 프로토콜 요소(TCP, IP ..등)에 대한 추상화된 인터페이스를 소켓이라 부른다. 윈도우에서 메모장에 글을 쓰고 저장할 때 물리적으로 디스크에 저장이 되는데 디스크에 저장이 되기 전에 사용자와 커널 영역 사이에서 파일 형태라는 추상화된 정보 단위로 묶어진다. 여기서 말하는 파일 형태는 사용자 영역과 커널영역간의 데이터를 주고 받기 위한 추상화된 인터페이스를 의미한다. (폴더는 윈도우에서 제공하는 것으로 데이터를 트리 구조로 분류하는 것이며 파일과는 다름) H/W 단에 있는 디스크(SSD 또는 HDD)에 데이터를 저장하기 위해 시스템 콜을 통해 커널 모드로 전환이 되서 저장이 된 다음에 사용자 모.. 2023. 10. 29.