구글 플레이 콘솔에서 올릴때 유니티 프로젝트 세팅에서 Version 숫자 바꿨음에도 계속 이 메시지가 뜨면서 앱번들 안올라갈 때가 있다. 아주 빡치는데 해결책은 아래와 같다

 

Project Settings - Player 탭 - 안드로이드 아이콘 - Other settings 에서 쭉쭊 내리다보면 Identification - Version과 Bundle version Code가 있는데 둘다 바꿔보자.

 

    public static GameManager I { get; private set; }
    private void Awake()
    {
        if (I == null)
        {
            I = this;
            DontDestroyOnLoad(this.gameObject);
        }
        else
        	Destroy(this.gameObject);
        
    }

 

싱글톤 코드가 길면 복잡해서 최대한 짧게 씀. 

이동(doMove)나 회전(doRotate) 등 모든 Do 시리즈 tween에 적용가능함

 

보통 오브젝트를 이동시키고 Tween 의 onComplete() 를 람다함수로 해서 다음 단계를 진행하곤 했는데,

tween.WaitForCompletion() 의 존재를 알고나니 코루틴과 결합하여 거의 모든 움직임을 손쉽게 구현할수 있게 되었다.

 

적을 이동시킨 후 공격을 하게한다고 하면,

IEnumerator MoveAndAttack(){
	var tween = enemy.transform.DOMove(pos, 0.3f);
    yield return tween.WaitForCompletion();
    enemy.Attack();
}

public void ButtonClicked(){
	StartCoroutine(MoveAndAttack());
}

이렇게 원하는 포지션(pos)로 이동 tween 완료시까지 대기(WaitForCompletion) 후, 원하는 작업을 처리하도록 하면

코드가 아주 깔끔해지고 람다함수를 쓰면서 겪는 호출순서나 scope 문제 등 복잡한 문제를 겪을 필요도 없다.

아주 아주 삶의 질을 높이는 두트윈 활용법! WaitForCompletion() 를 애용하도록 하자.

 

다른사람 프로젝트 열고 패키지 매니저에서 시네머신 install을 함.

게임은 제대로 플레이되는데 vs상에서 시네머신 인식이 빨간줄 뜨는경우의 해결책임.

 

1. 비주얼 스튜디오를 닫는다.

2. 하이어라키에 virual camera 하나 생성한다(cinemachine 메뉴에서)

3. 생성한 virtual 카메라에 새 스크립트 하나 생성하고 더블클릭해서 연다.

4. using Cinemachine; 하면 문제없이 인식됨

5. 에러뜨던 스크립트에서도 빨간줄 사라진걸 확인(이후 버추얼 카메라와 위 생성한 스크립트 삭제해도 에러 없음)

 

원리는 모르겟는데 문제는 해결됨. 

 

public class LODChange : MonoBehaviour
{
    [MenuItem("Component/LOD/Set Default LOD Range", false, 0)]
    static void DoSetDefaultLODRange()
    {
        var list = Selection.GetFiltered<GameObject>(SelectionMode.TopLevel);
        foreach (var go in list)
        {
            var d = go.GetComponent<LODGroup>();
            if (null != d)
            {
                var lods = d.GetLODs();
                lods[0].screenRelativeTransitionHeight = 0.05f;
                lods[1].screenRelativeTransitionHeight = 0.01f;
                d.SetLODs(lods);
                PrefabUtility.RecordPrefabInstancePropertyModifications(d);
            }
        }
    }
}

 

일단 소스코드를 보자. 코드는 new script로 새 스크립트 만든다음 붙여넣기 하면 된다.

컴파일하면 유니티 에디터 위에 Component/LOD/Set ~ 라는 메뉴가 생긴다. [MenuItem()] 에서 보이는 것처럼 말이다.

내용을 대충보면 Selection.Getfilterd 이므로 하이어라키에서 선택된 놈들 중 GameObject인걸 가져오는데 Toplevel 즉 자식은 제외하고 부모만 가져오겠다는걸로 보인다.

foreach 문을 돌면서 가져온 gameObject의 원하는 컴포넌트를 원하는 대로 수정해서 프리팹이면 수정내역을 저장하겠다 이런 말인것 같다. 

 

사용법: 바꾸고싶은 게임오브젝트를 다중선택 한 후 메뉴를 클릭하면 된다.

 

