에셋 관리 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
문제 상황namespace Delegate{ internal class FileName { public void ShowMenu() { int age = 0; // 전형적인 OCP를 위반하는 코드. // 나라가 추가될 때마다 else if 문이 추가됨. // 참고로 아래 if문 조건은 편의상 간단하게 적은 것임. if ("KOREA") age = GetAge_Korea(); else age = GetAge_Japan(); } private int GetAge_Korea() ..
빌드 후 스크립트에서 불러올 에셋은 Resources 폴더에 있어야 한다.Resources 폴더에서 불러오는 에셋은 Resources.Load로 불러와야한다.(Application.datapath 이런걸로 하면 못 불러옴)
- 저장할 때(예를 들면 Save & Load를 구현할 때)- 통신할 때- 기타 등등... Json은 코드를 저장하는 택배라고 생각하면 쉽다!저장하기 위해선 코드를 Json으로 변환해 저장하고불러오기 위해선 Json을 가져와 코드로 변환해주면 된다 이때 json과 코드 사이의 변환은 유니티에서 지원해준다! * 저장하기1. 저장할 코드(데이터)를 만든다2. json으로 변환한다 using System.Collections;using System.Collections.Generic;using UnityEngine;class PlayerData{ public string name; public int level; public int coin; public bool skill;}pub..
1. Local Point : 게임 오브젝트 기준 시점의 좌표2. World Point : 실제 게임오브젝트의 transform.position 값3. Viewport Point : 카메라 내에서 오브젝트가 위치하고 있는 비율(0~1, 0~1)왼쪽아래 : (0,0) 오른쪽 아래: (1,0) 왼쪽 위 : (0,1) 오른쪽 위 : (1,1)4. Screen Point : 카메라 내에서 오브젝트의 위치를 해상도 기준으로 좌표를 매긴 값1920x1080 해상도라면 (0~1920, 0~1080) (pixel 좌표) Local World Viewport Screen 유니티에서 마우스의 좌표는 Input.mousePosition으로 가져올 수 있다.(다만 z성분은 얻을 수 없다.)(z는 카메라와의 거리)하지만 ..