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


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
,

사용 전 먼저, 이것을 추가해주어야 MD5와 같은 클래스를 사용할 수 있다.


using System.Security.Cryptography;


그리고, MD5를 사용하기 위한 메소드는 다음과 같다.

   

  public string MD5Hash(string text)
    {
        MD5 md5 = new MD5CryptoServiceProvider();

        //compute hash from the bytes of text
        md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));

        //get hash result after compute it
        byte[] result = md5.Hash;

        StringBuilder strBuilder = new StringBuilder();
        for (int i = 0; i < result.Length; i++)
        {
            //change it into 2 hexadecimal digits
            //for each byte
            strBuilder.Append(result[i].ToString("x2"));
        }

        return strBuilder.ToString();
    }



이렇게 하고, 임의의 텍스트를 위 함수의 매개변수에 넣어 호출하면,


예를들어 


MD5Hash("hello");


이런식으로 하면 MD5로 암호화되어 사용할 수 있다.


하지만, MD5는 이미 해킹에 위험성이 매우 높으므로 사용하지 않는것이 좋다.


MD5로 암호화한 문자열은 쉽게 복호화하여 비밀번호를 만들어낼 수 있기 때문이다.


이 사이트


위 사이트에 가면 MD5로 암호화/복호화를 너무나 간편하게 할 수 있다. 


이런것을 보면... MD5는 사용하지 않길 바란다.

Posted by sungho88
,

일반적으로 패스워드를 입력할때 별표 * 로 작성한 문자를 보이지 않게 한다.


 HTML에서는 type="password"로 하고, 유니티 Input Field에서도 Type에서 Password를 선택하면 된다.


하지만, NGUI를 사용하고 있다면 어떻게 해야할까?


쉽다. UI INPUT 스크립트를 포함하고 있을 것이다.


그러면, 다음과 같이 Inspector에 나타난다.



Input Type에서 Password를 선택하면 된다.


Posted by sungho88
,

1. 페이스북 개발자 페이지에 접속한다.


2. 로그인을 하면, 새 앱 추가 버튼이 보이는데 새 앱 추가를 클릭한다. 그러면 다음과 같은 창이 뜬다.


3. 앱 이름을 작성하고, 완료를 누른다. ( 페이스북과 관련된 특정 단어는 사용할 수 없다. Facebook  FB Face 등등)


4. 보안관련 문자를 한 번 기입하면 새 앱이 만들어진다.


5. 왼쪽에 대시보드(Dashboard)를 선택하면 앱 ID를 확인할 수 있다.

 



이제 유니티에서 앱 ID를 적용시켜보자.


Posted by sungho88
,

일단 유니티에서 페이스북 어플을 연동하기 위해 유니티에서 사용할 수 있는 페이스북 SDK 를 제공한다.


그러므로 들어가서 받도록 


Facebook SDK for Unity


주의할 점! 가장 최신것을 받는다고 좋은게 아니다.


가장 최신 버전(7.10.0)을 받았더니 에러가 발생한다. 


심지어 에러가 발생한지 얼마 되지 않은 최신 에러인지 구글에도 찾을 수 없었다.


찾다가찾다가 포기...경험상 최신것들은 문제가 많다는것을 생각해 작년에 나온 한 단계 아래버전으로 다시 도전


헐 된다.



MissingMethodException: Method not found: 'UnityEditor.PlayerSettings.get_applicationIdentifier'.
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for GooglePlayServices.PlayServicesResolver


이런 에러가 발생한다. 해결 방안을 찾기도 어렵다.

그냥 편하게 한 단계 아래 버전을 다운받아서 임포트하도록 하자.


7.9.4 버전을 다시 다운로드 받아서 압출 해제를 한 뒤, 임포트하면?


된다!


이상으로 SDK 설치를 마친다.

이제 예제를 해보자.




Posted by sungho88
,