아주 간단한 코드지만, 아주 많은 gameObject를 한번에 바꾸고싶을때 일일이 노가다하지 않아도 되어 상당히 유용하게 쓰일수 있겠다.

 

https://forum.unity.com/threads/editing-multiple-lod-prefabs-at-once.257156/

 

 

 

3d텍스트메쉬프로 컴포넌트를 생성할때마다 제목의 메시지가 자꾸 뜬다.

위의 F 모양 아이콘이 폰트애셋 (.asset 확장자) 인데 이놈들이 밑줄_(underLine)을 포함하고 있지 않다는 건데...

 

그냥 폰트에셋을 다시 만드는게 좋다.

 

유니티 - window - TextMeshPro - font asset creator 클릭

 

위처럼 필요에 따라 대충 세팅. 영어와 숫자만 쓸거면 ASCII 문자셋으로 하고 렌더모드는 화질과 관련있는듯.. 직접 테스트해볼 것 (참고: 아스키 코드에도 밑줄underline이 포함되어 있다)

Generate font atlas 클릭 - Save as - 원하는 이름 정하고 저장

 

폰트에셋 만드는 법을 모르면 구글링으로 간단하게 알아보고 해도 좋다

 

빨간네모처럼 내가만든 폰트에셋을 textmeshpro 오브젝트 안에 넣어주기

 

결과인데 위처럼 나와서 기존의 검은 outline 이 사라짐. 고쳐보자

TMP 적용 오브젝트 클릭 - 아래부분에 머티리얼 - Shader 부분을 빨간 네모처럼 Mobile 경로안의 distance Field로 바꿔준다 (기본 폰트에셋에 이거였는데 새로 생성하면 mobile 경로가 빠지더라. 이유는 모름)

 

그럼 outline 체크 활성화됨 - 체크해주고 Face와 Outline 세팅을 네모같이 기본에셋의 수치로 맞춰주면 검은 테두리 복구 성공!

 

 

별거 아닌데 검색해도 안나와서 짜증.. 나던 찰나에 아래블로그에서 도움받아 해결

이렇게 폰트 만들기에도 익숙해지고 하는거지 뭐

 

https://www.create-forever.games/the-character-used-for-underline-is-not-available-in-font-asset/

 

The character used for Underline is not available in font asset [FONTNAME]. | Unity Indies

例えば数字だけのフォントを作成し、それを使用するとこんな警告が出ることがあります。 The character used for Underline is not available in font asset [FONTNAME]. この警告を消したい場合、2通りの方法

www.create-forever.games

 

 

유니티는 피벗 회전 처리하기가 까다로운것 같다.

캐주얼 게임에 쓰일법한 상자 굴리기는 과연 어떻게 만드는걸까?

 

부모 오브젝트를 이용한 피벗회전을 이용하면 되지만, 90도 한번만 굴리는게 아닌

지속적으로 굴리는건 어떻게 할까 궁금해져서 구현해봤다.

 

자식 cube의 원하는 방향의 아랫쪽 모서리에 새로운 gameobject 를 만들어 위치시키고 자식cube의 부모로 setParent() 해준다. 그리고 Dotween으로 부모를 굴려주면 끝. 그리고 항상 기존의 피벗인 부모는 삭제시킨다.

깔끔하게 해결되었다.

 

https://github.com/nectar3/CubeRotateTurn

 

GitHub - nectar3/CubeRotateTurn: d

d. Contribute to nectar3/CubeRotateTurn development by creating an account on GitHub.

github.com

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;


public class Rotation : MonoBehaviour
{
    public float rotSpeed = 1f;

    private Transform parent;
    float cubeHalf = 0.5f;

    bool turning = false;

