안드로이드 스튜디오로 간단하게 플래시가 나오게 작업을 해보았습니다.

그런데 정상작동을 안합니다. 오류도 없고..

이리저리 다 해봤는데 모르겠네요.. 


나중에 해결되면 업데이트 하려고 블로그에 백업해 놓습니다. ^^

혹시 아시는 분 댓글 달아주세용...


조사해본 결과로 카메라 관련 퍼미션은 아래의 내용 정도로 모두 되는 것 같습니다.


    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-permission android:name="android.permission.FLASHLIGHT"/>

    <uses-feature android:name="android.hardware.camera"/>

    <uses-feature android:name="android.hardware.camera.flash"/>


소스는 아래와 같은데. 작동은 안됩니다.

참~ 이상하군용 @_@


package com.example.cholm.flashlight;

import androidx.appcompat.app.AppCompatActivity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private Button onOffButton;
private Camera _camara;
private Camera.Parameters parameters;
private boolean isFlashOn = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
onOffButton = (Button) findViewById(R.id.button);
onOffButton.setOnClickListener(this);
}


public void getCamera(){
if(_camara == null){
try{
_camara=Camera.open();
parameters= _camara.getParameters();
}
catch (Exception ex)
{
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}

}
}

@Override
public void onClick(View view){
if(view == onOffButton){
if(isFlashOn){
turnoffFlash();
}
else
{
getCamera();
tuneOnFlash();
}
}
}

public void tuneOnFlash()
{
try{
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
_camara.setParameters(parameters);
_camara.startPreview();
isFlashOn=true;
onOffButton.setText("OFF");
}
catch (Exception ex){
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}
}

public void turnoffFlash(){
try{
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
_camara.setParameters(parameters);
_camara.stopPreview();
isFlashOn=false;
onOffButton.setText("ON");
}
catch (Exception ex){
Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
}
}

@Override
public void onStop(){
super.onStop();
if(_camara!=null){
_camara.release();
_camara = null;
parameters = null;
}
}

@Override
public void onRestart(){
super.onRestart();
}
}

대체 이유가 뭘까....


WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요 철사마 입니다.

안드로이드 스튜디오를 하면서 황당하게 발생하는 에러가 있어서 해결방법 정리하였습니다.

저처럼 당황해서 놀라지 마시길 바라면서 정리해 보았습니다.. ㅠ^ㅠ




황당한 에러는 디자인 뷰 영역 에러 입니다. 


이게 왜 황당하냐면 디자인 뷰 영역에 어떤 컨텐츠를 넣어도 보이지 않고 위치도 지정할 수 없고 에러만 계속 뜹니다....

빌드하면 제대로 나오지도 않아서 작업을 할 수 가 없습니다..;;;


에러 문구는 아래와 같습니다.


Failed to load AppCompat ActionBar with unknown error.


대충 해석하면... "알수 없는 에러로 AppCompat ActionBar를 로드하지 못합니다." 


난 아무 것도 하지 않았는데?.. 왜 이런 에러를.. 그리고 하단에는 이런 에러 문구가 있습니다.


This view is not constrained. 

It only has designtime positions, so it will jump to (0,0) at runtime unless you add the constraints  The layout editor allows you to place widgets anywhere on the canvas, and it records the current position with designtime attributes (such as layout_editor_absoluteX). 

These attributes are not applied at runtime, so if you push your layout on a device, the widgets may appear in a different location than shown in the editor. 

To fix this, make sure a widget has both horizontal and vertical constraints by dragging from the edge connections.


대충 해석하면... "이 뷰는 강제적인 것이 없어서... 제약 조건을 추가하지 않으면 네가 추가한건 0.0으로 위치합니다. 블라블라.. 네가 원하는 것이랑 다르게 나올 수 있다.. 블라블라.."  당췌 몬소린지..


여튼 아무것도 안하고 프로그램 실행만 누른 입장에서 에러가 뭔가 억울합니다. 

마치 컴맹이 컴터 키고 블루스크린 뜨면 왠지 내 손이 똥손이라 망가진 것 같고 막... ㅠㅠ






하지만! 안심하세요~ 해결은 생각보다 쉽습니다.


우선 아래 위치로 이동해서 명시한 부분의 해당 소스를 수정해 줍니다.


1. Gradle Scripts에서 build.gradle (Module: app) 파일을 더블클릭하여 열어줍니다.

2. 23번 라인 implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'에서 alpha3alpha1으로 수정합니다.



코드를 수정한 화면입니다.


수정을 하면 안드로이드 스튜디오 코드 편집창 상단 우측에 [Sync Now] 라는 바가 생겨납니다.

그 버튼을 눌러서 동기화를 시켜줍니다.


동기화를 눌러주면 동기화가 되면서 이것저것 열심히 적용됩니다.


적용이 다 된후에 다시 레이아웃(Layout) 화면으로 이동해 봅니다.

이제 화면상에 콘텐츠가 제대로 레이아웃에 나타나고 에러도 발생하지 않습니다.


이 오류는 구글 검색해 보니 안드로이드 스튜디오 버그안드로이드 스튜디오 3.1.3 버전 기준에서 다운로드 받으면 발생하는 버그입니다.

앞으로 업데이트되는 버전에서는 해결되어 있을 것 같습니다. (제발~~)




처음 시작하는 초심자 입장에서 아무것도 안했어도 왠지 내가 잘못한 건 아닐까 하는 불안감이 생기는 오류였습니다.

다행히 해결 방법은 어렵지 않지만~~

