목록창고/게임 개발 [Hidden] (86)
도드넷
유니티 변수 숨기기 [HideInInspector] 을 넘어서... 유니티 변수 숨기기의 기본은 [HideInInspector] 아트리뷰트다. 에디터/디자인상 변경하지 않는 보이지 않아도 되는, 내부의 public 변수, 프로퍼티 같은 경우[HideInInspector] 를 이용해서 정리해주면 에디터가 깔금해진다. 하지만 우리는 그 이상을 원한다. 에디터상 현재 변수에 따라 연관된 다른 변수들을 숨기는 기능을 추가해보자. 아이템 타입(enum)이 "무기(Weapon)" 인 경우 드로우/하이드 아이템 타입(enum)이 "탄약(Ammo)" 인 경우 드로우/하이드 유니티 변수 숨기기 조건부 [HideInInspector] 애드온 설치법 1. Editor 폴더에 다음 스크립트 삽입. 2. Asset 폴더에 다음..
C# 다양한 소숫점 처리 하는 방법 - C#에서 소숫점(소수점) 첫째자리 둘째자리 까지만 표시하기 소숫점 반올림 올림 내림 자르기 하는 방법 총 정리! (feat. 유니티) 1. 소숫점 자리 표시 string.Format 포멧함수는 꽤나 유용한 개꿀함수다. 예를들어 유닛의 현재 체력을 표시해야하는데 float 으로 152.38537 이다. 이걸 다 UI에 표시하면 너무 길고 복잡해보인다. @_@; 이걸 만약 현재체력표시기.text = string.Format("{0:0.#}", 152.38537); 처리를 해주면 152.4 (자동 반올림) 으로 표시된다. 이 함수가 좋은점은 if 없이도 소숫점이 없으면 그냥 152를 표시하고있으면 지정된 자릿수까지만 반올림 표시한다. 만약 두자릿수 까지 표시하고 싶다면 ..
유니티 모바일 로딩시간 씬 불러오는 시간 줄이는 방법 게임 제작이 진행됨에 따라 뼈대에 하나씩 살이 더해져가 형체를 갖추는 도중 갑자기 로딩이 느려졌다. 유니티로고 -> 회사로고 -> 첫번째 씬 불러오기 위 3단계에서 도합 20초가 넘게 소비되고 있었다. ㄷㄷ 아 속터져 ㅠㅅㅠ 유니티 모바일 로딩시간 감축, 씬 불러오는 시간 줄이는 방법은 다음과 같다. 1. 고용량 에셋 삭제 2. 고용량 음원파일 불러오기 설정 아래와 같이 변경. Load Type : Streaming.Compression Format : PCM.Sample Rate Setting : Preserve. 인게임상 프레임 드랍 (렉)은 스파게티 코딩 또는 과도한 점과 선 그래픽, 물리연산에 의한것이다 하지만 씬이나 게임 로딩시간이 오래걸린다..
유니티 회전 Rotation 스크립트로 설정하기 유니티 오브젝트가 가진 Transform 상 회전을 C# 스크립트로 설정하는 방법에 대하여. 유니티 회전 Rotation 값 설정하기 유니티 엔진의 게임 오브젝트는 씬공간상 회전값인 rotation을 가진다.C# 스크립트로 어떤 물체의 회전값을 에디터상 값으로 강제로(?) 설정하려면 다음과 같이 하면 된다. 위 유니티 에디터값 처럼 Rotation -90 0 0 으로 설정하고 싶다. transform의 localEulerAngles를 새 벡터값 -90 0 0 으로 설정하면 된다! :3 (보너스) 즉각적인 각도 설정은 위와같이 하면되고 서서히 회전하는건 다음과 같이하면 된다 Rotate ( 축 * 타임델타타임 * 스피드 ) ㅇㅇ
C# 객체 복사하는 법 주소가 아닌 값 복사 하기. 진짜 객체 복사! 예를 들어보자. (뜬금) 인간이라는 객체가 있다고 하자. 인간 A;인간 B;인간 C; 인간A을 인간B으로 만들고 싶을때 A = B; 하면 B의 모든 값이 A로 복사되긴 한다. 그런데 큰 문제가 생긴다. 만약 인간A의 키를 175cm으로 설정하면 인간B의 키 또한 175cm가 된다. 만약 인간A를 인간C로 만들고 싶어서 A = C; 를 시전하면, 인간A가 인간C가 되지만 동시에 인간B 또한 인간C가 되버린다. WHAT THE FUCK ? 그 이유는 객체를 "=" 연산자로 계산할 경우.복사가 아니라 참조가 일어나기 때문이다. DAMN! C# 객체 복사하는 법 참조 문제 솔루션 : MemberwiseClone 이라는 메소드를 사용하면 된다...
유니티 모든 타입찾기 활성화 + 비활성화 객체 모두찾기! 유니티에서 현재 씬에 존재하는 어떤 특정 컴포넌트를 모두 참조하는, 찾아내는 코드는 다음과 같습니다. Caught in a bad romance 1. 현재 씬 로드. 2. 현재씬에서 "루트오브젝트(숨겨진 모든 오브젝트들의 부모)"를 찾은뒤 GetcomponentsInChildren 메소드이용. 3. 특정 모든 컴포넌트 참조 반환 4. 유동성 타입 사용 실사용. 다만 리스트로 반환하다보니 개인적으로 ToArray() 과정이 필요했다. 현재씬의 넘버 인덱스 (1)로 현재씬을 참조하는데 그게 조금 어색해보인다. +현재 씬 빌드인덱스 반환하는 법 SceneManager.GetActiveScene().buildIndex 위의 코드에서 1을 위의 빌드인덱스 ..
[개발 메모2] 유니티 Monobehaviour 저장하기? 1. 유니티 인게임 게임오브젝트 컴포넌트인 Monobehaviour 을 상속받은 객체/컴포턴트는 serialized json 형태로 저장할 수 없다. 2. Scriptable Object 형태의 객체는 저장이 가능하지만 그 안에 만약, 인게임 Monobehaviour 컴포넌트가 참조되어 있다면 보이지않는 오류가 나고 재대로 저장이 되지 않느다. 결론 : 인게임에 게임 오브젝트(GameObject)의 컴포넌트로 쓰이는 NEVER, EVER, 절대로 게임 씬안에 존재하는 Mono상속 객체(컴포넌트)를 저장하려 들지말라. +3. 씬 다시불러오기 리로드 하기 using UnityEngine.SceneManagement; SceneManager.LoadS..
[개발 메모 1] 1. 유니티 Development Build + Autoconnect profiler 로 빌드했는데 Build And Run 빌드가 안될때. "Build System에서 Gradle을 이용하지 않고 Internal (deprecated) 을 사용한다." "소프트웨어 개발에서 deprecated 뜻은 구형의, 지난 버전의, 를 뜻한다." 흠. Console 창 > Editor > AndroidPlayer(ADB@127.0.0.1 ...) 을 사용하고 싶다면 Development Build + Autoconnect profiler 를 사용해야한다.
유니티 모바일 안드로이드에서 유니티 StreamingAssets 폴더에 접근하는법? FUCKK!! 왜 안돼는거야?!! 결론 : 유니티 StreamingAssets 에 저장된 애셋을 그냥 읽을 수 없다. 찾아보니까 WWW 같은 툴을 통해서 jar 형태로 보관된 애셋을 읽어낼 수 있다는데 아오...복잡해 @_@ Here is the solution honey!! 구글에서 찾아낸, 100% 잘 작동하는 유니티 모바일 StreamingAssets 읽기 솔루션은 이러하다. 일단 기존의 파일경로를 사용하되,(Application.streamingAssetsPath + Filename) WWW (reader) 객체를 이용하여 해당 경로의 파일을 바이트로 읽고 그 읽은 바이트로 제2의 파일을 다른 경로(Applicat..
유니티 한글화 지역화 언어설정 시스템. JSON Localization 사용해서 한글-영문화하기수익의 극대화, 잠재성 증폭을 위해서는 다양한 언어의 현지화, 번역은 필수이다.나의 게임을 위해 스스로 구현한 유니티 현지화(Localization) 번역 시스템은 아래와 같다. 일단 JSON 객체로 저장하기 위한 Serializable 데이터 객체을 정의한다.저장되는 객체는 LocalizationData 님으로 키값과 벨류값을 가진 LocalizationItem 리스트를 가진다. 그리고 번역-지역화-현지화를 책임지는 시스템 객체인 LocalizationManager는 LocalizedText라는 딕셔너리 데이터를 가진다. 잠깐. 딕셔너리? 이것은 두가지의 값 key, value 를 쌍으로 가지는 특수한 Lis..