반응형

 

 [MenuItem("GameObject/FieldObject/CopyComponet (Ctrl+Alt+Shift+C) %#&c")]
    static void CopyComponent()
    {
        _copyObject = Selection.activeObject as GameObject;
    }

    [MenuItem("GameObject/FieldObject/PasteComponet (Ctrl+Alt+Shift+V) %#&v")]
    static void PasteComponet()
    {
        if (_copyObject == null)
        {
            Debug.LogError("복사된 오브젝트가 없습니다.");
            return;
        }

        Component[] componentList = _copyObject.GetComponents<Component>();

        GameObject obj = Selection.activeObject as GameObject;
        obj.name = _copyObject.name;
        for (int i = 0, count = componentList.Length; i < count; ++i)
        {
            Component targetObjectComponent = obj.GetComponent(componentList[i].GetType());
            UnityEditorInternal.ComponentUtility.CopyComponent(componentList[i]);
            if (targetObjectComponent != null)
            {
                UnityEditorInternal.ComponentUtility.PasteComponentValues(targetObjectComponent);
            }
            else
            {
                UnityEditorInternal.ComponentUtility.PasteComponentAsNew(obj);
            }
        }
    }
반응형
반응형

Unity 2018 버전 부터 프리팹모드 적용되 해당 프리팹만 따로 관리 할수 있는 Scene을 만들어 작업할수 있게 기능으 두었습니다.

 

unity 5 버전 unity 2017 버전 등 사용하다 프리팹모드 경험하면 좀 익숙지 않다 생각할수 있습니다.

 

겪엇던 문제로는 

1. 현재 사용하는 씬에서 프리팹을 하이라키에 끌어와 작업을 할때 프리팹내의 오브젝트 레이어 변경이나 오브젝트 삭제시 "Cannot Restructure Prefab Instance" 팝업이 뜨면서 오브젝트 삭제나 레이어 변경을 프리팹모드에서 강제로 할수 밖에 없는문제. => 너무 번거러움... 뭐 삭제하려고해도 프리팹모드 들어가서 삭제하고 Apply 하고 나와서 다시 작업하게됨...

 

2. UI 프리팹 경우 현재 사용하는 씬의 Canvas 값이랑 프리팹모드에 Canvas 값이랑 달라서  프리팹모드에서 UI 가 깨지는 문제 => 디테일하게 이미지 보면서 작업이 불가능함

 

 

 

두문제중 가장 짜증나는건 2번문제...

아래사진과같이... ㅠㅠ

 

 

 

 

 

 

 

하지만 최근알게된것이 프리팹모드 (프리팹씬) 을 자기가 커스텀하게 설정 할수 있다는겁니다.

 

아래 내용 Prefab Editing Environment 입니다

 

경로 : Edit - Project Setting - Editor 카테고리 - Prefab Editing Environments 

 

 - Regular Environment 는 일반 오브젝트 프리팹이 됫을경우 사용될 씬입니다 (ex. 보스, 캐릭터, 나무상자 등등)

 - UI Environment 는 UI 전반적인 적이 프리팹됫을경우 사용될 씬입니다 (ex. 로비UI, 팝업UI, 등등)

    Environment가 구분되는 기준은 제 생각엔 Transform 형태에 따라 달라지는거같습니다

    (RectTransform 과 Transfrom)

 

 

 

 

 

 

아래 사진과같이 UI 프리팹일때 사용될 씬을 넣습니다

 

 

 

 

 

 

이제 적용하고 UI프리팹을 열어 프리팹모드로 하게 되면 사용햇던 씬의 Canvas가 적용되어있다는 것을 확인할수 있습니다.

Scene 뷰의 UI가 깨지지 않는것도 확인할수 있죠~

 

 

 

 

이상 프리팹 에디터 환경의 Scene 변경하기 였습니다

 

반응형
반응형

 

Rendertexture 기능을 이용해 UI에 캐릭터 모델을 나타 내는걸 진행해보았습니다.

 

 

기존에는 canvas 에서 해당 UI씬 마다 필요 캐릭터모델을 로드하고 위치하게 했엇는데,