모르면 아무것도 시작할 수 없는 그런 치명적인 버그였습니다.

쉽게 수정하시고 코딩을 시작해보세요!!




WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

안녕하세요 철사마 입니다.

제가 요 며칠 동안 [안드로이드 스튜디오]에 관심이 생겨서 설치를 해보았습니다.

<이미지 출처 : 구글 이미지 검색>


노트북 용량이 너무 부족해서 공초를 결단! 하고 깔끔하게 시스템을 새로 설치 했습니다. (대단한 각오!)

그런데 다 지우고 깔아서 깔끔한 상태인데도... 기본 설정으로 프로그램을 설치 후 프로젝트를 생성하고 바로 빌드를 눌러보니 암것도 안했는데 에러가 뜨더군요? @_@


(애뮬레이터 실행 아이콘 클릭!)


(알수 없는 에러 발생!)


Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration!

에러 내용은 "x86 emulation은 현재 하드웨어 가속이 필요해!" 라는 내용 같습니다.

무슨 소린지... 컴퓨터가 느려서 그런건가? 라는 생각을 잠시 해보았습니다.




해당 문구로 Google에 검색을 해보았습니다.

<검색 : text 검색어 입력>



인터넷 검색을 기반으로 방법을 찾아보기로 했고, 해결을 했습니다.

인터넷 검색으론 좀 뒤죽박죽이라 쉽게 정리를 해보았습니다. :)


우선 [Android Studio] 프로그램에 에뮬레이터가 정상적으로 설치 되었는지를 확인해 봅니다.


[Android Studio] 프로그램의 상단 메뉴의 [Tools] > [SDK Manager] 항목을 클릭해 주세요. 


클릭하면 SDK Manager 프로그램이 실행이 됩니다. 다양한 정보들이 보여지게 되는데 그 중에 [Android SDK] > [SDK Tools]를 선택하면 아래의 리스트가 보여지게 됩니다.

하단의 리스트에서 Intel x86 Emulator Accelerator (HAXM installer)가 체크 되어 있고 인스톨 된 상태인지 확인해 봅니다. (빨강색으로 점을 찍어 놓았습니다.)


체크가 없다면 체크를 하고 설치를 해주세요.


이미 체크가 되어 있는 상태라면 다른 문제가 있는 것입니다.


Android SDK가 설치되어 있는 경로가 서로 다를수도 있지만 임의로 바꾸지 않았다면 일반적으로 아래와 같은 경로일 것입니다.

C:\Users\[사용자계정]\AppData\Local\Android\Sdk\extras\intel\Hardware_Accelerated_Execution_Manager



참고로 폴더 속성에 [숨긴 항목] 에 체크를 하지 않았다면 체크를 해주시기 바랍니다. 

보여야 할 폴더가 보이지 않을 수 있습니다. AppData 폴더는 기본적으로 [숨김 항목]으로 설정 되어 있습니다.


[Hardware_Accelerated_Execution_Manager] 폴더로 왔으면 여러 파일 중 [intelhaxm-android.exe] 파일을 실행하여 줍니다.


설치가 완료되면 끝!





그러나... 이렇게 깔끔하게 설치되지 않고 아래와 같이 오류가 발생하는 경우가 있습니다.



이때는 프로그램으로 설정으로는 진행이 어렵고, [BIOS 설정]에 가서 [하드웨어 설정]을 직접 바꿔주셔야 합니다.


Bios 설정은 컴퓨터를 기동하고 F1 or F2를 연타해서 하드웨어 설정으로 진입하여 직접 수동으로 환경설정을 바꿀 수 있는 설정메뉴입니다.


Bois 설정에 들어갔으면 리스트를 잘 찾으셔서...

Intel Virtualization Technology 항목을 찾아 Enabled 해주심 됩니다.


사용자 PC마다 위치나 명시된 언어가 다르게 표현되어 있을 수 있으니 참고해 주시기 바랍니다.

제 PC의 경우는 Check Box 로 설정하게 되어 있었고 Virtualization Technology 라고 명시되어 있었습니다. 


Intel Virtualization Technology 항목을 Enabled로 설정을 완료 하셨나요?

그럼 다시 [Hardware_Accelerated_Execution_Manager] 폴더의 [intelhaxm-android.exe] 파일을 실행하고 설치를 완료합니다. 설치가 잘 될 것입니다.


완료 되었으면 [Android Studio] 를 실행하고 정상적으로 애뮬레이터가 동작하는지 확인해 봅니다.


저는 애뮬레이터의 가상 디바이스로 Nexus 5X를 선택했습니다.



다행히 전과는 다르게 애뮬레이터가 실행이 잘 되었습니다.


코드에 샘플로 적혀 있던 Hello World! 문구 까지 정상적으로 보여집니다. 애물레이터 구동이 잘 되는 것을 확인하였습니다.



애뮬레이터가 실행되고 나서 뒤에 빨강색으로 오류같은 것이 뜨긴 하지만... 애뮬레이터와는 상관없는 것 이겠죵..? ^^;;




전 개인적으로 처음 안드로이드 스튜디오를 실행해 보는데 갑자기 생겨난 생각치 못한 문제라서 답답했습니다.

어디서 정보를 구하기도 어렵고...

아무것도 안했는데 그냥 안되니까 답답하기도 했고요, 조금이나마 도움이 되셨으면 좋겠습니다. :)


이제 시작이네요!! ^^;;

즐거운 코딩 되시길!! 


WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  4개가 달렸습니다.
  1. 덕분에 답답한 문제 해결했습니다 ^^ 감사합니다~
  2. 감사합니다. BIOS에서 설정한 후 다시 또 설치해야 하는 그 순서를 모르고 계속 헤메고 있었네요~
secret

안녕하세요 철사마 입니다.

이번엔 2D 게임에서 파티클을 사용하기 위해 유용한 제작 툴을 소개해 드리려고 합니다.

툴의 이름은 particle2dx 입니다.

유료가 있으며 무료가 있습니다. 유료는 결제 별도 프로그램을 설치해서 사용하는 것 같습니다.


무료는 웹에서 이용이 가능하며, 실제로 해보니 기능의 제약이 저장이 안되는 것 빼고는 제약이 거의 없었습니다.

어차피 필요한 기능만 사용하니까 필요한 부분만 쓰면 되겠지요.. :)


우선 홈페이지를 접속해 봅니다.

Particle2dx 작업 웹페이지 접속하기 ( http://www.effecthub.com/particle2dx )


페이지를 접속하면 아래와 같은 화면이 나옵니다.


우선 회원 가입을 하는게 좋을 것 같습니다. (그냥 쓸수 있어야 하지만... 기능상에 버그가 있어서 제대로 진행이 안되더군요.)

가입절차는 쉽습니다. 전 페이스북 계정으로 가입을 했습니다. 그리고 가입하면 10코인을 줍니다. ^^


페이스북을 연동하면 바로 가입이 되며 이메일 인증을 하게 됩니다.(아마 어떻게 하든 공통으로 메일 인증을 요구할 것 같습니다.)

페이스북 이메일로 인증 메일이 갑니다.

그 메일을 클릭해서 인증하시기 바랍니다. (안하면 메뉴 상단에 인증하라고 계속 알림이 있어서 신경쓰이더군요)


인증을 하면 아래와 같이 1, 2차 인증이 완료 되어 정상적으로 회원가입이 됩니다.




인증 후 홈페이지 메인에 가면 이렇게 나옵니다.(메인 홈페이지 http://www.effecthub.com/ )

위에 빨강색으로 테두리 되어 있는 Upload Works를 누릅니다.

누른 후 Create Online 탭을 누르고 아래와 같이 Create Cocos2D Effect 버튼을 누릅니다.


그렇게 하면 처음에 알려드렸던 작업 화면인 웹페이지로 이동합니다.


우선 메뉴 설명을 세세하게는 하기 어렵습니다. 저도 잘 모르거든요.. ^^)a


그래도 간단하게 설명을 해보겠습니다.

( 참고로 이 포스팅의 주 목적은 내가 만든 png를 적용하는데 발생하는 문제를 해결하는데 있습니다. )


[Import] 메뉴는 버튼을 누르면 팝업 창이 뜨면서 이미 저장한 파티클 작업 파일..plist 을 불러올 수 있습니다. 당연한 이야기겠지만 작업한 파일을 Export를 하면 .plist 파일로 저장됩니다.


[Color&Shape] 메뉴는 각종 파티클의 설정과 내가 제작한 Png파일을 적용할 수 있습니다.

위의 빨강색 테두리의 버튼이 내가 만든 Png를 파티클에 적용할 수 있는 기능입니다.

Upload Texture는 Png를 바로 적용할 수 있는 버튼이고, 아래의 My Texture는 내가 보유하고 있는 Png를 불러오는 버튼입니다.


Upload Texture 버튼은 쉬워보이지만 오류가 발생할 수 있습니다. 내가 지정한 Png를 올리고 업로드를 눌렀는데 적용되지 않는 경우가 많습니다.

이런식으로 업로드를 하면 99.99%에서 더이상 진행안되는 경우가 있습니다.

그래서 이런 오류를 방지하기 위해 My Texture에 등록하는 방법이 있습니다.




우선 메인 페이지에서 Home > Files 를 들어갑니다.

그 후에 다양한 폴더들이 나오는데 그 중 Texture 폴더에 필요한 이미지를 업로드 합니다.

전 임시로 3개의 이미지를 업로드 했습니다.

여기서 주의할 점은 이미지를 올리면 무조건 공개가 기본으로 처리됩니다.

공개를 원하지 않는다면 체크박스를 선택한 후 UnShare를 선택하시기 바랍니다. 안하면 공개되요~

그리고 삭제하는 기능을 못찾겠더군요.. 무료라서 그런가...


이미지를 모두 올렸으면 다시 작업페이지로 돌아옵니다.

그 후에 My Texture를 누르면 좀 전에 업로드했던 png 리스트가 보여집니다. 이제 선택하면 적용이 됩니다. 두둥!


[Motion] 버튼은 파티클의 세부 설정을 조정할 때 사용됩니다. 이해는 잘 안가지만 실시간으로 반영이 되니 수치를 조절하면서 하면 될 것 같습니다. :)


[Template]는 다양한 샘플 파일을 적용해 볼 수 있는 메뉴입니다.




[Export] 메뉴는 작업한 파일을 저장하는 메뉴입니다. 어츰에 COCOS2D로 지정했기 때문에 COCOS2D에서 사용할 수 있는 형태로 저장합니다.

저장은 3가지가 있습니다. png가 포함된 파일, png를 구분해서 별도로 다운받는 파일형식. 모두 설정은 .plist 로 저장됩니다.


[Save] 버튼은 클라우드에 작업물을 저장하는 것으로 공유 및 판매용으로 사용됩니다. 판매할 생각이 없다면 Save를 하지 않는것이 좋습니다. ^^