    private void Start()
    {
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.D))
        {
            TurnToX(1);
        }
        else if (Input.GetKeyDown(KeyCode.A))
        {
            TurnToX(-1);
        }
        else if (Input.GetKeyDown(KeyCode.W))
        {
            TurnToZ(1);
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            TurnToZ(-1);
        }
    }

    void TurnToX(int right)
    {
        if (turning) return;
        turning = true;
        DestroyParent();
        GameObject go = new GameObject("Pivot_parent");
        parent = go.transform;
        parent.position = new Vector3(transform.position.x + cubeHalf * right, transform.position.y + -cubeHalf, transform.position.z);
        this.transform.SetParent(parent);
        parent.DORotate(new Vector3(0f, 0f, -90f * right), 0.3f)
            .SetEase(Ease.Linear)
            .OnComplete(() => turning = false);
    }
    void TurnToZ(int forward)
    {
        if (turning) return;
        turning = true;
        DestroyParent();
        GameObject go = new GameObject("Pivot_parent");
        parent = go.transform;
        parent.position = new Vector3(transform.position.x, transform.position.y + -cubeHalf, transform.position.z + cubeHalf * forward);
        this.transform.SetParent(parent);
        parent.DORotate(new Vector3(90f * forward, 0f, 0f), 0.3f)
            .SetEase(Ease.Linear)
            .OnComplete(() => turning = false);
    }

    void DestroyParent()
    {
        if (parent)
        {
            this.transform.SetParent(null);
            Destroy(parent.gameObject);
        }
    }
}

 

 

 

unity

 

이 미친 두트윈 하.. 

 

onComplete 을 OnComplete 으로 바꾸면 해결된다.

 

대소문자땜에 이 고생 해야겠니? 

 

 

 

https://www.youtube.com/watch?v=Mmb-j-Vg2Qs 

 

 

5min 게임즈의 brickscape를 보고 따라해봤다. 콜라이더 충돌처리하는것부터 회전하는것까지 전부 어려웠으나, 매일 조금씩이나마 진행시켜 대충 완성했다. 

 

아쉬운 점

raytracing을 box로 안하고 직선으로만 해서 겹치는게 처리 안될듯..

블럭을 일일이 수작업으로 배치해야 한다는점.

정수단위 위치로 고정이 안된다는점

블럭 옮길때 카메라가 살짝 움직이는 것(귀찮아서 안고침)

 

만드는 과정에서 자꾸 막혀서 짜증이 났지만 완성 후 bloom 맥이니까 때깔이 좋아서 만족스럽다.

 

 

 

 

 

 

https://github.com/nectar3/Brickscape_clone

 

GitHub - nectar3/Brickscape_clone

Contribute to nectar3/Brickscape_clone development by creating an account on GitHub.

github.com

 

 

VS2019 기준이지만 이후 버전도 같은 기능이 있으므로 비슷하게 찾아서 하면됨

 

매번 Debug.log() 쓰는데 신물이 나셨다고요? 

존나 많이쓰는데 유니티놈들은 이거하나 심플하게 못만들어서 화나십니까?

vs code는 있는데 vs community 는 지원 안하는거 같아서 억울하십니까?

 

여기 해결책이 있습니다!

 

1. 해당 경로에 첨부된 스니펫 파일을 넣습니다( 유저마다 다를수 있음)

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC#\Snippets\1042\Visual C#

 

2. vs2019 도구->코드조각 관리자(영어로는 snippets 어쩌고) -> 가져오기 해서 위 폴더의 스니펫을 추가해줍니다

 

3. 에디터로 돌아와서 lg 쓰고 탭 두번 누르면 짜자잔~ 인생 존나 편해지는 소리 들리시나요? 축하드립니다.

 

* 추가: snippet 파일을 메모장으로 까보면 <header> 아래 <Shortcut> 부분 있죠? 그거 원하는대로 바꾸시면 단축어 변경됩니다! lg 말고 꼴리는 대로 넣으세요!

 

***추가:  윈도우 권한이 없어서 스니펫 파일 수정이 안되는 경우

- 파일을 권한없는 곳으로 복사(ex 바탕화면) 하고 수정한 다음, vs 스니펫 경로로 복붙하면 된다.

 

debuglog.snippet
0.00MB

 

 

 

 

참조: http://ekhart.pl/index.php/2017/06/26/visual-studio-unity-debug-log-snippet/

IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerDownHandler

등을 상속받은 후 OnDrag 등 메서드를 구현해도 오브젝트 클릭시 호출이안되는 경우가 있다.

 

 

1. 메인카메라에 Physics Raycaster 컴포넌트를 추가하면 된다.
2. 각 GameObject엔 콜라이더가 있어야한다. 

이유는 모르겠지만 잘 호출된다. UI에 쓴 경우는 Physics Raycaster 없이도 잘 호출되지만 GameObject에 쓰는경우는 추가해야 하는듯.

 

메인카메라에 컴포넌트 추가

 

 

