블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2811)
Unity3D (867)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (234)
협업 (61)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Unity 2021.3.49f1

Blender 4.3

----

 

블랜더에서는 트위스트 본이 정상적으로 회전이 먹히는데 유니티에서 제대로 되지 않고 캔디 랩(Candy Wrap) 현상이 생겨서 보정하기 위해 찾아보고 남겨 둠.

 

아래는 Unity의 RotationConstraint 사용해서 처리 하는 영상이다.

 

[참조] https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Animations.RotationConstraint.html

 

Unity - Scripting API: RotationConstraint

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

 

위 영상에서는 손목 본과 트위스트 본이 엮여있지 않아서 RotationConstraint를 사용가능 하다.

본 구조를 수평적으로 바꿀 수 있으면 위 방식대로 하면 될 것 같다.

 

지금 프로젝트의 모델은 본 구조가 트위스트 본과 손목 본이 트리구조로 엮여있어서 어쩔 수 없이 아래 스크립트 처럼 위 본에 가중치만큼 더해주고, 아래에서 틀어지지 않게 가중치만큼 다시 빼주고 있다.

그리고 Eular 값을 사용하면서 유니티에서는 - 값의 각도를 넣어도 0 ~ 360도 사이 값으로 보정돼서(예: -10도 == 350도 와 같다.) 오히려 꼬이는 상황이 생겨서

180도 이상을 넘어가게 되면 360도를 빼서 마이너스 각도로 보정해서 계산하도록 했다.

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

/// <summary>
/// 모델 Cnady Wrap 보정 클래스
/// </summary>
public class CandyWrapCorrectionController : MonoBehaviour
{
    [SerializeField] private Transform m_trTwistBone;   // 트위스트(Twist) 본
    [SerializeField] private Transform m_trSourceBone;   // 참조(Source) 본

    [Range(0f, 1f)]
    [SerializeField] private float m_fWeight = 0.5f;

    void OnEnable()
    {
        
    }

    void LateUpdate()
    {
        if (null == m_trTwistBone || null == m_trSourceBone)
            return;

        // 참조 본 회전값 가져오기
        float fY = m_trSourceBone.localRotation.eulerAngles.y;
        if (180f <= fY)
        {
            fY -= 360f;
        }

        // 가중치 적용(Default : 0.5f)
        fY *= m_fWeight;

        // 트위스트 본에 적용 (필요시 축 제한)
        m_trTwistBone.localRotation = Quaternion.Euler(m_trTwistBone.localRotation.eulerAngles.x, 
                                                        m_trTwistBone.localRotation.eulerAngles.y + fY,
                                                        m_trTwistBone.localRotation.eulerAngles.z);
        //  참조 본 보정
        m_trSourceBone.localRotation = Quaternion.Euler(m_trSourceBone.localRotation.eulerAngles.x,
                                                        fY,
                                                        m_trSourceBone.localRotation.eulerAngles.z);

    }
}

 

더 테스트는 해봐야겠지만 일단은 예상한대로 작동은 하는 것 같다.

 

 

[도움 및 출처] 삼님

반응형
Posted by blueasa
, |

Unity 2021.3.49f1
Xcode 16.2
----
 

 
Facebook iOS SDK 18.0.0 버전을 추가하면서 소스코드가 많이 늘어났는지 Xcode에서 위와 같은 빌드 에러가 뜬다.
결국 소스코드 양을 줄여야 된다는 말인데.. 전부터 느끼는 거지만 Facebook SDK는 쓸데없이 다 때려박아놔서 소스양이 많아서 이런저런 문제를 계속 만들어 내는 것 같다.
 
 
검색해보니 아래와 같은 내용이 있다.

[출처] https://issuetracker.unity3d.com/issues/ios-arm64-branch-out-of-range-747396072-max-is-plus-slash-128mb-xcode-error-when-building-development-build-with-script-debugging

 

Unity IssueTracker - [iOS] ARM64 branch out of range (747396072 max is +/-128MB) Xcode error when building development build wit

How to reproduce: 1. Open the 728989.zip project 2. Build the project for iOS with "development build" and "script debugging" enable...