그 외 기능들이 있지만 툴을 사용하면서 자연스럽게 알게 되는 기능이라 설명은 제외하도록 하겠습니다.


오늘 처음으로 파티클 제작툴에 대해서 메뉴를 만져본 것입니다. 깊게 파고들지는 못했고요... 내 Png를 적용하지 못하는 버그때문에 고생을 한 터라 해결 방법을 설명하는데 중점적으로 내용을 할애했습니다.


동일한 문제를 겪으신 분들은 도움이 되실 듯 합니다. :)


2D 게임에서 쉽게 파티클을 생성해서 게임이 적용해 보시기 바랍니다.

감사합니다.!!


WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret


안녕하세요 철사마 입니다.

Unity 오브젝트를 쓰다보면 안보이게 하기, 보이게 하는 기능을 쓸데가 종종 있습니다.

그리고 이 오브젝트가 보이게 설정되어 있는지, 안보이게 설정되어 있는지도 확인할 필요가 종종 있을 것입니다.


해보면 정말 간단하지만 찾아보기 전까지는 헷갈리는 API라서 공유합니다. :)


첫 번째,

오브젝트를 보이게, 안보이게 하는 API입니다.


GameObject.SetActive() (공식 레퍼런스 확인)


using UnityEngine;

using System.Collections;


public class ExampleClass : MonoBehaviour {

    void Example() {

        gameObject.SetActive(false);

    }

}


이 함수는 bool 형의 인자값을 명시하여 Object를 제어할 수 있습니다.

옵션으로 False는 안보이기, True는 보이게 할 수 있습니다. 





두 번째 

Object가 현재 어떤 보이기 설정으로 되어 있는지 확인하는 API입니다.


GameObject.activeSelf (공식 레퍼런스 확인)


이 API는 읽기 전용으로 값의 여부만 확인할 수 있습니다.

간단한 예제를 보면 이렇게 쉽게 구성할 수 있습니다.


if(gameObject.activeSelf == true)  

    // 오브젝트가 보이게 설정되어 있는 경우

}

else if(gameObject.activeSelf == false)

    // 오브젝트가 안보이게 설정되어 있는 경우


오브젝트를 제어할 때 중복되게 실행하지 않고, 오브젝트의 현재 설정에 따라 설정을 별도로 줄 수 있어 편합니다. ^^


짧은 포스팅이었습니다.

작게나마 도움이 되시길~~~!!



직접 해보고 추천하는 게임한당 펜페이지, 좋아요 하시고 간단 리뷰 스크랩하세요 ^-^



먹는 사진 다 올리는 먹는 즐거움, 먹방 펜페이지에 놀러오세요 ^-^




WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  1개가 달렸습니다.
  1. '사마사마' 사마 unity 생초보 인데 공부할려고 간단한 게임 개발 중입니다. 혹시 질문 좀 받아 주실 수 있나요?
secret

(출처 : 구글 이미지 검색)


(출처 : 구글 이미지 검색>


안녕하세요 철사마입니다.

Unity에서 많이 쓰이는 NGUI에 대해서 팁을 공유하려고 합니다.

NGUI는 Next-Gen UI의 약자로 Unity에서 많이 쓰이는 UI, 그래픽 관련 컴포넌트입니다.

(https://www.assetstore.unity3d.com/kr/#!/content/2413)


Unity에 NGUI를 설치하고 스프라이트나 위젯을 설정하면 콘솔창에 이상한 오류문구가 뜨는 경우가 있습니다.

"Ignoring menu item NGUI because it is in no submenu!"



빌드할때 오류가 발생하는 것은 아니지만, 계속 오류 표시가 보여지니 신경이 쓰이기 마련입니다.(저는 매우 신경쓰이네요!)

하지만 이 부분은 NGUI 버그로서 코드를 약간만 수정하면 쉽게 고칠 수 있습니다.


NGUI 패키지를 설치하면 자동으로 인스톨되는 파일 중에 NGUIMenu.cs 파일을 수정하면 됩니다.

NGUIMenu.cs 파일의 위치는 "NGUI > Script > Editer > " 입니다. 위의 스크린샷을 참고해 주세요 :)




NGUIMenu.cs 파일의 715라인 부분을 수정하면 됩니다.


파일을 열어보면 715라인 부분에 이런식으로 코드가 작성되어 있습니다.


이 부분에서 Breaker 부분을 삭제하고, Help Priority의 라인을 10을 추가하여 22로 수정합니다.


그 후에 Unity를 종료하고 다시 프로젝트를 로딩하면 더 이상 오류메시지가 보이지 않습니다.

참 쉽죠? ^^


Unity가 새로운 버전이 업데이트 되면서 NGUI와 살짝 충돌나는 경우가 있는 것 같습니다.(아마도 Unity 5.4.1 이상)

수정을 하지 않아도 빌드가 잘 되기 때문에 수정하지 않아도 상관은 없지만, 뭔가 신경이 쓰인다면 수정해 보세요~!

참고로 이런 오류가 발생하는 이유는 저도 잘 모르겠습니다. ^-^;;;

(그리고 최신 NGUI 버전에서 이 부분은 자연스럽게 고쳐질 수 있습니다.)


그럼 간단한 팁을 마칩니다 :)



직접 해보고 추천하는 게임한당 펜페이지, 좋아요 하시고 간단 리뷰 스크랩하세요 ^-^



먹는 사진 다 올리는 먹는 즐거움, 먹방 펜페이지에 놀러오세요 ^-^




WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

(출처 : 구글 이미지 검색)


안녕하세요 철사마 입니다.

