//출처 : https://forum.unity.com/threads/drawfrustum-is-drawing-incorrectly.208081/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraFrustumDrawer : MonoBehaviour
{
    [SerializeField] private Camera cam;

    private void OnDrawGizmos()
    {
        DrawFrustum(cam);
    }

    private void DrawFrustum(Camera _cam)
    {
        if (null == _cam)
        {
            return;
        }

        Vector3[] nearCorners = new Vector3[4]; //Approx'd nearplane corners
        Vector3[] farCorners = new Vector3[4]; //Approx'd farplane corners
        Plane[] camPlanes = GeometryUtility.CalculateFrustumPlanes(_cam); //get planes from matrix
        Plane temp = camPlanes[1]; camPlanes[1] = camPlanes[2]; camPlanes[2] = temp; //swap [1] and [2] so the order is better for the loop

        for (int i = 0; i < 4; i++)
        {
            nearCorners[i] = Plane3Intersect(camPlanes[4], camPlanes[i], camPlanes[(i + 1) % 4]); //near corners on the created projection matrix
            farCorners[i] = Plane3Intersect(camPlanes[5], camPlanes[i], camPlanes[(i + 1) % 4]); //far corners on the created projection matrix
        }

        for (int i = 0; i < 4; i++)
        {
            Debug.DrawLine(nearCorners[i], nearCorners[(i + 1) % 4], Color.red, Time.deltaTime, true); //near corners on the created projection matrix
            Debug.DrawLine(farCorners[i], farCorners[(i + 1) % 4], Color.blue, Time.deltaTime, true); //far corners on the created projection matrix
            Debug.DrawLine(nearCorners[i], farCorners[i], Color.green, Time.deltaTime, true); //sides of the created projection matrix
        }
    }

    Vector3 Plane3Intersect(Plane p1, Plane p2, Plane p3)
    {
        //get the intersection point of 3 planes
        return ((-p1.distance * Vector3.Cross(p2.normal, p3.normal)) +
                (-p2.distance * Vector3.Cross(p3.normal, p1.normal)) +
                (-p3.distance * Vector3.Cross(p1.normal, p2.normal))) /
                (Vector3.Dot(p1.normal, Vector3.Cross(p2.normal, p3.normal)));
    }
}


출처: https://forum.unity.com/threads/drawfrustum-is-drawing-incorrectly.208081/

tmp에 date 결과값 저장

tmp=$(date +%Y.%m.%d_%H:%M:%S)


echo를 이용한 응용도 가능함
현재 파일리스트 생성

rm file_list
echo $(ls -1) >> file_list

Error Log

Execution failed for task ':launcher:minifyReleaseWithProguard'.
> java.io.IOException: Can't read [C:\Unity\2020.3.48f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platforms\android-33\optional\android.car.jar] (Can't process class [android/car/Car$CarServiceLifecycleListener.class] (Unsupported version number [55.0] (maximum 54.0, Java 10)))

유니티 버전: 2020.3.48f1
상황: API버전을 31에서 33으로 변경
원인: API33에서 Proguard가 정상 동작하지 않음
해법: R8을 사용해야함

1. Custom Gradle Proerties Template 활성화
위치: Project Setting -> Player -> Android -> Publishing Settings -> Build-> Custom Gradle Proerties Template
2. Assets\Plugins\Android\gradleTemplate.properties 에서 android.enableR8을 true로 변경

Custom Gradle Proerties Template 위치




'Unity' 카테고리의 다른 글

[Unity] 카메라 절두체 그리기(Frustum of a camera in Unity)  (0) 2024.02.21

https://blog.unity.com/kr/technology/tales-from-the-optimization-trenches-saving-memory-with-addressables

 

어드레서블 에셋 시스템으로 메모리 최적화하기 | Unity Blog

위에서 발생한 문제를 해결하기 위해 앞서 생성한 세 번들에 들어가는 모든 요소를 고려해 보겠습니다. 번들에 배치한 것은 세 가지 프리팹이지만, 프리팹의 종속성으로 해당 번들에 암묵적으

