728x90
반응형

LFS 대역폭이 초과되었다. Jenkins를 통해서 빌드 자동화에 성공했지만 해당 문제로 빌드가 실패했었다.

아마 Jenkins에서 빌드를위해 다운로드해서 대역폭이 초과된거 같은데 한달은 기다려야 할 것 같다.

lfs파일에 등록된 것은 firebase 플러그인이니 한달 후에 다시 업로드하거나 제거해야겠다.

현재는 제거한 상태로 빌드 자동화가 되고있다.

728x90
반응형
728x90
반응형

소스 트리(Git)푸쉬 에러 화면

Git에 커밋을 하고 Push를 할 때 용량이 100MB 이상이면 푸쉬가 되지 않는다.

이럴때는 LFS를 사용해서 따로 관리해 주어야한다.

우선 GitHub를 로그인에 프로필을 누르고 Setting > Billing and plans > Plans and usage를 클릭해 밑 부분에 Git LFS Data의 용량을 확인해야 한다.

무료 기준 1GB가 최대 (최대 용량을 늘리고 싶으면 결제 필요)

그 다음 git LFS 홈페이지에 들어가서 LFS를 다운 받는다.
주소 : https://git-lfs.com/

 

Git Large File Storage

Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server like GitHub.com or GitHub Enterprise.

git-lfs.com

 

다운을 받았으면 해당 프로젝트 폴더에 우클릭 > Git Bash Here

해당 창이 나오면

1. // git-lfs 설치
git lfs install

2. // lfs로 관리할 파일(용량이 100MB이상) 등록
git lfs track (file path)

3. // gitattributes 파일 생성
git lfs .gitattributes

4. // 원격 저장소에 푸쉬
git add (file name)
git commit -m (commit_message)
git push origin main

를 입력한다. 본인은 
git lfs install
git lfs track D:/Project Solo/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_6_0.so
git lfs track D:/Project Solo/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-11_6_0.bundle
git lfs .gitattributes
git add --all
git commit -m "init commit"
git push origin main
순으로 진행하였다.

번외로 소스 트리로도 LFS 관리가 가능하다.
저장소 > Git LFS > 파일 추적 / 중지하기 클릭

쉽게 관리 가능

이렇게 등록해 놓으면 git lfs track (filename)과 같은 작업을 하고 .gitattributes 파일도 자동으로 갱신해준다.

 

추가로 Git LFS 용량이 초과 되었을 때 무료로 해결하는 방법이 있다. (돈 아까우니깐)

DVC를 이용하는 것인데 초과 되었을때 사용해보도록 하겠다.
DVC 참고 블로그 : https://sbjjsurfing.tistory.com/110

 

Git LFS 무료 데이터 초과 문제 공짜로 해결하기 - DVC (Data Version Control)

이거 먼저 알고가자. GitHub Repository 는 코드만 저장하는 곳이지 대용량 데이터를 저장하는 곳이 아니다 데이터 사이언스 프로젝트를 진행하다 보면, 대용량 데이터를 다루는 경우가 많다. 초보들

sbjjsurfing.tistory.com

 

728x90
반응형
728x90
반응형

Android Resolver를 사용하다 보면 오류가 발생할 때가 있는데

해당 사진은 구글에서 가져온 오류 이미지

해당 오류가 되면서 Resolve와 빌드가 되지 않는다.

해당 오류를 수정하기 위해서는 Edit > Preferences... 에서 External Tools의 JDK 위치를 확인한 후 경로를 복사한다
(Copy Path)

윈도우 검색 창에 "시스템 환경 변수 편집" 검색 후

환경 변수에 들어가 아래 시스템 변수에 새로 만들기를 통해

변수 이름에는 "JAVA_HOME" 변수 값은 아래 복사한 경로를 붙혀넣고 재부팅하면 문제가 해결된다.

728x90
반응형
728x90
반응형

2022 이상 버전의 유니티를 열 때 나오는 에러

Restart Unity as a standard user를 클릭하면 계속 알림이 뜨고

I wish to continue at my own risk를 클릭하거나 X를 눌러 닫으면 실행이 된다.

하지만 콘솔창에

Unity is running with Administrator privileges, which is not supported. Unity executes scripts and binary libraries in your project that may originate from third party sources and potentially be harmful to your computer. Unity may also execute scripts and binary libraries that are still under development and not yet fully tested. Running Unity with Administrator privileges may lead to catastrophic consequences, including but not limited to accidental data loss, change of global system settings or even bricking your device.

이런 경고를 보내고 있는데 상당히 거슬린다.

 

해결 방법

윈도우 검색창에 "사용자 계정 컨트롤 설정" or "uac" 검색

해당 설정을 맨 위로 올려주고 재부팅해주면 문제가 해결된다.

