2017년 11월 21일 화요일

unity IAP

unity services 활성화






https://developer.cloud.unity3d.com/projects/
미리 만들어 둔 프로젝트가 있다면 찾아쓰고, 아니면 만들어도 된다.



여기서는 있는걸 찾아썼다. 링크 gogo

여러 기능들이 보인다.

In-App Purchasing 을 클릭



Enable 클릭



13세 이하를 타겟으로 하지는 않을 테니 진행



여러가지 패키지를 임포트 할 예정이다. 임포트 클릭



이후 많은 것들이 Plugins / UnityPurchasing 에 설치 됨
























android keystore 만들기

안드로이드 스튜디오

프로젝트 하나 열려있고




















위 메뉴를 통해 생성

생성된 파일의 확장자를 keystore 로 고치면 사용가능해짐


2017년 6월 11일 일요일

IP Time 공유기 설정

=========================================
초기화

기계 뒤의 리셋 버튼 5초 이상 누르고 있기

인터넷 주소 192.168.0.1 ㄱㄱ

초기 암호 노출해 줌

=========================================
포트 포워딩




cmd 창에서 ipconfig
ipv4 에 해당하는 192.168.0.2를 사용
규칙이름 임의로
외부, 내부 포트 동일하게 설정 후
추가 버튼 누르면 위와 같이 생성이 된다.

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

fzftp 설정, file zilar 설정을 다 하고 할것( 참고 : http://wassap.tistory.com/175 )



데이터 관련 custom port range 설정 했던것 추가



이제 웹 브라우저를 열고

ftp://IP 또는 ftp://IP:21

안될것임 방화벽 때문임

내부로 하면 잘됨

ftp://127.0.0.1 또는 ftp://127.0.0.1:21

제어판 / 방화벽



> 고급설정



> 인바운드 규칙 > 새 규칙 / 포트 / 다음



특정 로컬 포트 선택 후  파일질라 설정에 썼던 포트 기록




다음 화면에서 < 연결 허용 > 선택 다음
다음 화면에서 < 도메인, 개인 공용 > 다 선택 다음



이제 웹 브라우저를 열고

ftp://IP 또는 ftp://IP:21

하면 접속이 됨

FTP 서버 구축

1) 파일질라 서버

https://filezilla-project.org/download.php?type=server

에서 파일 다운로드( FileZilla_Server-0_9_60_2 라는 파일 다운로드 됨)

설치시 아래와 같은 페이지

default를 선택하여 컴이 켜지면 서버도 실행되게끔 한다.
포트번호는 일단 저대로 간다.(나중에 바꿀 수 있나? 알아보자) 14147

다음



이 또한 기본값으로 다음

서버 설정화면
Host : 서버의 주소, localhost 또는 127.0.0.1 은 자기 자신의 컴퓨터를 가리킵니다.
Port : 포트
Password : 관리자 비번
그리고 항상 이 서버로 연결할지 여부

이제 설정하기



Edit / Settings 을 누르면 설정창 나옴

1) General settings


기본적으로
웹서버의 포트는 80(웹 브라우저에서 주소 뒤에 80 없으면 생략임)
FTP의 포트는 21

Max, number of users : 최대 동시 접속자 수
Number of threads : 서버 프로세서 몇개 돌릴까


2) Passive mode settings

Warning: FTP over TLS is not enabled, users cannot securely log in.
You appear to be behind a NAT router. Please configure the passive mode settings and forward a range of ports in your router.

위와같은 오류 메세지가 떠있을것( 공유기 라면 )
여기서 이걸 없에보자


포트는 내가 쓸 포트 11개 확보
External server ip address for passive mode ~~
는 User the following IP 선택하여 IP 또는 DDNS  입력


3) FTP over TLS settings

Generate new certificate.. 눌러서 cert 파일 생성



생성 위치는 반드시 체크!!
G:\bkAsset\003.FTP\certificate.crt



Enable FTP over TLS support 선택



내 경우 private key file 과 certificate file  경로가 자동으로 기입됐음

ok ㄱㄱ




User settings
사용자 만들고 권한을 설정하는 등의 작업



Edit / Users 을 누르면 설정창 나옴


우선 모든 권한을 가진 유저 생성


오케이 눌러 생성



비번 생성, Shared folders 클릭.
(걍 ok 하면 하나의 권한이라도 있어야 한다는 경고가 나오며 진행 안됨)



위와 같이 Add  버튼으로 적당한 폴더를 적용하고 그 폴더에 대한 권한을
동그라미 영역처럼 체크해준다.












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");
    }
}