2017년 3월 28일 화요일

mac unity 설치

이미 유니티 라이센스를 가진 사람 중
설치에 어려움이 있는 사람들을 위한 글이니

그렇지 않은 분들은 백 버튼




유니티 크랙을 준비한다.



유니티 설치 후

설치된 유니티 폴더에 가서

패키지 내용 보기를 한다.


위 이미지 같이
응용프로그램 / 해당 폴더 / unity 를 우클릭하여 패키지 내용 보기(영문으로는 뭘까)


하면 나오는 컨텐츠 폴더 / MacOS / Unity 를 크랙 폴더 내부에 있는 Unity 로 대체

유니티 실행



라이센스 관리 실행


Manual Activation 선택



Load Licence 선택



Unity_v5.x.ulf 선택

완료

============================================================================
Monodevelop 색상 변경





위 이미지 처럼
mono / preferences / text editor / syntax highlighting
에서 맘에 드는 것 골라서 적용
















2017년 3월 24일 금요일

mac

=====================================================
숨김 폴더 표시 온 오프

터미널 켜고

숨길 폴더 보이기
defaults write com.apple.finder AppleShowAllFiles -bool true
입력 후
killall Finder

안보이기
defaults write com.apple.finder AppleShowAllFiles -bool false
입력 후
killall Finder

=====================================================
스크린 샷
shift + command + 4, .png file 은 데스크탑에 위치

=====================================================


=====================================================

=====================================================

=====================================================

=====================================================







































2017년 3월 15일 수요일

Firebase

== For Unity =========================================





== For Android =======================================
메인 플러그인에 포함 시켜보려고 했으나, 라이브러리일 경우 진행이 안된다.

일단 firebase 안드로이드에 적용하는 설명서를 읽으면서 진행
( https://firebase.google.com/docs/android/setup )

1) 앱에 firebase 추가
 위 링크로 들어가 v 표시 된 문구를 누르면 firebase console 로 연결된다.





위 링크로 들어가서 진행


프로젝트 이름과 국가 입력할때 미처 스샷을 못 찍음(희미하게 보일것임)



프로젝트가 만들어진다.
구글 개발자 api 사이트 에서도 확인이 된다


프로젝트가 완성이 되면 위 그림 처럼 android 앱에 firebase 추가를 누른다.


SHA-1 형태의 코드를 만들어 내는 방법
일단 .keystore(jks) 가 있어야 한다(릴리즈던 디버그던).
선택사항옆의 ? 의 내용을 참고한다. 그 내요은 이러하다
"키 스토어를 가지고 키 툴을 사용해 정보를 뽑아내라"
cmd 창에서

keytool -exportcert -list -v -alias roc -keystore D:\bk\UnityProject\ROC\Certificate\roc.keystore

이런 명령어를 넣으면( roc 나 D:\bk\U... 는 상황에 따라 다르다 )
암호를 치라 하고 정해진 암호를 넣으면 코드와 기타 정보를 준다.

< 정보 형태의 예 >
별칭 이름: roc
생성 날짜: 2017. 3. 15
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: C=KR
발행자: C=KR
일련 번호: 4b0d33e4
적합한 시작 날짜: Wed Mar 15 17:48:16 KST 2017, 종료 날짜: Sun Mar 09 17:48:16 KST 2042
인증서 지문:
         MD5: 83:35:16:3E:B0:91:81:BF:CE:CF:81:CB:35:81:C4:B8
         SHA1: 6A:4F:B1:EB:9F:65:9D:F8:AF:CE:E7:B5:F1:FB:BA:85:3D:5B:3B:DF
         SHA256: 1A:8B:4F:2C:FA:A3:96:EB:51:7F:3F:19:B2:58:0A:04:0B:F8:D3:A8:4B:C7:5D:60:D7:8F:F3:5F:6F:CF:6B:0A
         서명 알고리즘 이름: SHA256withRSA
         버전: 3

확장:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 2A E0 24 73 37 3E 43 CE   40 63 A5 2A E6 A9 51 07  *.$s7>C.@c.*..Q.
0010: CD F8 B2 25                                        ...%
]
]
-------------------