참고 영상 : https://www.youtube.com/watch?v=ZG3FjmZKXxQ

728x90
반응형
728x90
반응형

캐릭터 클래스에 HP, MP를 설정

위젯 블루 프린트 프로그레스에 퍼센트를 바인딩 하여 사용

캐릭터 클래스 블루프린트에서 위젯 생성후 뷰포트에 출력
결과

728x90
반응형
728x90
반응형

C#에서 지원하는 Parse는 여러가지가 존재한다.
가장 대표적인 예시는 int->string, string->int 정도가 있는데
int->string은 ToString(), System.Convert.ToString()이 있고
string->int는 int.Parse(), int.TryParse()가 있다.
각각의 속도는 어떨까?

using System;

public class Ex : MonoBehaviour
{
    List<int> integers = new List<int>();
    List<string> strs = new List<string>();
    int LoopCount = 100000;

    void Start()
    {
        for(int i = 0; i < LoopCount; i++)
        {
            integers.Add(i);
            strs.Add(i.ToString());
        }
    }

    void Update()
    {
        for(int i = 0; i < LoopCount; i++)
        {
            string str_1 = integers[i].ToString();
            string str_2 = integers[i].System.Convert.ToString(integers[i]);
            int integer_1 = int.Parse(strs[i]);
            int integer_2;
            int.TryParse(strs[i], out integer_2);
        }
    }
}

속도를 보면 
int->string은 속도가 비슷하거나 뒤죽박죽 하기 때문에 입맛에 따라 쓰면 될 것 같다.
string->int의 경우 int.Parse가 1000회당 0.01ms 정도 느리다. 입맛에 따라 사용해도 되긴 하지만 안전한 코드 사용을 위해 int.TryParse를 사용하는 것을 권장

728x90
반응형
728x90
반응형

이런 질문을 받은 적이 있다.

"C#에서 string을 비교할 때 ==을 많이 사용하셨는데 ==을 많이 사용하신 이유가 무엇인가요?"

그냥 같다 라는 의미로 사용한거지 별 다른 이유가 없었는데 면접관분께서 좋은 이야기를 해주셨다.

"C#에서 string, int등 상수를 비교 할 때는 Equals()를 사용하는게 좋다. ==은 참조를 비교하는거고 Equals는 값을 비교하는 것이다."

Equals를 알고 있었지만 해당 내용에 대해서는 처음 듣는 이야기여서 하나 더 배웠다는 생각이 든다.

예시를 들자면

public class EX : MonoBehaviour
{

	string ex1 = "Hello";
    object ex2 = new string("Hello");
    private void Ex()
    {
        if (ex1 == ex2)
        {
            // 의도하지 않은 참조가 발생했다고 오류 발생
            // 참조가 다르기 때문에 해당 부분은 출력되지 않음
            Debug.Log("True ex1 If1");
        }

        if (ex1.Equals(ex2))
        {
            // 참조가 다르지만 값이 같기 때문에 해당 부분 출력
            Debug.Log("True ex1 If2");
        }
    }
    
	StringBuilder sbText1 = new StringBuilder("Hello");
	StringBuilder sbText2 = new StringBuilder("Hello");
    private void Ex2()
    {
    
    	if (sbText1 == sbText2)
		{
        	// 참조가 다르기 때문에 해당 부분은 출력되지 않음
	    	Debug.Log("True ex2 If1");
		}
        
		if (sbText1.Equals(sbText2))
		{
        	// 참조가 다르지만 값이 같기 때문에 해당 부분 출력
    		Debug.Log("True ex2 If2");
		}
    }
}

해당 부분에서 이렇게 나뉜다. 의도하지 않은 조건식을 만들 수 있기 때문에 상수인 값을 비교한다면 Equals를 사용해야 할 것 같다.

string 뿐만 아니라 int, float등 다양한 자료형도 똑같다.

728x90
반응형

'C#' 카테고리의 다른 글