이번 시간에는 Unity5의 버튼 클릭 이벤트에 대해서 정리해 보았습니다.


처음에 버튼 별로 스크립트를 짜고 오브젝트에 매번 붙여주는게 코드가 복잡해질 것 같아서 한번에 깔끔하게 할 순 없을까 하여 찾아보기 시작했습니다. 그런데 나름 답을 찾고 나니 버튼별로 기능이 천차만별이라 파일 하나로 뭉쳐서 하는게 과연 깔끔한 코드인가라는 생각이 들더군요. 정답은 없는 것 같습니다. 개발자의 취향에 맞게 하면 되겠죠. 기능별로 구분을 하는것이 오히려 코드를 깔끔하게 할 수 있지 않을까 생각이 들기도 합니다. ^^


우선 클릭에 관련된 이벤트에 대해서 알아보고, 스프라이트의 TAG를 활용하여 같은 클릭 이벤트에서 스프라이트 별로 다른 명령을 내릴 수 있어 일괄적으로 관리되는 느낌이 나도록 구성해 보았습니다.


버튼 클릭 이벤트르 만드는 방법은 다양합니다. 전 두가지만 설명하겠습니다. 다 설명하려니 너무 길어서요... ^~^


첫 번째 : 위젯에 Box Collider를 붙이고 스크립트에서 이벤트를 처리하는 방법

프로젝트 뷰에서 적당한 C# Script를 생성합니다. 그리고 아래와 같은 코드를 작성합니다.


using UnityEngine;

using System.Collections;


public class Onbutton : MonoBehaviour {


    UISprite m_Strite; // UISprite UI관련 컴퍼넌트를 선언합니다.


    void Awake()

    {

        m_Strite = GetComponent<UISprite>(); // 위젯에 연결된 스프라이트를 변수에 매칭합니다.

    }


    void OnClick() // 클릭이벤트가 발생했을때 이 함수를 호출합니다.

    {

        Debug.Log("Onclick");

    }

}



해당되는 오브젝트에 Add Component 를 눌러 Box Collider를 선택하여 클릭에 반응할 수 있도록 합니다.

Box Collider버튼 뿐만 아니라 각종 충돌체크에 사용되는 컴퍼넌트입니다.


추가로 위에 작성한 코드를 포함시켜 줍니다.


그렇게 하면 쉽게 클릭시 OnClick() 함수가 호출되게 됩니다.

여기서 참고할 사항은 Unity에서 자동으로 OnClick() 함수를 클릭시 자동으로 호출되는 함수로 인식한다는 것입니다.

이런 클릭관련 내장함수는 아래와 같이 몇가지가 있습니다.(중요한것만 추렸습니다.)


    void OnClick()

    {

        // 클릭시 반응

    }

    

    void OnDrag(Vector2 delta)

    {

        // 클릭 후 드래스시 반응

        // 아래 코드를 넣으면 대상 오브젝트가 드래그시 옮겨지는 것을 확인할 수 있습니다.

        m_Strite.transform.localPosition += (Vector3)delta;

    }


    void OnHover(bool isOver)

    {

        // 마우스 오버

  // 아래 코드르 넣으면 대상 오브젝트가 마우스 오버시 커지는 것을 확인할 수 있습니다. 

  // (모바일 디바이스에서는 당연하겠지만 확인이 불가능합니다.)

        m_Strite.cachedTransform.localScale = (isOver) ? Vector3.one * 1.2f : Vector3.one;

    }



두 번째 : 위젯에 Box Collider를 붙이고 UIButton 컴포넌트를 추가하고 스크립트에서 함수를 연결하여 오브젝트에 묶어 특정 함수만 처리하는 방법

우선 중간까지는 첫 번째 방식과 비슷합니다.

코드를 짜고, 오브젝트에 Box Collider를 추가합니다.

그리고 Add Component로 Button을 추가합니다. 

(UI Button으로 검색하면 안나올 수 있습니다. Button으로 검색해 주세요)


기본적으로 이 Component는 기본, 마우스 클릭, 오버 등 다양한 기능에 대하여 설정을 할 수 있습니다. 

(자세한것은 Inspector에서 이것저것 테스트 해보면 쉽게 알 수 있을 것입니다.)


Component 추가를 하면 기본으로 On Click이라는 메뉴가 생기게 됩니다.

여기에 함수를 추가한 Script를 연결하면, 함수리스트가 보여지며, 설정할 수 있게 됩니다.

주의해야 할 사항은 Script를 빈 오브젝트에 넣어서 오브젝트를 연결하는 것입니다.(주의!)

 - 그냥 스크립트를 끌어다 놓으면 연결이 되지 않습니다.

 - 오브젝트에 연결된 다양한 스크립트에 한번에 접근할 수 있다는 것입니다.(매우 유용해 보입니다.)

저는 GameMansger라는 빈 오브젝트를 만들어서 GameManager라는 C# 스크립트를 생성하여 OnClick()이라는 함수를 만들었습니다.

주의해야할 점은, 외부에 연결되는 함수이기 때문에 Public으로 설정하셔야 한다는 것입니다.

    public void OnClick()

    {

        Debug.Log("m_Start");

    }

이런 식으로 Public하게 함수를 구성해 주시면 됩니다.


추가로 첫 번째 처럼 다양한 이벤트에 대하여 설정을 연동하고자 한다면 Event Trigger Component를 추가하면 됩니다.





저는 개인적으로 첫 번째 방법이 구성하기에 용이해서 마음에 들었습니다.