issuetracker.unity3d.com

 
 
위 내용을 참조해서 iOS의 Managed Stripping Level을 현재 Minimal에서 Low로 한단계 올리니 빌드가 잘된다.

 

소스코드의 양이 문제면 다른 곳을 줄일 생각도 해야되나 싶지만, 간단하게 해결하려면 이게 편한 것 같다.

[추가]

Managed Stripping Level을 올리는 건 아무래도 찜찜해서 최후의 수단으로 두고,

난독화 툴에서 Dummy Code를 생성하는데 그 부분을 Off하고 빌드하니 빌드 잘돼서 일단 이렇게 두기로 했다.

 

 

[참조] https://docs.unity3d.com/kr/2021.3/Manual/ManagedCodeStripping.html

 

관리되는 코드 스트리핑 - Unity 매뉴얼

빌드 프로세스 중에 Unity는 관리되는 코드 스트리핑이라는 프로세스를 통해 사용하지 않거나 도달할 수 없는 코드를 제거하므로 애플리케이션의 최종 빌드 크기를 대폭 줄일 수 있습니다. 관리

docs.unity3d.com

 

[참조] https://www.cnblogs.com/billyrun/articles/18247631

 

Unity打包il2cpp编译链接时报错 - 冯校长 - 博客园

当il2cpp生成的C++文件过多时,部分版本(2022.3)的unity会遇到链接失败的问题(ios/android均存在,在部分打包机上几乎稳定重现)项目il2cpp目录下的cpp代码量约1000左右,大小接近2G打包失败具体表现为Library/

www.cnblogs.com

 

[참조] https://blog.yusong.me/unity/platform/ios

 

iOS Platform | Yusong

 

blog.yusong.me

 

 

반응형
Posted by blueasa
, |

Unity 2021.3.47f1

----

 

Dynamic Font의 옵션에 Include Font Data가 체크 돼 있으면,  AssetBundle 빌드 시 Font도 번들에 포함 되는 것 같다.

[참조] https://codingstarter.tistory.com/37

 

[Unity] AssetBundle & Addressable 폰트 중복 로드 문제

- UI를 번들에서 로드하도록 수정 했더니 메모리에 동일한 폰트가 중복으로 로드되는 현상이 발생 - 동일한 폰트여도 각 번들마다 개별적으로 로드되는 것으로 추정 - 폰트 에셋의 Include Font Data

codingstarter.tistory.com

 

AssetBundle 빌드는 스크립트로 하기 때문에 위 참조 링크의 내용대로

AssetBundle 빌드 전, IncludeFontData를 false로 하고,

AssetBundle 빌드 후, IncludeFontData를 true로 되돌리도록 처리했다.

 