마우스 드래그에 따라 오브젝트 움직이는 코드

Candy Cruch sage clone project for practice

 

https://www.youtube.com/watch?v=m5Uq20I8Q5o 

 

https://github.com/nectar3/CandyCrush1

 

GitHub - nectar3/CandyCrush1: dd

dd. Contribute to nectar3/CandyCrush1 development by creating an account on GitHub.

github.com

 

아래 블로그를 참고하여 테트리스보다는 단순한 방식으로 구현.

캔디 내리는 코드(FillBlank() ) 는 블로그와 다른 방식으로 구현함

 

참고: https://gamedevelopertips.com/create-candy-crush-clone/

 

candy sprites: https://www.nicepng.com/ourpic/u2r5r5r5t4a9t4o0_download-candy-crush-saga-sprites-clipart-candy-crush/

 

 

vs2019, vs2022 둘다 적용됨

 

깃헙에 푸쉬했을때나, 유니티 인스펙터창(inspector) 에서 비주얼 스튜디오로 작성한 한글주석이 깨지는 경우가 있다.

 

이때 루트 디렉토리(.sln 파일 있는곳)에 .editorconfig 라는 이름의 파일을 만든후 본문을 아래와 같이 해주고 저장.

 

인코딩이 utf-8으로 지정된다. 이후 꼭 한번씩 해당 스크립트(.cs)를 변경 후 저장해야 적용된다.

본문에 스페이스바 한번 누르고 저장후 유니티 컴파일 한번 해주면 한글이 잘 뜨는걸 볼수있다.

 

[*]
charset = utf-8-bom

 

메모장에 붙여넣고 저장- 파일형식- 모든파일- 파일명 .editorconfig으로한 후 저장. 위의 루트 디렉토리에 배치하면 vs2019 에서 자동인식하여 확인창이 뜨는데 예 누르면 된다. 2022는 따로 확인창이 안뜨지만 자동으로 되는듯?

 

 

 

https://www.youtube.com/watch?v=wpvUaMrf1CI 

https://github.com/nectar3/Tetris1

 

GitHub - nectar3/Tetris1: dd

dd. Contribute to nectar3/Tetris1 development by creating an account on GitHub.

github.com

 

 

예전에 게임개발자라면 '이정돈 만들줄 알아야지'라는 말을 듣고 섣불리 도전했다가 멘붕와서 포기했던 테트리스..

Grid 관리도 해야하고 의외로 신경써야할 규칙들이 많아서(사실 실력부족) 쉽진 않다고 느낀다.

이번 도전에서도 중간에 걍 포기할까 하는 위기가 한차례 있었지만 빡침을 가라앉히고 작은 기능에 집중하면서 진행하다보니 결국 완성하게 되었다.

 

Block 은  테트리미노. Dot 은 테트리미노를 구성하는 정사각형으로 두고 구조를 만들었다.

블럭 회전은 block의 child인 dot 들의 local position 에 쿼터니언 회전을 주어서 해결했다(구글링이 살렸다!) 

 

아래처럼 vector3 에 해당 쿼터니언을 곱하면 0,0 기준으로 회전이 된다.

var loc = Quaternion.Euler(0, 0, -90) * dots[i].transform.localPosition;

 

항상 느끼지만 Grid가 들어오는 순간 복잡해진다ㅜㅠ

어쨌든 완성하고나니 뿌듯하다. 

 

 

 

모바일 인기게임 Lumbercraft 연습용 카피

유료 애셋이 들어가 github은 비공개로 했음

 

https://www.youtube.com/watch?v=EofjZD8gpCU 

 

 

HP bar 참조

https://www.youtube.com/watch?v=MO_XEHGzDLM&t=1367s 

 

 

 

에디터상에서 어떤 오브젝트를 클릭하면 최상단 부모가 선택되는게 아니라

팔, 다리, 몸통같은 자식오브젝트만 선택되어 매우불편할 때가 있다. Hierarchy 하위목록 열린거 닫고 다시 부모 선택하고 노가다 반복하다가 찾아보니 좋은 수단이 있더라.

 

1. 부모 오브젝트에 스크립트를 추가하거나 기존 스크립트를 연다
2. class 위에 [SelectionBase] 추가해준다.
3. 끝

 

에디터창에서 선택해보면 부모만 선택되는걸 알수있다.

 