Rendertexture 를 사용하면 한 캐릭터모델만 로드하여 사용할수 잇어 클라이언트 측면에서 이점이 있는걸로 생각이 됩니다.

 

 

 

-사용방법

 

1. 프로젝트에 Create / Rendertexure 로 렌더텍스쳐 파일을 생성합니다.

 

 

 

 

 

 

 

 

2. Size를 설정합니다. 사이즈가 크면 클수록 화질이 선명하게 나옵니다.

 Render 될 오브젝트(캐릭터)가 크게 비추게 원하시면 1024/1024 정도 사이즈로 설정해두면 좋습니다.

사이즈 값은 2제곱수로 해야합니다 (ex. 256/256 , 512/512  , ...)

 

 

 

 

3. 씬내에 카메라를 생성합니다

 - 카메라 TargetTexture에 생성한 RenderTexture를 할당합니다.

 - 카메라에 CullingMask는 선택 유무 입니다. 캐릭터만 보이고 싶다하면 캐릭터에 설정한 layer를 선택하게 되면

   Render 될때에 캐릭터만 보이게 될것입니다.

 - 카메라 Projection 은 Orthographic으로 합니다. UI 에 캐릭터를 나타낼것이므로 원근감이 필요없어서 그렇습니다. 

   만약 Render 타입이 3D 형태 라면 원근감이 느껴지는 Perspective를 사용하세요

 

 

 

 

 

 

 

4. 해당 UI에 RawImage를 만듭니다. ( 씬내 우클릭 -> UI -> RawImage )

 - 생성된 RawImage 에 생성한 RenderTexure를 할당합니다.

 - RawImage 사이즈 (width,height)로 렌더될 사이즈를 결정해줍니다. 

   (RawImage 사이즈 가 작게 표시할경우 위 2번에 Rendertexture의 size 를 256/256 정도로 해줘도 좋습니다,

    하지만 RawImage 사이즈가 UI 전역에해당하는 크기이다 하면 size는 1024/1024 이상으로 잡아 줘야, Render 시

    캐릭터가 꺠지지 않게 보입니다)

 - RawImage 사이즈 설정하게 되면 그림의 초록 부분에 오브젝트(캐릭터)가 보이게 될것입니다.

 

 

 

 

 

5. 씬에 생성한 카메라 바라보는 방향에 캐릭터를 생성합니다.

 - play 를 하면 UI에 RawImage 부분에 캐릭터가 보이는것을 확인할수 있습니다.

반응형
반응형

 

 - 해당오브젝트 인스펙터에 버튼을 만들기 입니다.

   1. 에디터 스크립트 만들기
   2. 에디터 스크립트에 Editor 상속하고 오버라이드 함수 활용하기 
   3. 인스펙터에 보일 스크립트 만들기 

 

 

 

 

 

   1. 에디터 스크립트 만들기

 

프로젝트 폴더 아무곳에 ItemEffectTriggerEditor .cs 와같이 c# 스크립트를 만듭니다.

경로는 아무상관없습니다.

 

 

  2. 에디터 스크립트에 Editor 상속하고 오버라이드 함수 활용하기 

using UnityEditor;  //Editor 클래스 사용하기 위해 넣어줍니다.
using UnityEngine;

 

 

 

// 오브젝트 인스펙터에 활용하는 클래스 이름을 넣습니다 . ex) [CustomEditor(typeof(오브젝트넣을 스크립트 클래스))] 

[CustomEditor(typeof(ItemEffectTrigger))] 
public class ItemEffectTriggerEditor : Editor //Monobehaviour 대신 Editor를 넣습니다.
{
    

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

 

       //ItemEffectTrigger.cs 의 객체를 받아옵니다 => 이래야 버튼시 명령을 내릴수 잇습니다
        ItemEffectTrigger itemtrigger = (ItemEffectTrigger)target;

        EditorGUILayout.BeginHorizontal();  //BeginHorizontal() 이후 부터는 GUI 들이 가로로 생성됩니다.
        GUILayout.FlexibleSpace(); // 고정된 여백을 넣습니다. ( 버튼이 가운데 오기 위함)
        //버튼을 만듭니다 . GUILayout.Button("버튼이름" , 가로크기, 세로크기)