그런데 다양한 버튼 이벤트에 대하여 버튼별로 액션을 구분할 방법이 있을까 해서 방법을 고민해 보았습니다.

바로  Tag를 활용하는 것이죠!


세 번째 : 첫 번째 방법에 코드에 Tag를 추가하여 버튼별로 한 코드로 통일해보기

첫 번째와 방법을 모두 동일합니다.

여기서 위젯인 스프라이트에 Tag라는 것을 추가해 보겠습니다.

Tag는 Inspector 메뉴의 상단에 위치해 있습니다. 기본적인 Tag가 있으며 Add Tag를 누르면 임의의 태그를 생성할 수 있습니다. 

전 편의를 위해 임의의 Tag를 생성했습니다.

그 후에 생성한 Tag를 위젯별로 Tag로 설정합니다.


그 후에 코드를 아래와 같이 추가합니다.


    void OnClick()

    {

        // Sprice에 태그를 해서 클릭했을 때 해당 태그의 값을 입력받음

        if (m_Strite.tag == "m_Start") 

        {

            Debug.Log("m_Start");

        }

        else if (m_Strite.tag == "m_Manual")

        {

            Debug.Log("m_Manual");

        }

        else if (m_Strite.tag == "m_Score")

        {

            Debug.Log("m_Score");

        }

        else if (m_Strite.tag == "m_Setting")

        {

            Debug.Log("m_Setting");

        }

        else if (m_Strite.tag == "m_Exit")

        {

            Debug.Log("m_Exit");

        }

        else

        {

            Debug.Log("이런 태그없어 : " + m_Strite.tag);

        }

    }


이렇게 하면 한 개의 소스파일로 여러가지 버튼의 클릭 이벤트를 구분하여 처리할 수 있습니다.

간단한 메뉴의 경우는 한개의 소스코드로 쉽게 구성을 할 수 있습니다.

물론 복잡한 구성일 경우는 별도로 소스를 구성하는 것이 훨씬 가독성이 좋아질 것 같습니다.


개인적으로 궁금했건 코딩방식이라 정리 차원에서 블로그에 적어놨습니다.

생각보다 쉬운 코드인데, 모르면 불편하더라구요 ^^


그럼 도움이 되었으면 좋겠습니다.

감사합니다.



직접 해보고 추천하는 게임한당 펜페이지, 좋아요 하시고 간단 리뷰 스크랩하세요 ^-^



먹는 사진 다 올리는 먹는 즐거움, 먹방 펜페이지에 놀러오세요 ^-^




WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

(출처 : 구글 이미지 검색)


안녕하세요 철사마입니다.

오늘은 오랜만에 Unity 개발에 대해서 유용한 팁을 소개해 드리려고 합니다.

모바일 게임을 만들면 광고가 아주 중요하다는 것을 아실 것입니다. 

무료 게임으로 유저에게 부담을 덜어주는 대신 개발자에게 수익을 얻을 수 있는 방법이라 유저와 개발자가 서로 윈윈할 수 있는것이 바로 광고 모델인 것 같습니다.


수많은 광고 플랫폼이 있지만 그중에 Admob 광고는 실제 수익적인 면에서 상당히 매력적인 플랫폼입니다.

게다가 Google거라서 신뢰가 좀 되기도 합니다. ^~^;

(출처 : 구글 이미지 검색)


홈페이지(https://www.google.co.kr/admob/) 입니다.

혹시 계정이 없으면 새로 하나 만들어보세요. 

가입도 무료, 광고 ID 생성방법 또한 매우 쉽습니다.


광고 형태는 총 3가지로 구분할 수 있습니다.

1. 일반배너 : 항상 하단이나 상단에 배치되는 띠배너를 의미합니다.

2. 전면배너 : 가끔 팝업으로 뜨는 전면 배너입니다.

3. 동영상 : 새로 추가된 건데 동영상 광고입니다.(이건 미디에이션이라고 해서 타 플랫폼 계정을 추가할 수 있습니다.)


메인 페이지 > 수익창출 탭에서 3가지 광고 형태를 생성할 수 있습니다.

이미 출시했거나, 아직 출시하지 않은 앱에 대해서 등록이 가능합니다.(안드로이드, iOS 모두 가능)


그리고 추가한 앱에 대하여 자유롭게 광고 형식을 추가할 수 있습니다.


그럼 애드몹에 광고 형식 추가 방법은 여기까지 하겠습니다.(이부분은 쉬우니 금방 하실 수 있을 거에요)


이제부터 중요한 Unity에서 어떻게 추가하는지 설명을 하려고 합니다. :)



우선 설명드리고 싶은 부분은...

Admob 공식 사이트에서는 Unity 기반에서 설정하는 방법이 좀 난해하게 되어 있습니다. 네이티브 기반으로 설명이 되어 있어서요

아마 안드로이드 스튜디오를 기반으로 설명을 해서 그런건 아닐까 합니다. Unity에 대한 배려가 좀 부족합니다.


그러나!!!

Unity에서 설정을 매우 쉽게 하는 방법이 있습니다.

커스텀패키지를 설치하면 바로 적용이 될 수 있도록 착한분(?)들이 만들어 주셨어요 ^^

자료는 여기 링크를 참고하시면 됩니다.

https://github.com/googleads/googleads-mobile-unity/releases/tag/v3.0.4

다운로드 합니다.(GoogleMobileAds.unitypackage)

GoogleMobileAds.unitypackage



다운로드를 받으셨으면 이제 Unity를 구동합니다.


해당 패키지를 Unity > Assets > Import Package > Custom Package 메뉴를 선택하여 설치합니다.