[C#] Count와 Length  (0) 2023.11.13
728x90
반응형

1. 백터의 내적과 외적을 게임에서 사용하는 경우

내적의 활용 - 앞뒤 판별

플레이어의 정면 벡터(forward vector)와 플레이어가 적을 향하는 벡터를 내적하여 나온 스칼라 값이 양수이면 적이 플레이어 방향벡터와 같은 방향(앞)에 있고 음수이면 반대 방향(뒤)에 있음

내적의 활용 - 시야각 판별

플레이어의 시야각 a가 적을 향하는 정면 벡터에서 플레이어가 적을 향하는 벡터까지의 각이 2/a보다 작으면 시야 이내에 있는것을 알 수 있음

외적의 할용 - 좌우 판별

플레이어의 정면 벡터와 플레이어가 적을 향하는 벡터를 외적하여 나온 노말 벡터를 업 벡터와 내적한 스칼라 값이 양수이면 같은 방향에 있고 아니면 다른 방향에 있음

2. Quaternion과 Euler, 짐벌락

Euler : 우리가 흔히 알고있는 x,y,z 3개의 축을 기준으로 회전시키는 각도계

짐벌락 : 같은 방향으로 오브젝트의 두 회전 축이 겹치는 현상

Unity에서는 오일러 앵글이 X,Y,Z 순서대로 계산되고 각 축을 독립적으로 판단해서 짐벌락이 발생하면 한 축에 대해서는 계산이 불가능함 이러한 현상을 해결하기 위해 나온 것이 쿼터니언

Quaternion : x,y,z,w로 이루어져 있음 (w = 스칼라)

방향과 회전을 다 표현할 수 있다. 하지만 쿼터니언의 회전은 180보다 큰 값을 표현할 수 없음

3. 머터리얼

머터리얼은 게임 오브젝트의 렌더링 효과를 결정하는 속성을 가진 컴포넌트, 쉐이더와 텍스쳐를 조합하여 오브젝트의 색상, 질감, 광택 등을 제어할 수 있음

4. 프리팹

게임 오브젝트를 미리 만들어 놓고 필요할 때마다 인스턴스화하여 사용할 수 있도록 하는 기능

프로젝트에 저장되어 있으며 필요할 때마다 가져와 사용할 수 있음, 이를 통해 게임 오브젝트의 중복 생성을 줄이고 효율적으로 사용

5. 쉐이더

쉐이더는 그래픽 처리 유닛에서 사용되는 프로그램으로 렌더징 엔진에서 빛, 색상, 질감등의 시각적요소를 계산하는데 사용, 쉐이더를 사용하여 오브젝트의 머터리얼에 적용하여 시각적인 효과 구현

6. 빌드

게임을 실행 가능한 상태로 만드는 작업, 플랫폼별로 빌드하여 사용자에게 제공

7. 콜리더와 리지드바디의 차이

콜리더는 충돌 감지를 위한 컴포넌트, 리지드바디는 물리 엔진과 상호작용하기 위한 컴포넌트

콜리더는 오브젝트가 다른 오브젝트와 충돌하는 것을 감지하고 이에 대한 이벤트 발생, 리지드바디는 물리 엔진에서 오브젝트의 물리적인 움직임을 제어하며 콜리더와 함께 사용하여 오브젝트간 충돌 및 반응 구현

8. 코루틴 vs 인보크

코루틴 : 유니티에서 비동기 처리를 구현하는 기능으로 메서드 실행을 일시 중지하고, 일정 시간이 지난 후에 중지한 부분부터 다시 실행하는 기능, 단일 쓰레드 형식, 오브젝트가 비활성화 되면 호출되지 않음

인보크 : 오브젝트가 비활성화 상태여도 호출, 매개 변수로 넘겨준 시간 만큼 지연 호출

9. 레이 캐스트

광선을 쏘아 해당 위치에 대한 정보를 가져오는 기능

10. 애니메이션 애니메이터

애니메이션은 게임 오브젝트의 동작을 미리 만들어 놓은 애니메이션 클립으로 제어 하는 기능

애니메이터는 애니메이션 클립을 제어하는 기능

11. 생명 주기

주로 물어보는 것들 위주

Reset - Awake - OnEnable - Start - FixedUpdate - OnTrigger - OnCollision - OnMouse - Update - yield null - yield WaitForSeconds - LateUpdate - Scene rendering - OnGUI - OnApplicationPause - OnDisable - OnApplicationQuit - OnDestroy

12. FixedUpdate, Update, LateUpdate

Update : 스크립트가 enabled 상태일때 매 프레임 마다 호출, 물리 효과가 적용되지 않은 오브젝트의 움직임이나 타이머, 키입력에 사용

FixedUpdate : Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출, 물리 효과가 적용된 오브젝트를 조정할 때 사용

LateUpdate : 모든 Update함수가 호출된 후 마지막으로 호출, 주로 오브젝트를 따라가는 카메라에 사용

13. 드로우 콜

CPU가 GPU에 렌더링 하라고 명령을 보내는 것

14. Rect Transform 컴포넌트 Anchros,Pivot

Anchros : UI의 원점 위치를 정함

Pivot : UI의 기준점을 정함

15. 캔버스

Screen Space - Overlay : UI 요소들이 스크린 상에만 존재, 3D 오브젝트 위에 그려져 덮어짐

Screen Space - Camera : 3D 좌표 상에서 위치값을 가지게 됨, UI요소(캔버스)보다 앞에 오게 배치할수 있음, 파티클이 이에 해당

World Space : UI를 3D 오브젝트 취급, 회전값 위치값 다 가질수 있음, 바닥이나 표면같은 곳, 증강현실 UI

728x90
반응형

+ Recent posts