위 정보를 참고해 작성하고 다음으로 넘어가면 아래 처럼 나온다.


google-services.json 파일을 다운로드 받는다.



위 그럼 처럼 처리해 주면 에러가 발생하는데 그 이유는
google-services.json 파일을 안드로이드 프로젝트에 넣어두지 않아서 그럼



위 그림 처럼 추가해주면 에러 없어짐
만약 json 파일이 없다면
https://console.firebase.google.com/project/rainofcomettest/overview
로 가서 해당 프로젝트에 들어가면 아래 과정을 거쳐 받을 수 있음

 




sdk 추가
모듈 수준( = 앱수준, app 하위에 있는) 의 gradle 파일에 추가

dependencies {
  // ...
  compile 'com.google.firebase:firebase-core:10.0.1'
}
사이트에는 위 처럼 나오지만 지금 당장 필요한건 core가 이닌듯 하다
왜냐하면 클라우드 메세징을 찾고 있고 코어는 분석모듈과 같은것으로 보인다.

사용 가능한 라이브러리
다양한 Firebase 기능에 대해 다음과 같은 라이브러리를 사용할 수 있습니다.
Gradle 종속성 계통서비스
com.google.firebase:firebase-core:10.0.1Analytics
com.google.firebase:firebase-database:10.0.1실시간 데이터베이스
com.google.firebase:firebase-storage:10.0.1저장소
com.google.firebase:firebase-crash:10.0.1오류 보고
com.google.firebase:firebase-auth:10.0.1인증
com.google.firebase:firebase-messaging:10.0.1클라우드 메시징 및 알림
com.google.firebase:firebase-config:10.0.1원격 구성
com.google.firebase:firebase-invites:10.0.1초대 및 동적 링크
com.google.firebase:firebase-ads:10.0.1AdMob
com.google.firebase:firebase-appindexing:10.0.1앱 색인 생성



(참고: https://firebase.google.com/docs/android/setup )






== For Something =======================================


====================================================
















2017년 3월 13일 월요일

플러그인(plugin) 만들기 - androidstudio unity 연동

new project 생성

application name 과 company domain 은 package name 이 적절하게 나오도록 구성










완료하여 프로젝트가 생성 되었다면
unity 가 설치된 폴더 내부에 있는 classes.jar 파일을 프로젝트에 추가해야함

C:\Program Files\Unity\Editor 안의
\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
내부에 있을 것으로 추정




찾았다면 안드로이드 프로젝트로 다시 포커스를 이동시켜서
app 에 우클릭하여 open module settings 클릭



Dependencies 탭으로 이동후 우측의 File dependency 클릭

libs 폴더 찍으면 위쪽 경로 창이 업데이트 된다.



해당 경로에 unity 설치 폴더에 있던 classes.jar 복사



위 그림 처럼 추가 되어 있어야 하고 확인 하면
아래 그림 처럼 추가 되어야 한다.



좌측의 계층 창에서도 app/ libs 하위에 생성된것을 확인(파일만 옮겨도 생성되는거)



혹시 com.android.support:appcompat-v7:25.0.1 (버전은 상관없음) 가 디팬던시에 없다면
이후에 할 gradle 수정 작업에서 애를 먹게 된다.
추가해 주자


로 들어가서



선택해주면 dependencies창에도 gradle에도 추가가 된다


불필요한 항목 삭제
좌측 계층 창이 project로 되어있다면 android로 바꾼다.
그리고 java 항목을 연다. 패키지 이름 뒤 (test 어쩌고) 하는걸 지운다.
(사라질때 까지 계속 지운다)



UnityPlayerActivity 상속
MainActivity.java 의 내용을 수정



위와 같은 내용을

package com.bkst.pluginunity;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayerActivity;//유니티 라이브러리 임포트

// Activity 대신  UnityPlayerActivity 를 상속
public class MainActivity extends UnityPlayerActivity {

    @Override    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }

    public static void LogStatic(String str)
    {
        Log.d("bk", str);
    }

    public void Log(String str)
    {
        Log.d("bk", str);    
    }




}

와 같이 수정