       if (GUILayout.Button("이펙트 실행", GUILayout.Width(120), GUILayout.Height(30))) 
        {

           //ItemEffectTrigger 클래스에서 버튼 누를시 해당 명령을 구현해줍니다.
            itemtrigger.Start_ItemEffect();
        }
        GUILayout.FlexibleSpace();  // 고정된 여백을 넣습니다.
        EditorGUILayout.EndHorizontal();  // 가로 생성 끝

    }
}

 

 

  3. 인스펙터에 보일 스크립트 만들기 

public class ItemEffectTrigger : MonoBehaviour
{
 


    public void Start_ItemEffect()
    {
        //구현내용
    }

 

}

 

 

 

 

 

-결과-

 

반응형
반응형

 

유니티 분석기능중 하나로 profiler 기능이 있는데요 프레임마다 cpu, gpu, memory 등등을 체크해주는 기능이죠
editor 상태에서 많이 쓰긴하는데 안드로이드 핸드폰 (모바일) 에서 Profiler 사용이 잘 안될떄가 잇더라구요 

 

여러번 시도하고 시행착오 끝에 되서 사용법을 올려봅니다.

 

Android 모바일 디바이스만 해당 되니 이점 유의하세요 

 

 

사용법 

 

1. 우선 APK 빌드을 하세요 , 이떄 Build Setting  > Development Build를 켠후 빌드 하세요!

 

 

 

2. ProjectSetting 에서 Packagename을 복사합니다

3. Command창을 열어 adb foward tcp:34999 localabstract:Unity-com.your.packageName

   입력후 엔터!  바로 "34999" 응답이 출력되면 연결완료!

 

4. Unity를 실행후 Profiler를 열어 아래사진처럼 AndroidPlayer(ADB@127.0.0.1:34999)를 선택,
  녹하(빨간점)을 눌러서 프로파일링이 되는지 확인.

  만약 안된다면 아래 특정포트 개방시켜줍니다 (5번 사항으로) 

 

 

 

5. "Window Defender 방화면" 에서 고급설정 으로 진입,

    아웃바운드규칙 에서 "새규칙" 를 클릭하여 아래 사진처럼 진행

 

 

7. 규치 추가 완료 하였으면 Unity 종료!

 

8. Command 창에 아래 명령 입력합니다 (디바이스가 연결중이던걸 끊는 행위)

   - adb kill-server

   - adb start-server

 

9. 다시 3번으로 이동해 진행합니다.

반응형
반응형

Unity  Hierarchy 에서 camera 생성시 기본적으로 아래와같이 camera /  GUI Layer / Flare Layer / Audio Listener  컴포넌트가 붙어 잇는걸 볼수가 있습니다.






 GUI Layer / Flare Layer / Audio Listener 가 궁금해서 알아보았습니다.



1. Flare Layer

우선 flare 가 무엇인지 찾아보았는데요 .

아래 사진과 같이 유성같이 퍼져나오는 빛을 의미합니다.


그래서 Flare Layer 는 아래와같은 빛의 표현을 하겠느냐라는 의미입니다.


게임 개발시 파티클을 추가하게 되면 카메라에 Flare layer 넣어주는게 좋겟죠 ??







2. GUI Layer


GUI Layer 컴포넌트는 유니티에 GUI 기능으로 나온 ui들을 카메라에 표현하겟냐는 컴포넌트입니다.


만약 카메라에 GUI Layer를 안넣는다면 GUI를 보실수 없습니다. GUI는 예로 아래와 같습니다.









3. Audio Listener


사운드 구현시 필요한 컴포넌트인데, 대부분 게임이 카메라기준으로 캐릭터및 오브젝트로 활용이 되어지다 보니 Camera 생성시 기본적으로 

 Audio Listener 컴포넌트가 붙는걸로 생각이 듭니다.


Audio Listener는 사람의 귀라고 생각하시며 되고, Audio Source 는 소리를 내는놈이라고 생각 하시면 됩니다. 사운드 구현시 Audio Listener와 Audio Source가 필요로 합니다.

Audio Listener은 한씬에 단 한개밖에 존재하지 못하며,  Audio Source 는 여러개가 존재해도 괜찮습니다.







이상입니다.

반응형

+ Recent posts