기본적으로 Dynamic Font의 폴더를 지정은 해야되지만 폴더의 하위는 모두 훑어서 ttf파일은 모두 처리하도록 해뒀다.

        /// <summary>
        /// Dynamic Font Path
        /// 사용하는 Dynamic Font를 AssetBundle 빌드 할 때 포함 안되도록
        /// AssetBundle 빌드 시, false 했다가 되돌리기 위해 사용
        /// [주의] 실제 사용하는 다이나믹 폰트 Folder Path 체크 필요
        /// </summary>
        private static string m_strDynamicFontFolderPath = "Assets/Fonts/Dynamic";

        public static void ProcessIncludeFontData(string _strTargetDirectory, bool _bActive)
        {
            if (false == Directory.Exists(_strTargetDirectory))
                return;

            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(_strTargetDirectory);
            foreach (System.IO.FileInfo fi in di.GetFiles())
            {

                if (fi.Extension.ToLower().CompareTo(".ttf") == 0)
                {
                    //string strFileNameOnly = fi.Name.Substring(0, fi.Name.Length - 4);
                    string strFullFilePath = fi.FullName.Replace("\\", "/");
                    Debug.LogWarningFormat("[strFullFilePath] {0}", strFullFilePath);

                    // 프로젝트 절대경로 제거하고 상대경로로 변경(Assets는 남기기)
                    string atrAssetPath = strFullFilePath.Replace(Application.dataPath, "Assets");
                    Debug.LogWarningFormat("[atrAssetPath] {0}", atrAssetPath);

                    TrueTypeFontImporter cImporter = AssetImporter.GetAtPath(atrAssetPath) as TrueTypeFontImporter;
                    if (null != cImporter)
                    {
                        cImporter.includeFontData = _bActive;
                        cImporter.SaveAndReimport();

                        Debug.LogWarningFormat("[atrAssetPath] {0} [cImporter.includeFontData] {1}", atrAssetPath, cImporter.includeFontData);
                    }
                }
            }

            foreach (System.IO.DirectoryInfo sdi in di.GetDirectories())
            {
                Debug.LogWarningFormat("[SubDirectory.FullName] {0}", sdi.FullName);
                ProcessIncludeFontData(sdi.FullName, _bActive);
            }
        }
        
        /// <summary>
        /// IncludeFontData 활성화
        /// </summary>
        public static void ActiveTrueTypeFont_IncludeFontData()
        {
            if (false == Directory.Exists(m_strDynamicFontFolderPath))
                return;

            ProcessIncludeFontData(m_strDynamicFontFolderPath, true);
        }

        /// <summary>
        /// IncludeFontData 비활성화
        /// </summary>
        public static void InActiveTrueTypeFont_IncludeFontData()
        {
            if (false == Directory.Exists(m_strDynamicFontFolderPath))
                return;

            ProcessIncludeFontData(m_strDynamicFontFolderPath, false);
        }

 

 

P.s. NGUI Font는 해당 옵션이 없어서 어떻게 처리해야될지 고민..

반응형
Posted by blueasa
, |

[링크] https://codingstarter.tistory.com/37

 

[Unity] AssetBundle & Addressable 폰트 중복 로드 문제

- UI를 번들에서 로드하도록 수정 했더니 메모리에 동일한 폰트가 중복으로 로드되는 현상이 발생 - 동일한 폰트여도 각 번들마다 개별적으로 로드되는 것으로 추정 - 폰트 에셋의 Include Font Data

codingstarter.tistory.com

 

 

 

반응형
Posted by blueasa
, |

이제까지는 옛날 버전인 FontCreator 5.5 Trial 버전으로 가능해서 작업 했었는데, 이제 Trial 기한도 지나고 주기적으로 쓰게 될 것 같아서 겸사겸사 유료 구매를 했다.

유료 구매하니 최신버전인 FontCreator 15.0이 받아지는데..

5.5를 쓰다가 15.0을 보니 바뀐 메뉴에서 이제껏 폰트 병합 방법을 생각하고 이리저리 해보니 잘 안돼서 삽질하다가 사용법 확인하고 적어 둔다.

P.s. 최신 버전에서 폰트 병합 방법은 더 간단해진 것 같다.

----

 

[Util] FontCreator v15.0(https://www.high-logic.com/ko/font-editor/fontcreator)

[Font] NotoSans v1.004(https://fonts.google.com/noto/specimen/Noto+Sans) :현재는 NotoSans v2 버전인 듯..

----

 

[폰트 병합 방법]

 

1) FontCreator 15.0 실행

 

2) FontCreator에 병합 될 첫번째 폰트(Dest)를 드래그 해서 올린다.

    이번 병합용 폰트는 NotoSansCJKkr-Regular(Subset).ttf 이다.

    NotoSansCJKkr-Regular.ttf 폰트를 미리 경량화를 해둬서 (Subset) 이름이 달려 있다.

    [경량화 참조] https://blueasa.tistory.com/2070

    드래그 해서 올려놓으면 아래와 같이 해당 폰트 탭이 생성되고 폰트 내용이 보인다.

    (하단의 Prevew는 해당 폰트에서 지정한 글자가 잘 나오는지 보기위해 언어별 타이틀을 미리 추가해 뒀다.)

 

 

3) FontCreator에 병합 될 두번째 폰트(Source)를 드래그 해서 올린다.

    아랍어를 병합하기 위해 NotoSansArabic-Regular.ttf를 드래그 해서 올린다.

    (아래 Prevew에서 아랍어만 보이는 걸 확인할 수 있다.)

 

 