마찬가지로 한 오브젝트의 특정 child가 우선선택되게 하고싶을 때도, 그 child 객체의 스크립트에 selectionBase 추가해주면 된다.

 

 

 

 

 

https://www.youtube.com/watch?v=aWn45mnJ98E&t=175s 

 

 

 

https://github.com/nectar3/RhythmGO_clone/tree/main

 

GitHub - nectar3/RhythmGO_clone: RhythmGO_clone

RhythmGO_clone. Contribute to nectar3/RhythmGO_clone development by creating an account on GitHub.

github.com

 

 

한때 엄청난 인기를 끌었던 캐주얼 게임 Pop the lock을 연습삼아 만들어봄

아래에 깃헙 참조

 

 

https://github.com/nectar3/Pop_the_lock_clone/tree/main

 

GitHub - nectar3/Pop_the_lock_clone: Pop_the_lock_clone

Pop_the_lock_clone. Contribute to nectar3/Pop_the_lock_clone development by creating an account on GitHub.

github.com

 

 

 

https://github.com/nectar3/flappyBird

 

GitHub - nectar3/flappyBird: flappyBird copy for training

flappyBird copy for training. Contribute to nectar3/flappyBird development by creating an account on GitHub.

github.com

 

flappy bird 연습용으로 만든 전체 프로젝트와 애셋

 

hole Y 위치를 랜덤하게 정하고 위아래 파이프 위치를 랜덤 간격(gap)으로 지정해주는 방식

 

 

사용 애셋 

 

https://github.com/samuelcust/flappy-bird-assets

 

GitHub - samuelcust/flappy-bird-assets: Assets to develop the Flappy Bird Game

Assets to develop the Flappy Bird Game. Contribute to samuelcust/flappy-bird-assets development by creating an account on GitHub.

github.com

 

 

https://github.com/nectar3/Anim_state_monsterLoveFSM

 

GitHub - nectar3/Anim_state_monsterLoveFSM: 유튜버 Dev GomDol님 튜토리얼을 MonsterLove FSM 으로 변환한 유니티

유튜버 Dev GomDol님 튜토리얼을 MonsterLove FSM 으로 변환한 유니티 프로젝트(unity) - GitHub - nectar3/Anim_state_monsterLoveFSM: 유튜버 Dev GomDol님 튜토리얼을 MonsterLove FSM 으로 변환한 유니티 프로젝트(unity)

github.com

 

 

유튜버 Dev GomDol님 튜토리얼을 MonsterLove FSM 으로 변환한 유니티 프로젝트

Dev GomDol유튜브 https://www.youtube.com/watch?v=MowE3moQ_Cw

