본문 바로가기

게임 개발 공부 정리

(21)
[C] 서버-클라이언트 소켓 통신 예제 코드 https://www.youtube.com/watch?v=AK_nTXp7hgw&ab_channel=%EA%B2%8C%EC%9E%84%ED%94%8C%EB%B0%8D%EB%A7%88%EC%8A%A4%ED%84%B0 유튜브에 공개된 해당 강좌 시리즈를 보면서 공부하였다. C로 소켓통신을 사용하여서 통신하는 예제 코드를 만들어보았다. #include #include #include #pragma comment(lib, "ws2_32.lib") int main(void) { printf("클라이언트 파일 시작... \n"); WSADATA wsaData; SOCKET hSocket; SOCKADDR_IN servAddr; //1. 윈속 초기화 if (WSAStartup(MAKEWORD(2, 2), &wsaDat..
[RS] Local/Global 변수 기초 변수는 총 두가지 유형이 있다. Local Var (Global) Var Local 형태의 변수는 쓰이는 빈도가 잦다. 일반적인 변수보다 액세스 속도가 더 빠르며, 효율적이기 때문이다. CodeBlock : 들여쓰기 되어 있는 하나의 코드 뭉치들 하나의 코드블럭 내에서 생성된 Local 변수는, 해당 코드블럭 내에서만 존재가 유효하다. 만약 local 변수가 코드블럭이 아닌, 스크립트내에서 생성이 되었다면, 코드블럭을 포함한 스크립트 내 어디서든 액세스 할 수있다. 한 코드블럭 내에서만 사용되고, 다른 곳에서는 사용할 일이 없는 변수를 선언할때는, Local 형태로 하는것이 일반적인 형태보다 더 효율적이고, 빠르다. Local과 Global의 관계를 정리하는 예시
[RS] 서비스 기초 서비스는 여러 가지 쓰일 상황에 따른 내장 함수와 이벤트가 들어가 있는 객체이다. 게임을 시작할 때 필수적인 서비스 몇 개만 게임에 로드하고 익스플로러에 표시를 하게 된다. 서비스 몇몇개만 로드를 하는 이유는, 쓰이는 빈도가 적은 다른 서비스를 모두 로드하게 되면, 익스플로러 상의 스크롤 문제와 성능 문제가 생기기 때문이다. 그렇기 때문에 익스플로러 상에서 존재하는 메인 서비스가 아닌 다른 서비스에 액세스 하기 위해서는 game:GetService("Name")을 하여, 서비스를 생성시킨 뒤에 액세스를 하게 된다. 메인 서비스를 포함 한 모든 서비스는 겟 서비스로 받는 게 안정성 면에서 좋다. 왜냐하면 게임에 때때로 메인 서비스가 로드되지 않을 때가 있기 때문이다. (루아의 근본 설계 문제와 관련이 있는..
[RS] Local/Server, ClickDetector local script 게임은 서버와 클라이언트로 이루어져 있다. 서버에서 작동하는 스크립트는 "Script" 오브젝트이고, 각 클라이언트 내에서 동작하는 스크립트는 "Local Script"이다. 각 사람의 "자신의 플레이어"는 서버에 존재하지 않고, 각 클라이언트에 존재한다. 그래서, local/module 스크립트는 각 클라이언트 내에서만 동작을 하게 된다. game.Players 서비스는 여러 종류의 플레이어들을 모아두는 곳이고, 그 중에 각 사용자의 클라이언트에서 플레이 하게될 플레이어 하나를 local player라 한다. local player에는 local/module script만이 들어갈 수 있다. 때문에, 로컬 플레이어에 일반 스크립트가 들어가게 되면 작동이 안된다. 모든 종류의 플레..
[RS] 기타 정리 이펙트는 유리 재질로 투시되지 못한다. Alt를 누르면 차일드 모델또한 선택이 가능하다 Disabled를 사용하여 스크립트를 비활성화 시킬 수 있다. 반투명 파트가 많으면 렌더링 작업이 많아지므로 성능 저하의 원인이 된다. 반복문에서 Wait()가 반드시 있어야 한다. 없으면 서버가 다운될 수도 있다
[RS] 20-12-05 ~ 06 정리 카메라 이동 F : 선택 된 오브젝트에게 카메라 이동 Ct + Y : 실행 취소 되돌리기 Ct + G : 그룹 Ct + U : 그룹 해제 플레이어 체력 변경 Humanoid:TakeDamage(50) Humanoid.Health -= 50 KORsoll.Head:Destroy() 이벤트 함수 연결 script.Parent.Touched:Connect(fun(hit)) 이벤트 함수 생성과 함께 연결 script.Parent.Touched:Connect(function(hit) end) 인스턴스 생성 local a = Instance.new("Explosion", Workspace) print(a.Position) 인스턴스 내 특정 차일드 인스턴스 존재를 체크 (이름으로 판단) Parent:FindFirst..
[Unity] 애트리뷰트 기능 정리 소스 코드 using System.Collections; using System.Collections.Generic; using UnityEngine; //한 오브젝트 내에서 이 스크립 컴포가 중복되지 않도록 한다. [DisallowMultipleComponent] //이 스크립트 컴포넌트를 추가할때 리지브 바디 컴포넌트도 같이 추가된다. [RequireComponent(typeof(Rigidbody2D))] //인스펙터 내 컴포넌트 추가 창에서 문자열의 값으로 설정된다. [AddComponentMenu("AR/AttributeManager")] //문자열의 경고 메시지가 뜨면서 경고 아이콘을 띄운다 [System.Obsolete("이것은 더 이상 사용되지 않습니다.")] //컴포넌트 우측의 물음표 버튼을 누를시 ..
[Unity] UI 기본 - Rect Transform 이동 / UI 마우스 트랙킹 Canvas의 크기는 일반적으로 해상도 전체의 크기를 전제로 하게 된다. Rect Transform에는 일반 트랜스폼 컴포지션과 다르게 앵커가 있는데, 앵커를 기준으로 UI를 배치하게 된다. - stetch : 선택한 가로/세로 캔버스와의 비율을 설정한다. - Pivot : UI상에 오브젝트를 배치할때 오브젝트 내부의 기준이다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class UIController : MonoBehaviour { public RectTransform rectTransform; void Start() { rectTransform = this.GetComponent(); } ..