4-1) NotoSansArabic-Regular.ttf에서 폰트 아무곳에나(아래 빨간 박스) Click

4-2) Ctrl + A 를 눌러서 모두 선택

4-3) Ctrl + C 를 눌러서 복사하기

 

 

5) 병합할 폰트의 탭(NotoSansCJKkr-Regular(Subset).ttf)을 클릭해서 돌아간다.

 

 

6) 'Edit - Paste Special...' 클릭

 

 

7) 'Paste Special' 메뉴에서 아래와 같이 체크하고 'OK' 클릭

    - 'Destination'은 New glyphs(Ignore matching 체크)를 선택해서 6)에서 복사했던 글자를 바로 추가하면서 중복된 건 제외하도록 했다.

    - 'Data'쪽은 잘 몰라서 일단 다 체크 했는데 작동에 문제 없어 보이긴 하지만 확신은 못하겠다.

 

 

8) 7)을 하고나면 아래와 같이 기존 폰트의 끝 부분에 아랍어가 추가된 것이 보이고, Preview에서도 안보이던 아랍어가 정상적으로 뜨는 것을 볼 수 있다.

 

 

9) 'Font - Properties...' 클릭

 

 

10) 'Font ProPerties' 팝업에서 아래와 같이 'Font 탭 - Coverage'를 찾아가서 3,4를 누르면 알아서 추가된 글자 관련 내용이 추가된다.

      2번째 스샷처럼 관련 Character(Arabic)가 추가된 걸 볼 수 있다.

      (4번까지 했으면 x를 눌러서 끈다.)

 

11) Font Properties 팝업 - Masters/Instance 탭을 보면

     - Masters 탭 - General - Name과 Instance 탭 - General - Style Name에 선택한 폰트 원래 이름이 아닌 Regular가 기본으로 들어가는 것 같다.(Regular 폰트는 우연히 맞는 것 뿐인 듯..)

     - Masters/Instance 탭의 Regular를 맞는 이름으로(아래 스샷 기준으로는 Medium) 변경하자.

 

 

Hint)

병합할 폰트가 여러개라면 3) ~ 11) 까지를 추가로 진행하면 된다.

Arabic 외에 Hindi, Thai를 추가해서 Preview에서 처럼 Arabic / Hindi / Thai 글자가 제대로 보이고 있다.

 

 

12) 'File - Export font As... - Export as Desktop Font (ttf/otf) ...' 클릭

 

 

13) TTF 폰트로 저장한다.

       'Font Export Settings 팝업 - Desktop Font (ttf/otf) 탭'에서 TrueType(TTF) 선택하고 저장할 위치 지정(Output Folder)한 후에 OK 클릭하면 병합된 폰트가 뽑혀 나온다.

 

 

 

 

[NotoSansCJKkr(v1.004) +경량화 폰트(+Arabic/Hindi/Thai 폰트 병합)(+일본어 분리)(+특수문자추가)]

https://blueasa.tistory.com/2428

 