Monster love FSM(Simple Finite State Machine for Unity (C#)) https://github.com/thefuntastic/Unity3d-Finite-State-Machine

 

 

애니메이션 state 스크립트를 별도로 만들지 않고 enemy 스크립트 하나에 상태를 전부 넣을 수 있어 심플해짐

 

 

 

 

웹브라우저가 포함된 Form을 스레드 안에서 Show() 하면 아래 예외가 발생한다.

 

System.Threading.ThreadStateException: '현재 스레드가 단일 스레드 아파트에 없으므로 ActiveX 컨트롤.. 어쩌고

 

 

이때는 f.Show() 구문을 Invoke()로 감싸준다.

 

this.Invoke((MethodInvoker)(() => 
{ 
	FormTest f = new FormTest(); 
	f.Show(); 
}));	

여기서 this는 부모폼을 가리킴.

 

 

분명히 잘 넣어두고

 

Environment.getExternalStorageDirectory().getAbsolutePath();

 

해서 sd카드 경로도 구했는데 읽기가 안되고,

 

File.exist() 해도 false만 리턴되어 당황하셨죠?

 

저도 그랬습니다! 홍미노트2인가 4인데(뭔지도 안궁금) 이런 현상 나타나길래

 

삽질하다가 그냥 내부저장소 폴더명으로 exists() 해보니 true -_-;;;

 

그냥 내부저장소로 이용하십쇼.

 

폰 문제인지 안드로이드 보안문제인지 몰라도 이렇습니다.

 

더이상의 삽질은 naver.

 

우리가 직접 올린 이미지가 아닌 다른 사이트에 올라있는 이미지를 내 페이지에 링크형식으로 띄우려 할때 안뜨는 경우가 있다. 해당 이미지를 가진 사이트에서 다른 사이트로부터의 과도한 호출을 막기 위해 리퍼러를 감시하기 때문이다.

 

이때는 HTML 문서 상단 메타정보에 아래 한줄을 추가해주어 리퍼러 정보를 제거하면 된다.

 

<meta name="referrer" content="no-referrer" />

 

 

출처

 https://stackoverflow.com/questions/6817595/remove-http-referer

 

 

 

"<% 객체 %>" 부분을

<% JSON.stringify(list) %>로 변경해보세요

- 페북

 

 

js 파일에서 ejs파일로 객체를 전달하고 <script>태그 안에서 출력해보면 [Object object]또는 그것의 앞부분인 '['만 출력된다. 이때 전달받은 값을 JSON.stringify()로 파싱하여 사용하면 된다.

 

 

[.js 파일]

 

 

[ .ejs 파일의 <script> 내부]

 

 

 

 

참고

https://stackoverflow.com/questions/11151632/passing-an-object-to-client-in-node-express-ejs

 

서버 초보입니다 ㅠㅠ 

간단한 질문인데요, Putty로 우분투 서버에 접속해서 node.js 켜놓고 접속까지 확인했는데, Putty 끄면 자동으로 세션 종료되면서 서버 프로세스도 꺼지더라구요. 접속 컴퓨터 하루종일 켜놓을수도 없고..


테스트 끝나면 곧 서비스하려고 하는데요.

Putty 끄고도 계속 서버 돌아가게 하려면 어떻게 해야하나요?


구글링 해봐도 putty 자리비웠을때 핑날려서 유지하는 거 말고는 안나오네요.


답변 부탁드립니다!


--------------


[Solution]


조언 중 두가지 방법을 시도했고 둘다 되는걸 확인했습니다~!


* Pm2 이용하는 방법


1. npm install pm2 -g 로 모듈설치

2. express 프로젝트 폴더로 이동

3. pm2 start npm -- start 로 서버 시작

4. pm2 list 로 실행중인 프로세스 확인


* Forever 모듈이용하는 방법


1. npm install forever 로 설치 후

2. express 프로젝트폴더로 가서 

3. forever start -c "npm start" ./

(-c 옵션: 커맨드 ./ : 현재경로)




기존 CUDA 지우고 9.0 버전으로 다시깔면 해결!



아주아주 간단하다.

버전이 안맞는거다. cudart64_90 파일이 필요한데, 9.0버전이 아닌 CUDA가 깔려있다면 dll 파일명/경로가 다르므로 에러 발생.


예를들어 9.2 버전을 깔았으면 <cuda경로>/v9.2/cudart64_92.dll 으로 있기때문에 경로에도 안잡히고 dll도 없다고 나온다.


즉, 기존꺼 지우고 9.0 버전으로 다시깔면 해결!



엔디비아 쿠다 다운로드 페이지에서 레거시 릴리즈 클릭!




cuDNN도 마찬가지로 for 9.0 으로 다운!







<해결책 1>


1. window 서비스에서 microsoft windows update 를 중단한다 


2. C:\windows\SoftwareDistribution 내의 모든 폴더와 파일을 삭제한다


3. 컴퓨터 재시작


4. 다시 업데이트 해보면 된다.



# SoftwareDistribution이 폴더 안에 업데이트 파일이 임시로 저장되는데 뭔가 문제가 발생해서 안되는 경우, 다 삭제하면 다시 다운로드하여 정상적으로 업데이트할 수 있다.



<해결책 2>


안티바이러스(백신)의 실시간 감시를 꺼놓고 해본다.

- 종종 충돌이 일어난다고 한다.



<해결책 3>


1. 시작-실행or 왼쪽 밑 입력창에 msconfig입력 - 서비스 탭


2.  왼쪽 아래 '모든 microsoft 서비스 숨기기' 체크


3. 모두 사용 안함 버튼 클릭


4. 재부팅


5. 업데이트


6. 업데이트 후 아까 꺼두었던 서비스 재실행





< 종합 >


최종적으로 완벽하게 하려면 해결책 1,2,3 을 모두 사용한다.

soft-dist 폴더 삭제하고 백신 꺼놓고 서비스 꺼놓고 재부팅 후 업데이트하면 된다. 



본인은 셋 다 사용해 해결했지만, 해결책1이나 2가 주로 먹혀들었다고 생각한다.


기분 좋게 업데이트하여 보안을 튼튼히 했으면 하는 바램이다.


-끝-






raywenderlich 의  uGUI 튜토리얼을 따라하던 중, 

UI 카테고리에서 주로 쓰이는 Rect Transform의 여러가지 수치에 대해 알게 된 걸 정리해본다.



stretch preset에서 Left Top Right Bottom은 부모의 영역에서 패딩(여백, padding)을 의미한다.

일반 preset에서는 Pos로 부모 대비 위치를 정하고 Width or Height로 자신의 크기를 고정한다.


Stretch는 부모의 크기에 여백을 설정한 것이다. 

So, 부모 크기가 변하면 자기 자신의 크기도 변한다. 그래서 stretch.


일반 preset은 부모 대비 위치만 정해놓고 너비or 높이를 고정한 것. 

So, 부모 크기가 변해도 자기의 크기는 고정되며, 위치만 변한다.




아래 스샷은 하얀색 반투명한 패널이 부모(배경 이미지)의 영역 대비 Left, Right 에 168의 여백으로

크기가 정해진 모습이다.



이 상태에서 앵커 프리셋을 눌러 아래 이미지 처럼 좌우 영역의 앵커를

 stretch에서 center로 변경하면, 



유니티가 자동으로 값을 변경해준다. 하얀 반투명 패널의 사이즈는 그대로지만,

부모의 중심을 기준으로 하되, 너비(Width) 가 800으로 고정된다. 







스크립트를 visual studio로 편집하던 중, 갑자기 유니티 관련 자동완성(코드 제안)이 뜨지 않아 당황.

GameObject도 안뜨는 상황.


이유는 현재 vs 프로젝트에 포함되지 않은 스크립트를 편집하고 있기 때문이다.


Assets 폴더가 있는 유니티 프로젝트 경로에 csproj 파일이 몇개 있다.

내 프로젝트명이 itweenTest 라고 하면,


itweenTest.CSharp.csproj

itweenTest.CSharp.Plugins.csproj


이렇게 두개의 vs프로젝트가 한 솔루션 안에 있게 된다.

두번째 Plugins는 애셋스토어에서 받은 itween이 추가되면서 생성된 것이다.

대개 프로젝트를 생성하고 제일 먼저 스토어 플러그인을 불러온 경우,

현재 프로젝트가 플러그인 프로젝트로 바뀌는 듯 하다.

일반적으로 유니티 프로젝트에서 생성한 스크립트는 <플젝명.CSharp.csproj>에 포함되어있다.

다른 프로젝트의 스크립트는 자동완성이 안뜨는거다.



위의 vs 솔루션탐색기를 보면, 프로젝트가 itween - .CSharp.Plugins 로 되어있는게 보인다.

그리고 아래에 내가 생성한 Scripts 폴더는 당연히 제외된다.



<해결책>


내가 생성한 스크립트는 <플젝명.CSharp.csproj>을 열어서 편집해야 자동완성이 제대로 뜬다.



추가 문제

일단 수동으로 프로젝트를 열어서 코딩하면 되긴 하는데 귀찮은 문제가..


유니티 에디터에서 내가 추가한 스크립트를 더블 클릭하여 vs를 열면,

여전히 Plugins 프로젝트가 열린다. 유니티 프로젝트 설정상에 문제가 있는것 같은데,

아시는 분 댓글 부탁드립니다.






RigidBody가 달린 GameObject를 이동하는 방법엔 세 종류가 있다.


1. transform.position


2. RigidBody.position


3. RigidBody.MovePosition()



# 일단 transform.position과 RigidBody.position는 순간이동 식으로 위치를 이동시킨다.

- 성능은 RigidBody.position이 좋다고 한다.



# RigidBody.MovePosition()은, 

1. 이동 출발 지점과 끝지점을 직선으로 연결한 경로를 매우 빠르게 이동한다.

2. 중간에 다른 rigidbody가 있을 경우 밀어내는 등의 물리처리를 한다.






출처 : 

http://answers.unity3d.com/questions/789843/rigidbody-vs-transform.html

http://docs.unity3d.com/ScriptReference/Rigidbody-position.html

+ Recent posts