본문 바로가기

[Unity]43

[Unity] 간단히 메모리 변조 방지하기 - 안티 치트(Anti Cheat) 이 글에서 소개하는 내용은 본인의 경험을 토대로 솔루션을 제시하는 것이므로, 실제로 사용하기에 부적절할 수도 있음을 인지하여 주시길 바랍니다. 유니티로 게임을 만들었다고 하더라도 불법 프로그램을 사용하여 데이터를 조작하는 악의적인 사용자는 있다. 만약, 그 데이터가 화폐 또는 능력치 같은 중요한 데이터라면 피해가 매우 크다. 이러한 데이터를 조작하는 예시를 한번 보자. int형의 money 변수가 있다고 해보자. 그렇게 되면 메모리에 1000이라는 숫자가 들어갔을 것이다. 그 메모리 주소를 Cheat Engine이라는 프로그램으로 찾아볼 것이다. 현재는 1000이라는 값을 가진 메모리 주소를 모두 검색했다. 이번에는 950으로 변경하고 검색을 했더니, 이전의 메모리 주소들 중에서 950으로 변경된 값을 .. 2023. 8. 20.
[Unity] GPS 기능으로 위도와 경도 불러오기 유니티에서 제공하는 LocationService 클래스로 간단히 GPS 기능을 구현해보자. 이번 글에서는 사진은 없고, 소스 코드를 위주로 진행해보겠다. 일단, 전체 소스를 먼저 보도록 하자. using UnityEngine; using UnityEngine.Android; //네임스페이스 추가 public class GPSModule : MonoBehaviour { [Header("Setting")] public bool startGPSOnStart; //Start문에서 GPS를 실행할 것인지 여부 public float desiredAccuracyInMeters; //현재 위치로부터의 최대 오차를 지정하는 변수 (정확도) public float updateDistanceInMeters; //특정 거리.. 2023. 8. 20.
[Unity] 안드로이드(Android) 카메라 연동하기 안드로이드의 카메라 화면을 실시간으로 가져와보자. Canvas 설정 먼저, RawImage 컴포넌트를 Canvas 상에 배치해야한다. 이 컴포넌트에 카메라 화면을 담을 것이다. Canvas를 생성하고, 자식으로 RawImage를 생성했다. 이때, Pivot은 따로 건드리지 말자. 나중에 스크립트에서 Width와 Height를 직접 조절할 것이기 때문이다. ※ CanvasScaler의 UI Scale Mode는 Constant Pixel Size로 지정해준다. Script 작성 [Header("Setting")] public Vector2 requestedRatio; //설정하고자 하는 카메라 비율 public int requestedFPS; //설정하고자 하는 프레임 [Header("Component").. 2023. 8. 5.
[Unity] EditorGUI를 활용한 커스텀 에디터 만들기 커스텀 에디터를 제작하면 단순 반복 작업을 일괄처리 할 수도 있고, 필요로 하는 기능을 추가할 수도 있으며, 더 나아가 난잡해진 Inspector 창을 깔끔하게 정리할 수도 있다. public class Inspector : MonoBehaviour { public bool showValue = true; public int val = 100; } 예를 들어 위와 같은 스크립트를 작성하면, 원래 이러한 Inspector 창을 생성하지만, 이렇게 만들 수도 있다는 것이다. 대부분 두 가지로 구현하는데, 첫 번째는 위에서 예시로 든 것과 같이 MonoBehavior를 상속한 클래스의 Inspector를 조작하는 것이고. 두 번째는 Lighting, Project Settings, Preference 및 Pr.. 2023. 4. 25.
[Unity] GameObject의 경로를 반환하는 함수 Hierarchy에서의 경로를 반환하는 함수이다. /* GameObject의 경로를 반환하는 함수 */ public string GetGameObjectPath(GameObject obj) { string path = null; if (obj) //오브젝트가 존재하면 { path = obj.name; while (obj.transform.parent) //부모가 존재하면 { obj = obj.transform.parent.gameObject; path = obj.name + '/' + path; //경로 추가 } } return path; //경로 반환 } 2023. 2. 26.
[Unity] 구글 애드몹 보상형 광고 구현 1) 구글 애드몹 페이지에서 새 앱 설정 2) '광고 형식 선택'에서 리워드 선택 3) 광고 단위 설정 구성 - 게제빈도를 설정하지 않으면 어뷰징으로 의심받을 수도 있다고 한다. 4) https://github.com/googleads/googleads-mobile-unity/releases 에서 .unitypackage 파일 내려받기 5) 이런 창이 뜨면 Enable 클릭하기 6) Resolving Android Dependencies 실행 - Assets/External Dependency Manager/Android Resolver/Force Resolve로 실행할 수 있다. - 에러가 발생한다면 Keystore를 지정 후 재시도하면 된다. 7) Assets/Google Mobile Ads/Sett.. 2023. 1. 17.
[Unity] 구글 플레이 인앱 결제(IAP) 구현 1) 유니티에서 Project Settings/Services/In-App Purchasing를 활성화 - 13세 이하 어린이를 대상으로 하는 경우에는 Yes, 아니면 No 2) Services/In-App Purchasing/Receipt Validation Obfuscator에 라이선스 키 입력 - 수익 창출 설정 탭에서 라이선스 키를 복사할 수 있다. - 입력 후에 Obfuscate Google Play License Key를 클릭한다. - Project Settings/Services/In-App Purchasing 탭에서 라이선스 키를 확인할 수 있다. 3) 유니티 대시보드로 이동하여, 위에서 입력한 라이선스 키를 해당 부분에 입력 4) 인앱 상품 탭에서 '상품 만들기' 버튼을 클릭하고, 모든 .. 2023. 1. 14.
[Unity] 구글 플레이 로그인 구현 1) Player Setting에서 'Package Name', 'IL2CPP', '.NET.4.x', ARM64 체크 2) Publishing Settings에서 Keystore 만들어서 적용 3) https://github.com/playgameservices/play-games-plugin-for-unity 에서 유니티 패키지 설치 - 'current-build' 디렉터리에서 .unitypackage 확장자를 찾을 수 있다. 4) Resolving Android Dependencies 실행 - 패키지 설치 후 자동으로 실행되지 않는다면, Assets/External Dependency Manager/Android Resolver/Force Resolve로 실행할 수 있다. 5) 앱 무결성 탭에서 두.. 2023. 1. 13.
[Unity] 자식 오브젝트와 함께 Color Tint를 적용하는 버튼 본 글에서는 버튼의 Color Tint가 하위 오브젝트에도 적용될 수 있도록 하는 스크립트를 알아본다. 이 스크립트는 가장 아래에 배치되어 있다. Canvas에 Button을 생성하고, Highlighted Color와 Pressed Color의 알파 값을 어느 정도 낮추어 준다. 이는 마우스 오버나 클릭이 발생했을 때 불투명도를 낮춰주기 위함이다. 이번에는 Canvas에 Button을 생성한 후, Button 컴포넌트를 MultipleColorTintButton 컴포넌트로 대체한다. 또한, Button과 동일하게 Highlighted Color와 Pressed Color의 알파 값을 어느 정도 낮추어 준다. Hierarchy는 이러하다. ▼ 결과.gif using UnityEngine; using Un.. 2022. 12. 12.
[Unity] 최적화 기법 최적화 기법 - 움직이지 않는 정적 오브젝트에 Static Batching 적용 - Texture : Generate Mip maps 체크, Use Crunch Compression 체크 - 머터리얼의 Enable GPU Instancing 체크 - Oculusion Culling 기법 (x) - Project Settings, Lighting Settings - Input.GetTouch 와 Input.touchCount 대신 Input.touches 사용하기 - ref 키워드 사용 - Resolution and Presentation의 Use-32bit Display Buffer 비활성화 - Other Settings의 Enable Internal Profiler 비활성화 - 오브젝트를 하나로 묶고,.. 2021. 9. 14.