유니티와 비쥬얼 스튜디오 연동 

: 모노디벨로퍼를 비쥬얼 스튜디오로 대체


아래 링크에서 현재 설치된 비쥬얼 스튜디오 버전과 일치하는 툴을 다운로드 한다.

Visual Studio 2013

Visual Studio 2015


1. 설치 후 유니티로 이동을 하면 아래와 같이 Assets 폴더, Import Package -> 'Visual Studio 2013 Tools' 가 설치 된 것이 보인다.


2. 선택을 하게 되면 아래와 같은 패키지를 임포트 하겠다는 창이 뜬다. 

임포트를 선택.


3. 임포트 후 프로젝트를 보면 'UnityVS' 폴더에 몇가지 파일이 아래와 같이 보인다.


4. 이후 스크립트 파일을 더블클릭하게 되면 비쥬얼 스튜디오와 연동 되어서 열리게 된다.

간혹, *.sln 파일이 없다거나 스크립트 파일의 위치를 이동하게 되면, sync. 가 잘 맞지 않는 경우가 있는데, 이경우에는 메뉴에 있는 Visual Studio Tools 에서  'Generate Project Files' 를 실행하게 되면, 프로젝트 구성을 다시 생성하게 되어 문제 없이 동작 한다.



Awake()

- Start() 함수 호출 전에 호출 됨

- 실행시 한번만 호출

- 주로 변수 초기화에 사용

- Coroutine 사용 불가


Start()

- Update() 호출 전 한번만 호출

- 스크립트가 활성화돼 있어야 실행

- 다른 스크립트의 Awake() 가 모두 실행 후 실행


Update()


LateUpdate()

-


FixedUpdate()

-


OnEnable()

-


OnDisable()

-


OnGUI()

-



1. 텍스쳐를 프로젝트로 임포트 

2. 프로젝트뷰의 텍스쳐를 Scene 뷰의 모델로 드래그 앤 드롭한다.

3. 해당 텍스쳐가 있는 폴더에 자동으로 Materials 라는 폴더가 생성된다.



머티리얼??

- 텍스쳐는 3D 모델에 적용하기 위한 이미지 파일로 머티리얼이라는 매개체가 필요

- 머티리얼은 3D 모델에 적용할 텍스쳐의 속성을 설정하는 역할

유니티에서 게임을 플레이하는 경우, scene 뷰상에서 선택한 오브젝트를 따라가면서 보고 싶은 경우가 있다.

이경우에 해당 오브젝트를 선택 후 'SHIFT + F' 를 해주게 되면, 플레이하는 동안 scene 에서 해당 오브젝트를 따라가면서 보여 주게 된다.

1. Unity 용 플러그인 다운로드

https://github.com/googleads/googleads-mobile-plugins/releases


2. Unity Project 창에 'GoogleMobileAds' 폴더와 'Plugings' 폴더가 생성됨


3. 작업하고자 하는 Scene 에서 빈 게임오브젝트를 하나 생성 - ex) AdmobManager


4. 해당 오브젝트에 스크립트를 추가


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

[AdmobLoad.cs]

using UnityEngine;

using System.Collections;


using GoogleMobileAds.Api;  // 추가


public class AdmobLoad : MonoBehaviour {


    BannerView bannerView;

    InterstitialAd interstitial;


// Use this for initialization

void Start () {

        bannerView = new BannerView("ca-app-pub-xxxxxxxxxxxxxxxxx (각자의 광고 ID)", AdSize.Banner, AdPosition.Bottom);

        AdRequest adRequest = new AdRequest.Builder().Build();

        bannerView.LoadAd(adRequest); // 배너광고

        interstitial.LoadAd(adRequest); // 전면광고

}

// Update is called once per frame

    //void Update () {

        

    //}


    public void ShowInterstitialAd() // 전면광고 호출 함수

    {

        if(interstitial.IsLoaded() == true)

        {

            interstitial.Show();

        }

    }

}


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