[공유] NotoSansCJKkr(v1.004) +경량화 폰트(+Arabic/Hindi/Thai 폰트 병합)(+일본어 분리)(+LanguageTitle 병합)(+

[추가] KR 폰트에 Hindi 폰트 추가 병합 (2025-02-11)[추가] JP 폰트에 Arabic/Hindi/Thai 폰트 추가 병합 (2025-02-11)[추가] 일본어 빠진 글자들 추가(예:璧几眩嗅綺淹憑嘘軋褪贅揉罠鬱化) (2025-02-11)--------------

blueasa.tistory.com

 

 

반응형
Posted by blueasa
, |

[출처] https://gall.dcinside.com/mgallery/board/view/?id=wowretail&no=156805

 

글자가 부족한 폰트를 다른 폰트와 합치는 법 - WOW 리테일 마이너 갤러리

(내 짤이 아님)한글 폰트는 글자를 하나하나 일일이 만들어 줘야 하기 때문에,주로 사용하는 글자를 제외한 나머지 글자들이 비어 있는 경우가 있음폰트를 디자인용으로만 사용한다면 폰트가

gall.dcinside.com

 

----

한글 폰트는 글자를 하나하나 일일이 만들어 줘야 하기 때문에,

주로 사용하는 글자를 제외한 나머지 글자들이 비어 있는 경우가 있음

 

폰트를 디자인용으로만 사용한다면 폰트가 그렇게 만들어졌다 해도 큰 문제가 없지만

와우는 온라인 게임이므로 사용자들이 각종 이상한 오타와 글자를 사용하는 경우가 잦은데

글자가 부족한 폰트를 사용한다면 해당 글자들이 안 보이게 됨

 

그럴 때를 위한

이른바 외계어가 없는 폰트를 글자가 완전히 있는 폰트와 합쳐 사용하는 방법임

 

 

 

 

1. 먼저 FontForge를 다운로드 및 설치

https://fontforge.org/en-US/

 

 

2. FontForge 실행 후 글자가 부족한 폰트를 불러옴

다른 드라이버로 이동하려면 스크린샷과 같이 입력창에 해당하는 드라이버 알파벳과 콜론 역슬래시(혹은 원화 표시)를 입력하고 엔터를 치면 됨

 

컴퓨터에 설치된 폰트는 윈도우 설치된 드라이브(보통 C) - windows - fonts 에 있음

 

 

 

 

 

일부 폰트를 확인해 보면 스크린샷과 같이 없는 문자에 빈 공간으로 채워져 있기도 함

빨간 네모 같은 부분을 파란 네모처럼 아예 아무 데이터도 없는 상태로 만들어야 한다

 

 

 

3. 편집 - 선택 - Glyphs with only Splines 클릭

 

 

 

이렇게 빈 공간을 제외한 글자만 있는 칸만 선택됨

 

 

 

4. 편집 - 선택 - 선택 범위를 반전 클릭

그 후 편집 - 비우기 클릭

 

 

 

그럼 이렇게 빈 공간이 제대로 지워진다

 

 

5. 요소 - 폰트 결합 클릭

글자가 완전히 있는 폰트를 선택함

 

 

 

 

 

그럼 이렇게 폰트가 합쳐짐

인게임에선 티가 잘 나지 않아서 이대로 써도 되지만, 잘 보면 글자의 위아래 간격이 다른 것을 볼 수 있음

이것을 수정하고 싶다면

 

 

 

6. 편집 - 선택 - 변경된 글리프

 

 

 

 

7. 그럼 이렇게 빈 공간에 채워넣은 글자만 선택되는데,

요소 - 변형 - 변형을 클릭함

 

 

 

 

8. 첫번째 칸을 이동으로 설정하고 나머지는 아무것도 하지 않음으로 설정

이동하길 원하는 만큼 좌표값을 입력함

나는 그냥 내리고 싶으니까 이정도로 입력해 보겠음

 

 

 

 

 

그럴싸하게 된 것 같다

 

이제 저장을 해 보자

 

 

 

 

9. 파일 - 폰트를 출력 클릭

 

 

 

10. 확장자명을 ttf로 설정하고 Generate 클릭

 

 

 

이런거 뜨면 네

 

 

 

 

Validating... 이후 이런 거 뜨면 그냥 Generate

 

 

 

그러면 폰트가 만들어짐

 

가끔 메모리나 cpu 스펙 이슈 등으로 생성이 안 될 수도 있음

그럼 다시 만들 것

 

 

 

11. 와우 설치폴더의 fonts 폴더로 간다

없으면 만들면 됨

 

 

폰트를 6번 붙여넣고 위와 같이 이름을 바꾼다

와우를 켜 보면 폰트가 바뀌어져 있다

 

 

반응형
Posted by blueasa
, |

[링크] https://blog.naver.com/perafan/30113207479

 

[본문스크랩]폰트 합치기

카페 > 스마트폰카페[갤럭시S/아이폰.. | 린군 http://cafe.naver.com/bjphone/528766 안녕하세요 린군...

blog.naver.com

 

반응형
Posted by blueasa
, |