0.안드로이드 스튜디오를 설치한뒤에 프로그램을 실행하면 다음과 같은 창이 뜬다. (설치는 매우 쉬움. 생략)


1. 자 이제 새로운 안드로이드 프로젝트를 만들어보자. 맨 위에 Start a new Android Studio Project선택!


2. Application name을 정하고 회사 도메인을 기입한다(패키지는 이것에 따라 자동으로 변경된다)


3. 어떤 플랫폼에서 어떤 SDK 버전으로 돌릴 것인지 선택. 모바일 개발이므로 Phone and Tablet만 체크 후 Next


4. 처음 앱 프로젝트 생성시 액티비티 유형 선택.  기본적으로 Empty Activity가 선택된다.


5. 액티비티 이름과 레이아웃 이름을 설정한다. 또는 레이아웃 파일을 안 만들 수도 있다(Activity Name 아래 체크 해제)


6. 위에 Finish버튼 클릭하면 빌드를 진행한다. 앱 프로젝트를 만들고 있는 중이니 기달리면 된다.


7. 좀 더 기다리면 드디어 프로젝트가 만들어졌다.

도움말 창은 닫아버리고, 잘 되는지 테스트하기 위해 디바이스를 꽂고 위에 재생.플레이 버튼을 누르면 됨~~


'Android > Android Studio' 카테고리의 다른 글

[Android] Android Studio 단축키!!  (0) 2016.08.16
Posted by sungho88
,


이런 에러가 발생했다면?


Xcode에 업데이트가 되지 않았기 때문이다.

업데이트 해주면 된다. 어떻게?


맨 아랫줄에 쓰여있다. 


xcode-select --install


입력하면,


Xcode가 자동으로 열리면서 설치 동의 페이지가 나온다. 여기서 설치한 뒤, 재시도하면 정상적으로 설치가 되게 된다.!!

Posted by sungho88
,

먼저, 녹스 앱 플레이어를 설치한다.(설치는 간편하게 쉽다.)


홈페이지



그 다음에, 유니티에서(또는 안드로이드 스튜디오에서) 빌드한 APK를 실행해보자.

이전에는 APK파일을 그냥 드래그하면 설치가 되었지만, 이제는 그렇게 하지 알고 1단계 거쳐야 한다.

맥 기준으로 왼쪽 메뉴(윈도우는 하단? 우측?)에 apk 업로드하는 버튼이 있다.

이렇게 해서 파일을 선택하면 된다.





Posted by sungho88
,

프로젝트를 진행하다보면 한 개 더 띄워서 작업하거나 비교하고 싶을때가 있다.

이럴 경우 어떻게 할까?


유니티를 하나 켜놓은 상태에서 터미널(terminal) 실행 후,



> open -na unity



을 입력한다.


그러면 New / Open을 묻는 창이 뜰 것이고,


만들던지 기존 프로젝트를 열던지 그것은 자유!


이상. 맥에서 유니티 에디터를 여러개 띄우는 방법이다. 

Posted by sungho88
,

인앱결제... 앱 안에서 어떠한 아이템이나 원하는것을 구매하는 결제 시스템을 뜻한다.


IAP이라고도 부르며, In-App Purchase의 약자이다.


이를 사용하다가 문제가 발생했다.


폰에 바로 빌드를 해서 실행을 해보니까 제목과 같은 에러가 발생했다.





찾아보니 유니티에서 빌드를 해서 실행시키면 안된다.

구글 플레이 콘솔에 알파 버전이든 베타 버전이든 올려둔 뒤에, 다운받아서 테스트해야한다.


즉, 게시 상태가 아닌 APK를 빌드하여 테스트하려고 시도할 때, 이러한 에러가 발생한다.  

Posted by sungho88
,

윈도우에서는 Delete키 누르면 게임오브젝트를 삭제할 수 있어서 편리하다.

그런데, 맥에서는 이 키가 먹지 않는다.


찾아본결과..


Command키와 함께 Delete키를 누르면 윈도우에서와 같이 삭제할 수 있다.

아, 맥 키보드에 Delete가 두 개 있다면(큰 키보드라면)


 방향키 윗쪽에 Home 부분의 Delete키 말고...


윈도우로치면 Back space기능을 하는 Delete 

Posted by sungho88
,

[같은 게임오브젝트(GameObject)에서 컴포넌트(Component) 호출하기]

 

동일한 게임오브젝트가 갖고 있는 특정 다른 컴포넌트에 접근해야 할 경우 사용하는 방법은 다음과 같다.

이러한 선언은 Start()함수에서 또는 Awake()함수에서 미리 할당해놓아야 한다.

 

void Start() {

Transform tr = GetComponent<Transform>();

Transform tr = gameObject.GetComponent<Transform>();

Transform tr = (Transform)GetComponent("Transform");

Transform tr = (Transform)GetComponent(typeof(Transform));

}

 

이 스크립트가 포함된 게임오브젝트가 갖고 있는 컴포넌트 중에서 Transform 컴포넌트를 추출하여 tr 변수에 저장해라

 

 

[다른 게임오브젝트(GameObject)에 있는 컴포넌트(Component) 호출하기]

 

오브젝트들은 서로 독립적으로 작동하기때문에, 