그럼 아래와 같이 Import 정보가 나옵니다. 모두 Import 합니다. (저는 이미 설치를 해서 new가 안나오는데 처음 깔면 new가 뜹니다.)


이제 준비가 모두 끝났습니다.

간단한 코딩을 통하여 구동을 해보도록 하겠습니다.






새로운 C# 파일을 생성합니다.


아래는 구동을 위한 소스코드입니다.

일반 배너, 전면 배너 두가지 입니다.(동영상은 어떻게 하는지 아직 모르겠네요;;)


<전면배너>

using GoogleMobileAds.Api; // Admob API를 쓰기 위해 설정해 둡니다.



    InterstitialAd mInterstitialAd = null; // 전면광고 변수


    public string mInterstitialAd_Key; // 전면배너 Key (이렇게 전역변수로 해 놓으면 Unity에서 값을 쉽게 넣을 수 있어서 편합니다. )


    string SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID = "디바이스 ID";



void Awake() // 제일 먼저 호출되는 함수입니다.( Start 보다 빠릅니다 )

{

    // 전면 광고 id 등록

    mInterstitialAd interstitial = new InterstitialAd(mInterstitialAd_Key); // 광고 ID로 API를 세팅합니다.

 

    // 애드몹 리퀘스트 초기화

    AdRequest request = new AdRequest.Builder()

        .AddTestDevice( AdRequest.TestDeviceSimulator )       // Simulator.

        .AddTestDevice( SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID)  // My test device.

        .Build();

    // 테스트 할 때는 테스트 디바이스로 등록을 해야한다고 합니다. 테스트를 상용으로 하면 광고가 안나올 수 도 있다고 하더군요.

    // AdRequest request = builder.Build(); <-- 실제 빌드시에는 이렇게 바꿔줍니다.

 

    // 애드몹 전면 광고를 로드합니다.

    mInterstitialAd.LoadAd( request );

 }


void Start()

{

    // 밑에 부분은 앱 실행 부분에 두면 광고가 안나온다. 실행 후 약간 얼마 뒤로 미루는게 좋다고 합니다

    // 로드 되어 있다면 광고 보여줌

    if ( mInterstitialAd.IsLoaded() )

    {

        mInterstitialAd.Show();

    }

}



<일반배너>

using GoogleMobileAds.Api; // Admob API를 쓰기 위해 설정해 둡니다.


    BannerView mBannerView = null; // 배너 출력


    public string mBannerView_Key; // 배너 Key


    string SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID = "디바이스 ID";



void Awake() // 제일 먼저 호출되는 함수입니다.( Start 보다 빠릅니다 )

{

    // BannerView(애드몹 사이트에 등록된 아이디, 크기, 위치) / AdSize.SmartBanner : 화면 해상도에 맞게 늘임, AdPosition.Bottom : 화면 바닥에 붙음

        mBannerView = new BannerView(mBannerView_Key, AdSize.SmartBanner, AdPosition.Bottom);

 

    // 애드몹 리퀘스트 초기화

    AdRequest request = new AdRequest.Builder()

        .AddTestDevice( AdRequest.TestDeviceSimulator )       // Simulator.

        .AddTestDevice( SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID)  // My test device.

        .Build();

    // 테스트 할 때는 테스트 디바이스로 등록을 해야한다고 합니다. 테스트를 상용으로 하면 광고가 안나올 수 도 있다고 하더군요.

    // AdRequest request = builder.Build(); <-- 실제 빌드시에는 이렇게 바꿔줍니다.

 

    // 애드몹 배너 광고를 로드합니다.

   mBannerView.LoadAd(request); //배너 광고 요청

 }


void Start()

{

    mBannerView.Show();  // 배너 광고 출력

}


처음에 Unity에 Admob을 설정할 때 가이드가 없어서 매우 난감했는데요, 커스텀 패키지를 활용하니까 매우 작업이 쉬워졌습니다. ^^

소스로 보여드린건 샘플에 불과하지만, 이 샘플을 실제 게임에 어떻게 붙여서 자연스럽게 구성할지는 다시 고민을 해야겠지요?


참고로!! 

잘 되다가 안되는 경우가 종종 있습니다.

아마도 광고 물량이 100% 수신되는게 아닌 것 같아요.

오류인줄 알고 한참을 봐도... 소스는 이상이 없는데 ^^;;;; 

제 개발력의 한계로 여기까지 파악이 됩니다.. (전 아직 로그를 출력해서 볼 실력이 안됩니다. 버그 나면 엄청 당황스러움...)


그럼 다음에 또 재미있는 팁으로 다시 올려드릴게요!!

감사합니다.



먹는 사진 다 올리는 먹는 즐거움, 먹방 펜페이지에 놀러오세요 ^-^



직접 해보고 추천하는 게임한당 펜페이지, 좋아요 하시고 간단 리뷰 스크랩하세요 ^-^




WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  1개가 달렸습니다.
  1. ArgumentException: Input Button Fire is not setup.
    해결좀해주세ㅕㅇ
secret

안녕하세요 철사마입니다.

모바일 게임에서 구글플레이 연동하는 게임 많지요?

구글로 연동하는 앱이나 게임을 열심히 하다가 앱이나 게임을 삭제하고 내 계정 정보도 모두 삭제하고 싶을 때가 있습니다.

그럴 땐??


우선 구글 플레이 게정 연결 삭제 방법은 아래 게시글을 참고해 주세요~

2016/06/01 - [News, Infomation] - [이용팁] 구글 플레이 연결된 앱 정보 삭제하기[Google Play, TIP]