Gradle Scripts 하위에서 build.gradle(Module:app) 더블클릭 하여 연다.
(project로 잡고 있다면 app 하위의 gradle을 연다.)



gradle의 내용은 아래와 같을 것이다.

apply plugin: 'com.android.application'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.bkst.pluginunity"
        minSdkVersion 9
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'    })
    testCompile 'junit:junit:4.12'    compile files('libs/classes.jar')
}

아래와 같이 바꿔준다.

apply plugin: 'com.android.library'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        //applicationId "com.bkst.pluginunity"//라이브러리는 애플리케이션 ID를 가질 수 없다.
        minSdkVersion 9
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.0.1'//dependencies 에서 추가하면 자동 추가됨
    compile files('libs/classes.jar')//dependencies 에서 추가하면 자동 추가됨}

task deleteObjectJar(type: Delete){
    delete 'release/AndroidPlugin.jar'
}

task exportJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteObjectJar, build)

이제 android studio의 우측 을 보면 아래와 같은 버튼이 있다.
누르면
 
...(root) 와 :app 두개가 나오는데
:app 하위의 other를 열고 찾아보면 exportJar가 있다.



본래 exportJar 를 더블클릭하면 jar가 생성 되면서 빌드 로그를 볼 수 있었는데,
이상하게 지금은 프로젝트 clean을 해야 빌드가 되면서 로그를 볼 수 있다.


빌드 된 jar 파일의 위치 탐색기 갈 필요 없이 아래의 저거를 끄집어 쓰면 된다.



유니티에서 써먹기

유니티에서 사용하기 위해서는 아래의 그림 같이 사전 작업이 필요하다.


우선 Plugins 폴더를 만들어야 하고 그 안에 Anroid 폴더를 만들어야 한다.
그리고 Android 폴더 내부에
1) AndroidManifest.xml과
2) 방금 만든 .jar 파일 그리고
3) AndroidManifest.xml 등에서 사용하는 resource들을 담고 있는 res 폴더를
알맞게 구성해야 한다.


1,2,3에 대한 자세한 설명

1. 기존의 AndroidManifest.xml가 있다면 그것을 활용하고 없다면
방금 만든 android studio project에 있는 AndroidManifest.xml 을 활용한다.

AndroidManifest.xml 의 내용



붉은 줄이 그어진 부부은 android studio에서 가져오면서 수정한 부분이다.
1) drawable 은 mipmap 이었고,
2) com.bkst.pluginunity는 없었다.
아 빼먹을 뻔 했는데 위쪽에 있는 pakage="com.bkst.testapp" 을 수정하는 바람에
2)번이 .MainActivity에서 com.bkst.pluginunity.MainActivity 로 수정된 것이다.
원래는 pakage = com.bkst.pluginunity 였다.
특별한 이유가 없다면 pakage는 그대로 하는게 좋음. (테스트 해본 것)

2) .jar 파일은 그냥 가져오면 된다.

3) res 폴더
android studio 프로젝트의 res 폴더를 그대로 끄집어서 온 복사본이다.
해상도 별 이미지 저장소, 프로그램적으로 쓰이는 변수들 등을 정의 해 놓은 곳


참고한 블로그에서는 번들아이디를 맞추라는데 그럴 필요는 없는것 같다.

이제 진짜 쓰는 부분이다.(code)

앱이 시작하면 바로 쓰도록 설계되어 있다.

using UnityEngine;
using System.Collections;

public class Manager : MonoBehaviour {

    AndroidJavaObject ajObject;//안드로이드 오브젝트

    void Start ()
    {
        // 안드로이드 activity나 이를 상속받은 UnityPlayerActivity 를 상속받은 클래스의
        // 메소드를 쓰기 위해서는 아래 처럼 해야 한다.
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        ajObject = jc.GetStatic<AndroidJavaObject>("currentActivity");

        // 아무것도 상속받지 않은 클래스에 속한 메소드를 호출하기 위해서는
        // 아래와 같이 클래스까지의 경로(패키지명)을 지정한다.
        //ajObject = new AndroidJavaObject("com.bkst.pluginunity.MainActivity");


        ajObject.CallStatic("LogStatic", "testStatic");
        ajObject.Call("Log", "test");
    }
}