위와같이 GetComponent만으로는 다은 오브젝트에 컴포넌트는 호출할 수 없다. 

이럴때는, 스크립트에 

 

public GameObject other;

 

와 같이 위에 선언해주고,

 

tr = other.GetComponent<Transform>();

 

이렇게하면, other의 게임오브젝트에 붙어있는 컴포넌트를 tr에 저장하여 사용할 수 있게된다.

 

아, 게임오브젝트는 유니티 에디터로 돌아와서, other가 어떤 게임오브젝트인지를 알려주어야한다.

즉, 이 스크립트가 붙어있는 게임오브젝트로 가면 Inspector에 스크립트 하단에 other가 보이고, 그 옆에 값은  None.

이 부분에다가 참조하고 싶은 게임오브젝트를 드래그 앤 드롭으로 옮겨주면 None대신 게임오브젝트가 들어간다.

이것이 연결된 것이라고 할 수 있다.

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

또는 Tag를 이용한 방법도 있다.

 

Button button = GameObject.FindGameObjectWithTag("게임오브젝트이름").GetComponent<Button>();

 

이렇게하면, 게임오브젝트에 태그를 검색해서, 찾아온 뒤, Button 컴포넌트를 가져오게 된다.

 

https://www.10000duck.com/ducks/37

 

10000duck - 그레타 툰베리가 우리 도서관에 ?!

온라인 모금함을 통해 기부하세요.

www.10000duck.com

 

Posted by sungho88
,

유니티에서 변수를 여러개 작성한다.

유니티에서 사용하기 위해서는 public을 사용한다고 한다.


그러면 유니티 에디터에서는 해당 게임오브젝트 옆에 인스펙터(Inspector)에 자동으로 그 변수가 표시된다.

이곳에서, 값을 쉽게 바꿀 수 있다고 한다. 그래서 처음에는 아. 둘 다 지원되는구나 했는데..


그런데, 이상한 점을 하나 발견했다. 

스크립트에서 값을 변경해도 이 인스펙터에서는 전혀 변경되지 않는다. 

즉, 플레이를 할 때, 변경하기 이전값이 그대로 출력된다.

뭔가 문제가 있는것 같아서 유니티를 재설치해볼까도 생각해봤는데...

검색해서 이유를 발견했다.


스크립트보다 인스펙터 값이 우선시된다. 스크립트에서 아무리 고쳐도 인스펙터 값이 적용된다는 것이다.

왜 실시간으로 바뀌지 않는것일까?

이 스크립트가 들어있는 인스펙터에서 설정 아이콘을 클릭 - Reset을 해줘야만 스크립트에 값들이 로드되는것을 볼 수 있다. 자동으로 업데이트 되는 방법은 없는것인가?


알게되면 블로그에 작성해야겠다.

매번 리셋을 할 수는 없는 것 아닌가.

Posted by sungho88
,

using UnityEngine;
using System.Collections;

public class Variables : MonoBehaviour {

    public string SIGNUP =  "등록";
    public string LOGIN = "로그인";
    public string LOGIN_FACEBOOK = "Facebook Login~~";

    // Use this for initialization
    void Start () {
 
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}


여기 이런 스크립트가 있다. 

다른 스크립트에서 이 스크립트에 선언된 변수를 선언하는 방법은 무엇일까.

가장 먼저, 위 스크립트를 (빈) 게임오브젝트에 집어넣어 컴포넌트화 시켜놓고, GetComponent를 사용하는 방법이다.


Variables vari = GameObject.Find("Variables 컴포넌트가 부착된 오브젝트").GetComponent<Variables>();


또는 나눠서,


GameObject gameObject = GameObject.Find("Variables 컴포넌트가 부착된 오브젝트");

Variables vari = gameObject.GetComponent<Variables>();


으로 작성한다.


//////////////////


하지만, 왜 반드시 GameObject를 선언해줘야하는것인가?

그냥 변수를 가져와서 쓸 수 있는 방법은 없는걸까?

검색결과, 싱글톤 방식으로 변경을 하면 가능하다는 것을 알게 되었다.



Posted by sungho88
,

이전에 MD5에 관련된 예제를 보았다.


MD5 사용하기


이번에는 SHA256을 사용해보려고 한다.

MD5보다 짧다


이 함수를 사용하기 전에도 역시 


using System.Security.Cryptography; 을 미리 상단에 추가해줘야 한다.


그리고 다음과 같이 작성하면된다.



     public string SHA256Hash(string data) {

        SHA256 sha = new SHA256Managed ();
        byte[] hash = sha.ComputeHash (Encoding.ASCII.GetBytes (data));
        StringBuilder stringBuilder = new StringBuilder();
        foreach (byte b in hash) {
            stringBuilder.AppendFormat ("{0:x2}", b);
        }
        return stringBuilder.ToString ();
    }


패스워드를 123456789라고 입력했다고 가정하자.

그리고, 다음과 같이 MD5Hash 함수와 SHA256Hash 함수를 호출하였을때, 



다음과 같은 결과가 나타난다.


SHA가 훨씬 더 길게 나온다는 것을 알 수 있다.

또한, 어떠값을 변수값을 함수 내 매개변수로 넣었다고 해도 그 변수값은 변하지 않는다. 

Posted by sungho88
,