인터넷이 동작하기 위해 필요한 최소 컴퓨터 수는?2대다.1개는 Web Browser, 1개는 Web Server를 띄우고, 두 대의 컴퓨터는 인터넷으로 연결되어있다.그리고 Web Server를 띄운 컴퓨터는 http://info.cern.ch와 같은 주소를 가진다. 그리고 하드디스크를 가진다. 이 하드디스크에는 index.html 파일이 저장되어있다. 그래서 Web Browser를 가진 컴퓨터에서 http://info.cern.ch/index.html에 들어가면?http://info.cern.ch를 가진 컴퓨터에게 전기 신호를 보낸다. 그 신호 안에는 index.html 파일을 원한다는 내용이 있다. 그럼 info.cern.ch에 해당되는 컴퓨터에 설치된 Web Server 프로그램이 하드 디스크에서 ..
에셋 관리 1. 개발 초기에는 Resources.LoadAsync와 같이 많이 사용함.하지만 이 방법은 빌드 시간이 증가되고 에셋 관리가 힘듦 2. 진행이 어느정도 되면 AssetBundle을 사용AssetBudle.LoadFromFileAysnc이건 번들을 로컬 디스크에 저장해서 에셋을 불러오는 방법 3. 런칭에 가까워지면 서버에서 다운받도록UnityWebRequest.GetAssetBundle(bundleUrl); 사용번들을 서버에서 가져와서 디스크 저장하고, 디스크에서 다시 로드하는 방법 하지만 이 방법은 dependency 처리가 되어있지 않아서 사용하면 안 된다.에셋은 서로 dependency가 있다. ex) 오브젝트1이 다른 머티리얼, 셰이더를 참조한다.에셋번들은 다른 에셋번들에 종속성이 걸려..
* HTTP 통신이란?비동기적인 통신이다.ex) 온라인게임처럼 여러명이 실시간 소통하는 서버가 아니라,각각의 pc에서 필요한 정보만 웹서버에 요청하면, 웹서버에서 응답을 보내주는 비동기적인 서버통신이다. * 유니티에서 HTTP 통신을 하는 방법은 2가지가 있다.1. WWW 방식2. UnityWebRequest 방식 => 최신 방법이고, WWW 방식에서 사용할 수 있는 기능을 모두 사용할 수 있다. * HTTP 통신을 할 때 주의해야할 사항1. 코루틴을 사용해야한다. : 코루틴을 사용하지 않으면 요청을 보내고 처리하고 응답이 오는데까지 걸리는 시간동안 프로그램이 멈춘다.2. using문을 사용하는 경우가 있다. : 스크립트 상단에 네임스페이스 추가할 때 쓰는 using문 말하는 거 아니고, 스크립트 중..
from 중첩해서 사용하기=> foreach를 2번 쓴 것과 같은 효과! // from 2번 쓰기var playerItems = from player in _players from item in player.Items where item grouping// groupingvar playersByLevel = from player in _players group player by player.Level into levelGroup orderby levelGroup.Key select new { levelGroup.Key, Players ..
데이터를 가공할 때 유용하게 쓸 수 있는 문법이다!SQL 문법과 비슷하고 가독성이 좋아 기능을 쉽게 파악할 수 있다는 것이 장점이다. 근데 유니티에서 LINQ 쓰면 오류날 수도 있어서...(특히 ios) 별로 추천하진 않는다고 한다...(초창기에 그랬다고 함)근데 LINQ를 기반으로 하는 기술들이 많아서, 공부할 가치가 있다 using System.Threading.Tasks;using System;namespace TaskPractice{ public enum ClassType { Knight, Archer, Mage, } public class Player { public ClassType ClassType { get; se..
async 이름만 봐도 비동기 프로그래밍 같지만비동기라고 꼭 멀티쓰레드는 아니다.동기와 다르게 하나가 끝날 때까지 기다리지 않아도 된다는 의미에서 비동기이고,꼭 멀티쓰레드 환경에서 실행되어야 한다는 보장은 없다.ex) 한 스레드 안에서 일을 분배해서 함(약간 코루틴 느낌~)참고로 coroutine은 싱글 스레드에서 동작한다! Task란?일감을 만들어서 보내준다~ 대충 이런 의미 using System.Threading.Tasks;using System;namespace TaskPractice{ class Program { static Task Test() { Console.WriteLine("Task start"); Task t..
OSI 7계층에서... Application layer에서 유저인터페이스, HTTP, FTP, DNS 전달Transport layer에서 전송 확인 / 오류 해결, TCP, UDP가 전달됨. HTTP는 내부적으로 TCP, UDP로 만들어져 있음. 게임서버는 보통 TCP 서버로 만들고 웹서버는 HTTP.이 둘은 다른 레이어에 있다.
* 해결법IDragHandler도 상속받아서 OnDrag() 함수 구현하면 OnBeginDrag도 동작한다! 참고자료https://discussions.unity.com/t/ibegindraghandler-not-called-without-eventtrigger-component/568450/2
* 스레드 상태 종류 Unstarted : 스레드 생성 후 Start() 메서드가 실행되기 전(스레드 시작하기 전) 상태Running : 스레드가 동작 중인 상태 Suspended : 스레드 일시 중지 상태. Thread.Rewume() 메소드 호출까지 대기 WaitSleepJoin : 스레드 일시 중지 상태. 특정 조건까지만 대기* Thread.Sleep()특정 ms 시간만큼 스레드가 대기하는 것 * Thread.Join()다른 스레드가 실행이 끝날 때까지 대기하는 것 Aborted : 강제 종료. 보이기에는 바로 종료되어 보이지만 근데 실제로는 바로 종료되는 게 아니라 일정 시간 후에 종료됨 포그라운드 스레드가 죽어버리면 해당 프로세스는 꺼진다.백그라운드 스레드는 죽어도 프로세스 수명에 영..
* 프로세스와 스레드- 프로세스는 반드시 하나 이상의 스레드로 구성되어진다.- 둘 이상의 스레드를 동시에 실행하면 멀티스레드라 한다. * 스레드- 운영체제가 CPU에 시간을 할당하는 (일을 시키는) 기본 단위- 운영체제가 명령어를 실행하기 위한 스케줄링 단위 * 멀티 스레드의 장점1. 동시에 여러 작업을 할 수 있다.2. 데이터 공유가 쉽다. * 유니티에서 코루틴을 쓰는 이유유니티는 게임 로직 쓰레드(메인 쓰레드) 1개에서만 게임 로직을 짤 수 있다. 스레드를 만들어 사용하면, 그 스레드에서는 유니티의 기능을 사용할 수없다. 그래서 코루틴을 사용해 병렬 처리(하지만 실제로는 동기로 작동)를 구현하는 것이다. ex)using System.Threading;using UnityEngine;public cla..
readonly List sessionItems = new List(); 위와 같이 List가 readonly인 경우, sessionItems에 새로운 List 인스턴스를 할당하는 건 안되지만,Add(), Remove(), Clear()같이 내부 요소를 수정하는 메소드는 사용이 가능하다! C#의 readonly 키워드와 불변성에 대해위 글에 따르면, readonly 키워드가 참조형의 내부 상태가 바뀌는 것까진 막아주지 못한다고 한다. 현업에서 쓰고있는 C# 5.0 ~ 7.3 기능 정리readonly List 에 관하여위 글도 다시 보고 참고하기
1. for문의 탐색 인덱스(i)를 for문 내부에서 사용하는 경우(1)상황for (int i = 0; i 문제가 되는 이유for문 내부에서 walls[i+1]에 접근하기 때문에 for문의 조건을 i하지만 만약 walls 배열의 크기가 1인 경우, walls.Count() - 1 = 0이 되어버려 for문을 아예 돌지 않음i = walls.Count()일 경우의 IndexOutOfBounds는 고려했지만 정작 i = 0인 경우를 고려하지 못했음... 해결법차라리 for(int i=0; ii+1인덱스에 접근하는 while문에 i >= walls.Count() 조건을 걸어 IndexOutOfBounds를 체크하는 게 좋았을 것 같다 2. for문의 탐색 인덱스(i)를 for문 내부에서 사용하는 경우(2..