blog.unity.com


https://github.com/patrickdevarney/AddressablesMemoryOptimizations

변경전

            using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            using (var currentActivityObject = unityClass.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                var packageName = currentActivityObject.Call<string>("getPackageName");
                                    
                using (var uriClass = new AndroidJavaClass("android.net.Uri"))
                using (var uriObject = uriClass.CallStatic<AndroidJavaObject>("fromParts", "package", packageName, null))
                using (var intentObject = new AndroidJavaObject("android.content.Intent", "android.settings.ACTION_SETTINGS", uriObject))
                {
                    intentObject.Call<AndroidJavaObject>("addCategory", "android.intent.category.DEFAULT");
                    intentObject.Call<AndroidJavaObject>("setFlags", 0x10000000);
                    currentActivityObject.Call("startActivity", intentObject);
                }
            }

 

변경 후

            using var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            using AndroidJavaObject currentActivityObject = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
            string packageName = currentActivityObject.Call<string>("getPackageName");
            using var uriClass = new AndroidJavaClass("android.net.Uri");
            using AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("fromParts", "package", packageName, null);
            using var intentObject = new AndroidJavaObject("android.content.Intent", "android.settings.APPLICATION_DETAILS_SETTINGS", uriObject);
            intentObject.Call<AndroidJavaObject>("addCategory", "android.intent.category.DEFAULT");
            intentObject.Call<AndroidJavaObject>("setFlags", 0x10000000);
            currentActivityObject.Call("startActivity", intentObject);

 

android.settings.ACTION_SETTINGS을 사용하면 에러 발생
android.settings.APPLICATION_DETAILS_SETTINGS으로 변경해야함

 

 

참고

https://developer.android.com/reference/android/provider/Settings#ACTION_APPLICATION_DETAILS_SETTINGS

@echo off 
rename "Temp_*.json" "/////*.json"

Json파일의 Temp_ 접두사 제거
접두사와 뒤의 '/'의 수가 같아야함

01 - Render to texture를 이용한 방법

매우 잘 동작했으나, Canvas의 Reder Mode가 Screen Space - Overlay라서 실패.
UI를 카메라에 담을 방법을 못찾음
https://github.com/zephyo/UI-Blur-LWRP-2020

유니티 최적화 툴

 

https://blog.unity.com/kr/games/build-stunning-mobile-games-that-run-smoothly-with-adaptive-performance

 

랜더링 주기를 조절 해주는 방법.
글로벌로 적용됨.
아마 안되겠지만 각 객체마다 하는방법이 있는지 궁금, 아니면 거리나 카메라라도

https://blog.unity.com/kr/technology/how-on-demand-rendering-can-improve-mobile-performance

 

온디맨드 렌더링을 이용한 모바일 성능 개선 | Unity Blog

포럼에서 온디맨드 렌더링을 어떻게 활용하고 있는지 알려주세요. Windows, macOS, WebGL, iOS, Android에서 Unity 에디터와 스탠드얼론 플레이어를 대상으로 테스트를 완료했으나, 피드백은 언제든지

blog.unity.com

 

https://docs.unity3d.com/ScriptReference/TrueTypeFontImporter.html

 

Unity - Scripting API: TrueTypeFontImporter

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close

docs.unity3d.com

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
public class FontIncludeTester : MonoBehaviour
{
    public Font font;

    public void Do()
    {    	
        var _path    = AssetDatabase.GetAssetPath(font);
        var _impoter = AssetImporter.GetAtPath(_path) as TrueTypeFontImporter;

        if (null == _impoter) return;

        _impoter.includeFontData = !_impoter.includeFontData;
        _impoter.SaveAndReimport();
    }
	
    // 버튼 생성 에디터 코드
    [CustomEditor(typeof(FontIncludeTester))]
    public class FontIncludeTesterEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            if (true == GUILayout.Button("테스트"))
            {
                (target as FontIncludeTester).Do();
            }
        }
    }
}
#endif

+ Recent posts