이번에는 구글플레이에 연동되어 있는 세이브데이터 지우는 방법입니다.

구글플레이 연동하는 게임 중에 세이브 데이터를 구글로 업로드 하고 나중에 내려받는 게임들이 있습니다.

그런 앱이 많이는 없는데 서버 연동이 아닌 클라이언트 연동을 하는 앱 중에서 구글에서 제공해주는 기능을 이용하여 데이터 백업을 하는 경우가 종종 있습니다.


앱을 지워도 그 세이브 데이터는 계속 남아있게 되는데.. 좀 찝찝하시다면 직접 지워보세요!!


우선 보유하고 있는 구글계정으로 구글드라이브에 로그인을 합니다.

홈페이지 주소 : https://drive.google.com


혹시 G메일을 쓰면서 구글드라이브에 연동을 했으면 첨부파일이 여기에 보여질 수 있습니다.

(난 업로드 한 적이 없는데 웬 파일들이? 그렇게 오해하지 마시고~)


우선 다른건 필요없고 오른쪽 상단의 톱니바퀴의 "설정메뉴 > 설정"을 클릭합니다.


설정 창이 뜨면 "설정 > 애플리케이션 관리"를 클릭합니다.


세이브 데이터로 업로드된 서비스와 설명들을 확인할 수 있습니다.


우측의 옵션을 클릭하여 데이터를 삭제할 수 있습니다.

"숨겨진 앱 데이터 삭제"를 누르면 저장된 세이브 데이터를 삭제할 수 있습니다.


또한 "드라이브에서 연결 해제"를 선택하면 앱 연결 자체를 깔끔하게 삭제할 수 있습니다.

전혀 쓰지 않거나 잘 안쓰거나 안쓰고 싶은 앱이 있다면 삭제해도 괜찮겠지요?


참고로 기본으로 깔려있는 데이터 앱은 삭제할 수 없습니다.






깔끔한 내 정보를 원한다면...

데이터  세이브 파일도 깔끔하게 정리해 보는 건 어떨까요? ^^

지금까지 쉽지만 찾으려면 어려운 구글플레이 데이터세이브 파일 삭제 방법이었습니다. :)





WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  2개가 달렸습니다.
  1. 비밀댓글입니다
    • 게임의 데이터는 핸드폰에 플레이게임이라고 앱이 있는데 거기서 지울 수 있습니다. 근데 게임별로 지울수 있는게 아닌 것 같아서 시도는 안해봤습니다. 앞으로 기능이 업데이트 되면 가능하지 않을까 싶네요 :)
secret


안녕하세요 철사마입니다.

요즘 모바일게임에서 구글플레이 연동하는 게임이 상당히 많습니다.(페이스북도 엄청 많지만요)

구글로 연동하여 앱이나 게임을 열심히 하다가 앱이나 게임을 삭제하고 내 계정 정보도 모두 삭제하고 싶을 때가 있을거에요

그 때 어떻게 하는지 궁금하시죠? 지금 설명 들어갑니다~


우선 "구글 내 계정 정보"로 로그인 합니다.

홈페이지 주소 https://myaccount.google.com/


구글은 계정 정보에 대하여 한 곳에서 모든 관리를 할 수 있다고 합니다.

우선 왼쪽 중간의 빨강색으로 표시해 둔 "연결된 앱 및 사이트"를 클릭합니다.



클릭을 하면 "내 계정 > 로그인 및 보안 > 연결된 앱 및 사이트" 메뉴로 이동하게 됩니다.

구글플레이 계정으로 연결된 앱이 58개나 되네요 ㄷㄷ

그럼 빨강색으로 표시해둔 앱관리 버튼을 눌러서 상세 정보를 확인해 보겠습니다.


정말 많은 앱 리스트가 보입니다.


리스트를 클릭하면 상세 정보를 볼 수 있습니다.

전 그중에 뭔지 잘 모르겠는 이름을 클릭해 보았습니다. 

역시 상세 정보를 봐도 잘 모르겠네요..

승인 날짜가 2월 5일이라고 하니 벌써 몇개월이 지났습니다.






이 앱을 삭제하고 싶으면 상단의 선택취소 버튼을 클릭합니다.

액서스 권한 삭제를 하면 더이상 엑서스가 안된다고 경고를 하고 있습니다.

뭐 어짜피 쓰지도 않는거면 삭제해도 괜찮겠지요.. 확인 버튼을 클릭!


확인 버튼을 누르면 상단에 삭제가 완료 되었다고 알림이 뜹니다. 참 간단합니다






나중에 필요하면 다시 연결하면 됩니다. 그러니 너무 긴장안해도 될것 같네요!

하지만 경우에 따라서 앱에 대한 사용 정보가 사라져 다시 연결하면 초기화가 되는 경우가 있어요!

잘 안쓰는 앱은 지우고 자주 쓰는거라면 안지우는게 좋겠지요? ^^


그럼 쉽지만, 하려고 하면 잘 모르겠는 구글플레이 앱 삭제하기 팁을 마치겠습니다.

감사합니다.~ :)


WRITTEN BY
사마사마
IT, 게임 그리고 유익하고 재미있는 다양한 정보를 소개합니다.

트랙백  0 , 댓글  2개가 달렸습니다.
  1. 다시 연결하려면 어떻게 해야 하나요?
  2. 궁금해요! 2017.05.14 06:35 신고
    연결된 앱 지우고 다시 복구하고 싶을때는 어떻게 해야하죠??
secret