unity에서 git, svn 등 형상관리 툴로 관리 해야 할 폴더


- Assets

- ProjectSettings


만 관리 하면 됨.



환경 : Unity 5.0.0f4 -

유니티에서 안드로이드용 어플리케이션을 만든 뒤 종료처리를 위해 


if(Input.GetKeyDown(KeyCode.Escape))

{

Application.Quit();

}


위 코드를 수행할 경우 종료된뒤, 앱을 재실행 하는 경우 실행이 되지 않고 폰이 멈추는 현상이 있었다.


종료시 로그를 자세히 확인해 본 결과 아래와 같은 오류 메시지가 출력됨을 확인 할 수 있엇다.


RenderTexture warning: Destroying active render texture. Switching to main context.


유니티-안드로이드 종료 처리 및 위 로그 메시지를 가지고 구글링을 해보니 여러가지 방법들이 검색이 되어졌다. 


(*검색해본 결과들...)

- 안드로이드의 유니티 플레이어의 액티비티를 생성하여 받아온뒤 'finish()'

- 유니티 버전 패치

- 기타 스택오버플로우에서 검색된 방법들...


검색한 내용들을 적용해보아도 수정이 되지 않아 빌드 옵션을 바꾸어 보던중 'Other Settings' -> Multithreaded Rendering 옵션을 체크 해제한뒤 빌드&런 해보니 정상적으로 실행이 된뒤 종료를 해본결과 RenderTexture warning 이 보이지 않았으며, 재실행도 정상적으로 되었다.


아직 정확한 원인을 파악하진 못하였으나, 우선 문제는 해결된 셈이다.

원인 파악후 포스팅 수정 예정....

using UnityEngine;

using System.Collections;


public class FollowCam : MonoBehaviour {


    public Transform target;            // 추적할 타겟 게임오브젝트의 Transform 변수.

    public float dist = 10.0f;          // 카메라와의 일정 거리.

    public float height = 5.0f;         // 카메라와의 높이 설정.

    public float dampRotate = 5.0f;     // 부드러운 회전을 위한 변수.


    private Transform tr;               // 카메라 자신의 Transform 변수.



// Use this for initialization

void Start () {

        tr = GetComponent<Transform>(); // 카메라 자신의 Transform 을 할당.

}


    

    /* 

     * 추적할 타겟의 이동이 종료된 이후에 카메라가 추적하기 위해 LateUpdate() 사용.

     */

    void LateUpdate()

    {

        // 카메라 Y축을 타겟의 Y축 회전각도로 부드럽게 회전.

        // Mathf.LerpAngle(a,b,t) : t시간동안 a부터 b까지 변경되는 각도.

        float currYAngle = Mathf.LerpAngle(tr.eulerAngles.y, target.eulerAngles.y, dampRotate * Time.deltaTime);


        // 쿼터니언 데이터 타입으로 변환

        Quaternion rot = Quaternion.Euler(0, currYAngle, 0);


        // 카메라의 위치를 타겟이 회전한 각도만큼 회전한 이후, dist만큼 뒤쪽으로 배치하고 height 만큼 위로 올림.

        tr.position = target.position - (rot * Vector3.forward * dist) + (Vector3.up * height);


        // 카메라가 타겟 게임 오브젝트를 바라보게 설정.

        tr.LookAt(target);

    }

}

유니티에서 해상도 고정하는 방법.


[Android]


(스크립트가 시작시 -  Start() 에서)

Screen.SetResolution(1280, 720, true); // 1280 x 720 으로 조정

Screen.SetResolution(Screen.width, (Screen.width / 2) * 3 ); // 2:3 비율로 개발시

Screen.SetResolution(Screen.width, Screen.width * 16 / 9,  true); // 16:9 로 개발시



지정해 주면 고정비로 빌드가 되어 단말에서 지정 해상도로 출력이 된다.

+ Recent posts