'유니티/Note'에 해당되는 글 104건

  1. 2014.04.07 delegate, action, event 활용 관련
  2. 2014.03.27 안드로이드 In-app Billing Version 3 - 구글번역
  3. 2014.02.24 파이어 폭스 유용한 부가기능
  4. 2014.02.18 유니티 광고 수익
  5. 2014.02.18 유니티 개발 시작
  6. 2014.02.16 삼각함수 관련
  7. 2014.02.16 벡터
  8. 2014.02.14 메카닉 관련 유니티 제공 에셋
  9. 2014.02.04 유니티 2D 배경에 카메라 맞추기
  10. 2014.02.04 유니티 창 여러개 띄우기

delegate, action, event 활용 관련

|

음.. 저도 처음에 .net freamwork generic관련 함수들을 만났때 이해하기 상당히 어려웠던기억이.... 
검색을 하거나 외부 플러그인 소스를 살펴보면 
delegate, action, event가 자주 눈에 띄는데,  <- 이부분을 직접 분석해가면서 공부했던게 큰도움이 되었습니다. 

아주간략하게 예를 원하시면. 

event의경우 delegate를 담을 그릇으로 보시면되고 
delegate의경우 method를 담는그릇으로 보시면 됩니다. 머 c++의 함수포인터와 거의 비슷한놈이라 보시면 됩니다. 
  
만약에 게임전체에서 사용될 POPUP(YES , NO버튼을 가진)에서 사용될 popup class를 구현할시 

public class Popup : Pannel{ 

public delegate void PopUpEvent(); // void 타입 delegate 선억 
public event PopUpEvent ClickYes; // yes클릭시 실행할 event선언 
public event PopUpEvent ClickNo; // no클릭시 실행할 event선언 
public void ClickYes(){ ClickYes(); } 
public void ClickNo(){ ClickNo(); } 


이런식으로 구현을 해두면 추후에 popup을 활용히 void()타입의 method는 뭐든지 (yes/no버튼의) 
콜백 이벤트로 사용할수 있습니다. 

public void testEvent(){ 
// yes 버튼 눌렸을때 실행 


이런식의 void 형 method를 콜백으로 지정해주고싶으시면 

ClickYes += testEvent; 이런식으로 담을수있습니다. 
ClickYes -= testEvent; 이런식으로 뺄수도 있구요 ^^ 






Class 1 

public delegate void DelegateResultCallback(bool flag); 
DelegateResultCallback _delegateCallback; 

    //콜백 등록 
    public void SetCallBack(DelegateResultCallback callback) 
    { 
        if (_delegateCallback == null) 
        { 
            _delegateCallback = callback; 
        } 
    } 


Class 2 

Class1.SetCallBack(new Class1.DelegateResultCallback(OnResult)); 

//콜백 리턴 함수 구현 
void OnResult(bool flag) 







delegate는 쓰기 나름이지만 대체적으로 게임에서는 이벤트 처리에서 많이 쓰입니다. 예를들어 플레이어를 어떤 몹이 공격을 합니다. 단순히 체력만 깍는 문제면 monster.attack(player) 같은 함수를 만들어 쓰면 되지만 몹이 공격에 대한 반응이 체력도 깍이면서 상태 이상도 일으켜야 되고 넉백도 되면서... 등등 요구에따라 계속 반응이 늘어갈 경우 매 함수를 다 만드는것 보단 딜리게이트를 플레이어에 선언하고 다음과 같이 씁니다. 

public delegate void MobInteraction(interaction_type type); 
public MobInteraction mobinteractions; 
몹이 타격시 player.mobinteractions(짱쌘공격); 

이후 새로운 처리가 필요 할때 마다 이런 식으로 추가만 해주면 되어 확정성이 좋아 집니다. 
동적으로 처리를 빼고 끼고 할 수있어서 재미있는 반응을 게임상에서 만들 수도 있죠..(특정 트리거에가면 저주가 발동해서 저주 반응 처리기를 추가하는 등) 
void KnockBackProcesser(interaction_type type) 

 if(type == 짱쌘공격) 
  { 
    //넉백처리 
  } 

player.mobinteractions += KnockBackProcesser; 




음.. 제대로 설명할 자신은 별로 없지만.. 
delegate(event도 연관되죠..)는 C++에서 CallBack 함수하고 같은 기능을 합니다. 

[실생활에서 delegate와 비슷한 상황을 말한다면..] 
1) 손님이 카페에 갑니다. 
2) 손님이 카페에서 주문을 합니다. 
3) 손님이 주문하면 점원은 결재를 하고 원격으로 call 하는 기계(이름 몰라요..;;)를 손님에게 줍니다. 
    기계안에 delegate로 호출 event를 등록 하고 줬습니다. 
4) 카페에서는 누가 주문을 했는지는 모르고 주문번호(기계에 붙은 번호)와 들어온 걸 만듭니다. 
5) 점원이 주문한 내용을 다 만들고 나면, 주문자가 누군지는 모르지만 주문번호의 기계를 호출(call) 합니다. 
6) 손님은 누가만들었는지는 몰라도 기계가 울리니깐 카운터로 가서 주문한 음료를 받아서 돌아갑니다. 

[게임에서라면..] 
간단하게 GameManager와 Player가 있다고 하겠습니다. 
Player가 죽는 경우의 처리에 대해서 어떻게 처리할 것인가..만 간단히 생각해 보겠습니다. 
예를 드는거라 두가지만 간단하게 극단적으로 말하자면.. 

1) GameManager의 Update에서 Player의 HP를 항상 체크하면서, 혹은 죽었는지를 항상 체크하면서 죽으면 어떤 처리를 하는 방식.(매 Update 주기마다 호출함) 

2) GameManager가 Player에게 delegate로 Dead event를 넘겨줍니다. 그 후에 Player 자신이 죽었을 때 Dead event를 발생(1회 호출함)시켜서 GameManager에게 죽었다고 알립니다. 


delegate-event를 사용하면, 위에서 보시다시피 2)번이 호출 횟수도 적고 로직상 연관성이나 상하관계를 안가지더라도 무언가 이벤트가 일어났을 때 알려줄 수 있습니다. 

좀 극단적인 비교였습니다만.. 
대충 이럴 때 사용하는구나..라고 생각하심이.. =_= 

P.s. 더 자세한 설명은 아랫 분이 해주실거에요. (..)





델리게이트는 보통이벤트핸들링, 리스닝(통칭 이벤트 핸들링이라 하겠습니다)을 위해서 씁니다. 
이벤트핸들링에는 대충 몇가지 의미가 있는데, 크게 보면 모두 다 피동적인 액션을 취할때 사용합니다. 
누군가가 나를 호출하므로서 내가 호출당하기 위해 사건에 개입하는 일이 없게됩니다. 
즉, 사건과 그로인한 행위를 분리할 수 있는것입니다. 

더욱이 델리게이트는 C++에서 이 이벤트핸들링을 위해서 사용하던 함수포인터라는 개념을 더더욱 쓰기좋게 만들어둔 형태로 
여러가지 확장기능이나 편의기능이 제공됩니다. 

몇가지 예를 들어드리면 다음과 같습니다. 
버튼을 누르면 월드내 생성되는 오브젝트 전체가 죽는다고 가정합시다. 
이걸 이벤트핸들링 없이 처리하면, 버튼이 눌렸을 시점을 IF문등으로 체크하여 
모든 오브젝트를 돌며 죽는 처리를 해야할 것입니다. 

foreach(WorldInObject obj in ..) 
    obj.die(); 


그러나 델리게이트를 사용하면, 이것에 대한 코드를 안짜도 됩니다. 
모든 오브젝트의 어미에 미리 void OnButtonPressed(){ this.die(); } 를 선언하고 관장하는쪽에 등록 해두기만하면 전혀 호출할 필요가 없습니다. 
왜냐하면, 버튼이 눌렸을 경우 버튼을 관장하는 매니저에서 OnButtonPressed를 자동으로 호출할 것이기 때문입니다. 

그리고 그 것을 호출하는데에는 우리가 아니더라도 그쪽에서 for문을 돌필요도 없습니다. 하나의 행위자에 같은 행위를 지닌 수많은 오브젝트를 포함할 수 있기때문이죠.(잘은 모르겠지만 대리자(delegate)위임이라는 기능일겁니다.) 

우리가 해야할일은 매니저의 OnButtonPressed 행위자에 우리 오브젝트를 등록해주면됩니다. 


매니저는 아마 다음처럼 구현되어있을겁니다. 

class ButtonManager{ 
delegate void ButtonPressedEvent(); 

// 델리게이트를 사용하기위한 변수입니다.(변수이자 함수로 봐도 무방합니다) 
ButtonPressedEvent onButtonPressed; 

// 이벤트를 핸들링 하기위해 버튼매니저에 오브젝트를 등록받는 함수입니다. 
void Regist(WorldInObject obj){ 
    this.onButtonPressed += obj.OnButtonPressed; 


// 이렇게도 등록할 수 있습니다. 
void Regist(ButtonPressedEvent buttonPressedEvent){ 
    this.onButtonPressed += buttonPressedEvent; 


// 이것도 버튼을 주관하는 다른곳에서 쏴주는 거라고 칩시다. 
void OnButtonPressed(){ 
    this.onButtonPressed(); 


이걸 메서드 위임이라고 합니다. 그밖에도 다양한 기능들이 있는데요. 
저도 사실 델리게이트를 잘 안써서 이런식으로 써본적은 없지만 기본적인 사용예는 되었으리라고 봅니다. 
(델리게이트의 사용법이나 용어들이 좀 틀렸을수도 있는데 일단 말씀드리고자 하는 포인트는 맞으니 그부분만 봐주시면 됩니다;) 

조금 더 나가볼까요? 
위의 코드는 오브젝트 내의 메서드를 전달해서 오브젝트 입장에서는 피동적으로 메서드가 호출될 것입니다. 
그 호출되는 메서드를 상속없이도 동적으로 변경할 수도 있습니다. 

class WorldInObject{ 
    ButtonManager.ButtonPressedEvent OnButtonPressed = null; 


저 객체가 생성될 시점에서... 
WorldInObject obj = new WorldInObject(); 
obj.OnButtonPressed = new delegate(){ 
  // obj.die(); // 아까전의 this.die(); 와 같습니다. 
  obj.alive(); // 살아나는것으로 바뀌었네요. 

  // 즉, 상속하지 않고도 이제 객체마다 다른 행위를 할 수 있게 되었습니다! 


델리게이트를 잘 사용하면 이벤트 규격(함수형태)만 잘 정의하면 필요한정보를 필요한 오브젝트 전원에게 
힘들이지 않고 전달하는 일이 가능합니다. 

가령, 객체집합군 중에서 일정의 객체에만 특정한 무언가를 전달하기위해서 복잡한 코딩을 안해도 됩니다. 
당연히 포문같은걸 돌 필요도 없구요... 어찌보면 함수를 변수화한다는 모든 개념이 적용될 수 있기때문에 
행위의 바리에이션이 좀 더 다양해지면서도 코드의 구축에 힘들일 필요가 없어집니다. 
(단순한 이벤트리스너라면 여기서 하드코드가 안섞일 수 없겠지만 델리게이트는 그런식으로 작업하지 않아도 좋은 결과를 낼 수가 있을것입니다.) 

사용법은 무궁무진한데 갑자기 쓰려니까 딱히 정리가 안되네요. 
C#을 사용하는 개발에서 델리게이트 안쓰면 좀 손해가 큽니다. 

아무튼 이정도만해도 상당히 유용한것을 아시리라 봅니다.



만족하셨다니 다행입니다. 
아침에 쓰고 집에가서 보니 조금 설명이 부족한 부분이 있는데요. 
물론 따로 쓰지 않아도 이해하셨겠지만은... 

버튼매니저의 이 부분에서... 

void OnButtonPressed(){ 
    this.onButtonPressed(); 


다시 설명드리면 ButtonManager.OnButtonPressed 함수 역시 다른곳에서 호출하는 함수이며(왜냐하면 버튼이 눌렸는지 체크하는 루틴은 반드시 모든 코드 내에 하나는 있어야되는데 쓰기가 번거로워서 이놈도 다른 버튼이 눌렸는지 체크하는 곳에서 체크되는 이벤트 핸들러라고 썼습니다;;) 

이 함수가 호출될때 매니저 내의 델리게이트를 함수로 호출하여, 델리게이트에 등록된(+=) 다른 객체의 동일 포맷의 함수를 
같이 호출시켜주는 겁니다. 

이부분이 좀 미흡한듯하여 보충합니다.


Trackback 0 And Comment 0

안드로이드 In-app Billing Version 3 - 구글번역

|

In-app Billing Version 3

인 - 앱 결제 버전 3 API는 쉽게 당신이 당신의 응용 프로그램에 인 - 앱 결제를 통합 할 수 있습니다. 이 버전의 특징은 개선 된 동기 구매 흐름, 쉽게 소비 제품의 소유권을 추적 할 수있는 API 및 응용 프로그램 내 구입 데이터의 로컬 캐싱 (가) 있습니다.

Product Types


당신은이 제품의 종류, 상품, 가격, 설명, 등, 구글 플레이 개발자 콘솔을 사용하여 제품을 정의합니다. 자세한 내용은 인 - 앱 결제 관리를 참조하십시오.버전 3 API는 관리되는 응용 프로그램 내 제품 및 구독을 지원합니다.

Managed In-app Products

관리되는 응용 프로그램 내 제품은 자신의 소유권 정보가 구글 플레이에 의해 추적 및 관리가 항목입니다. 사용자가 관리되는 응용 프로그램 내 아이템을 구입하면, 구글은 상점에게 사용자별로 각 항목에 대한 구매 정보를 재생합니다. 이것은 나중에 구글이 특정 사용자가 구매 한 상품의 상태를 복원 할 수있는 시간에 재생 쿼리 할 수 ​​있습니다. 그들은 장치를 변경하면, 사용자가 응용 프로그램을 제거하거나해도이 정보는 구글 플레이 서버에 영구적이다.

당신은 버전 3 API를 사용하는 경우, 당신은 또한 응용 프로그램 내에서 항목을 관리 사용할 수 있습니다. 일반적으로 (예 : 게임 중 통화, 연료, 또는 마법의 주문 같은) 여러 번 구입 할 수있는 항목에 대한 소비를 구현하는 것입니다. 일단 당신이 항목을 소비 할 때까지 관리 항목이 구글 플레이에 소비 요청을 보내, 다시 구입할 수 없습니다, ​​구입했습니다. - 응용 제품 소비에 대한 자세한 내용을 보려면, 항목 사용을 참조하십시오

Subscriptions

가입하면 매월 또는 매년 반복 청구하여 응용 프로그램 내에서 사용자에게 콘텐츠, 서비스 또는 기능을 판매 할 수 앱내 결제에서 제공하는 제품의 유형입니다. 당신은 응용 프로그램이나 게임의 모든 유형에서, 디지털 콘텐츠의 거의 모든 유형에 대한 구독을 판매 할 수 있습니다. 구독이 작동하는 방식을 이해하려면, 인 - 앱 결제 구독을 참조하십시오.

Important: Unlike in-app products, subscriptions cannot be consumed.

Purchasing Items


Figure 1. The basic sequence for a purchase request.

인앱결제 3의 일반적인 구매 흐름

  1. application 은  용하는 인 - 앱 결제 API의 대상 버전이 지원되는지 확인하는 isBillingSupported 요청을 Google Play 에 을 보냅니다. (버전확인단계)
  2. application 이 시작되거나 사용자가 로그인하면, 사용자가 소유하는 어떤 항목을 결정하는 구글 플레이에 확인하는 좋은 방법입니다. 사용자의 응용 프로그램 내 구입을 조회하려면, getPurchases 요청을 ​​보냅니다.요청이 성공적이면, 구글 Play를 구매 한 품목, 개별 구매 상세 목록 및 구매에 대한 서명리스트 제품 ID 목록을 포함하는 Bundle을 반환한다.
  3. 보통, 당신은 구입에 사용할 수있는 제품의 사용자에게 알리는 것이 좋습니다. 당신이 구글 플레이에 정의 된 응용 프로그램 내 제품의 세부 사항을 조회하려면, 응용 프로그램 getSkuDetails 요청을 ​​보낼 수 있습니다. 당신은 쿼리 요청에 제품 ID의 목록을 지정해야합니다. 요청이 성공하면, 구글의 플레이는 제품의 가격, 제목, 설명 및 구매 유형 등 제품의 세부 사항을 포함하는 Bundle 반환합니다.
  4. 응용 제품이 사용자가 소유하지 않은 경우, 당신은 그것을 구매를 시작할 수 있습니다.구매 요청을 시작하려면 응용 프로그램이 다른 매개 변수와 함께 구매하는 항목의 제품 ID를 지정 getBuyIntent 요청을 보냅니다. 당신은 개발자 콘솔에서 새 응용 프로그램 내 제품을 만들 때 제품 ID를 기록한다.
    1. 구글 플레이는 응용 프로그램 구입을위한 체크 아웃 UI를 시작하는 데 사용하는 PendingIntent가 포함 된 번들을 반환합니다.
    2. 응용 프로그램이 startIntentSenderForResult 메서드를 호출하여 보류중인 의도를 시작합니다.
    3. 체크 아웃 흐름 완료 (즉, 사용자가 성공적으로 아이템을 구매하거나 구매를 취소입니다), 구글의 플레이는는 onActivityResult 메서드에 응답 의도를 보낼 때.는 onActivityResult의 결과 코드는 구입이 성공 또는 취소 여부를 나타내는 결과 코드가 있습니다. 응답 의도는 구글이 유일하게이 구매 거래를 식별하는 플레이에 의해 생성 된 purchaseToken 문자열을 포함하여 구입 한 항목에 대한 정보가 포함되어 있습니다.의도는 개인 개발자 키로 서명 구입의 서명이 포함되어 있습니다.

To learn more about the Version 3 API calls and server responses, see In-app Billing Reference.

Consuming In-app Products


당신은 인앱 제품의 사용자의 소유권을 추적하기 위해 소비 메커니즘을 사용할 수 있습니다.

버전 3에서는 모든 인앱 제품을 관리합니다. 이것은 모든 앱에서 아이템 구매에 대한 사용자의 소유권이 구글 플레이에 의해 유지되는 것을 의미하고, 필요할 때 응용 프로그램은 사용자의 구매 정보를 조회 할 수 있습니다. 사용자가 성공적으로 앱에서 제품을 구입하면, 그 구매는 Google 플레이에 기록됩니다.앱에서 상품이 구입되면, 그것은 "소유"것으로 간주된다."소유"상태에있는 인앱 제품은 구글 플레이에서 구입 할 수 없습니다. 구글의 플레이를 다시 구입이 가능하게하기 전에 "소유"- 응용 제품에 대한 소비 요청을 보내야합니다.- 응용 제품을 소비하는 것은 "소유자가없는"상태로 복귀하고 이전의 구매 데이터를 삭제합니다.

Figure 2. The basic sequence for a consumption request.

제품의 사용자가 소유 한 목록을 검색하려면 응용 프로그램 getPurchases 구글이 플레이에 전화를 보냅니다. 응용 프로그램은 consumePurchase 호출을 전송하여 소비 요구를 할 수 있습니다. 요청 인수에, 당신은 그것을 구입 한 경우는 구글 플레이에서 얻은 - 응용 제품의 고유 한 purchaseToken 문자열을 지정해야합니다. 구글 플레이는 소비가 성공적으로 촬영 한 경우를 나타내는 상태 코드를 반환합니다.

Non-consumable and Consumable In-app Products

그것은 당신이 아닌 소모품이나 소모품으로 앱내 제품을 처리 할 것인지 여부를 결정하기 위해 당신에게 모든 것이 달렸습니다.

Non-consumable Items
일반적으로, 당신은 당신의 응용 프로그램에서 한 번 구입하고 영구적 인 혜택을 제공 할 수있는 앱 제품에 대한 소비를 구현하지 않을 것입니다. 한 번 구입 한, 이러한 항목은 영구적으로 사용자의 Google 계정에 연결됩니다. 비 소모품 - 응용 제품의 예는 프리미엄 업그레이드 또는 수준의 팩입니다.
Consumable items
반면에, 당신은 구입 여러 번 사용할 수 할 수있는 항목에 대한 소비를 구현할 수 있습니다. 일반적으로 이러한 항목은 특정 일시적인 효과를 제공합니다. 예를 들어, 사용자의 게임 내 캐릭터의 라이프 포인트를 얻을 수 있습니다 또는 자신의 인벤토리에 추가 금화를 얻을 수 있습니다. 응용 프로그램에서 구입 한 상품의 장점이나 효과를 분배하면 응용 프로그램 내 제품을 프로비저닝이라고합니다. 당신은 통제하고 인앱 제품이 사용자에게 프로비저닝하는 방법을 추적 할 책임이 있습니다.

Important: Before provisioning the consumable in-app product in your application, you must send a consumption request to Google Play and receive a successful response indicating that the consumption was recorded.

Managing consumable purchases in your application

여기에 소비 - 응용 제품을 구입하기위한 기본 흐름은 :

  1. getBuyIntent 호출을 구매 흐름을 시작합니다
  2. 구매가 성공적으로 완료하면 응답 Bundlefrom 구글 플레이를 나타내는 받기
  3. 구입에 성공하면, consumePurchase를 호출하여 구입을 소비
  4. 소비가 성공적으로 완료 여부를 나타내는 구글 플레이에서 응답 코드를 얻을.
  5. 소비가 성공하면 제공 응용 프로그램의 제품입니다.

사용자가 응용 프로그램에서 시작하거나 로그인 할 때 사용자가 응용 프로그램 내 제품 미결제 소모품을 소유하고있는 경우 그 후, 당신은 확인해야합니다, 그래서 경우, 해당 항목을 소비하고 제공해야합니다. 응용 프로그램에서 소비 인앱 제품을 구현하는 경우 다음은 권장되는 응용 프로그램 시작 흐름은 다음과 같습니다

  1. 사용자의 소유 인앱 제품을 조회 할 getPurchases 요청을 ​​보냅니다.
  2. 응용 제품 소모품을가있는 경우, consumePurchase를 호출하여 항목을 사용합니다. 응용 프로그램이 소모품에 대한 구매 주문을 완료 되었으나, 중지 또는 응용 프로그램이 소비 요청을 보낼 수있는 기회가되기 전에 분리있어 수도 있기 때문에이 단계가 필요합니다.
  3. 소비가 성공적으로 완료 여부를 나타내는 구글 플레이에서 응답 코드를 얻을.
  4. 소비가 성공하면 제공 응용 프로그램의 제품입니다.

Local Caching


구글은 클라이언트가 현재 장치에 로컬로 결제 정보 - 응용 프로그램 캐시 플레이하기 때문에, 당신은 getPurchases 호출을 통해 예를 들어, 더 자주이 정보를 쿼리하는 버전 3 API를 사용할 수 있습니다.API의 이전 버전과는 달리, 여러 버전 3 API 호출이 캐시 조회를 통해 대신 크게 API의 응답 시간을 단축 구글 플레이에 대한 네트워크 연결을 통해 서비스됩니다.


Trackback 0 And Comment 0

파이어 폭스 유용한 부가기능

|

Adblock Plus
All-in-One Sidebar
Tab Mix Plus
FireGestures
Pocket
Zoom Page
AutoPager
QuickFox Notes
Locationbar²
Quick Search Bar
SelectionSK

'유니티 > Note' 카테고리의 다른 글

delegate, action, event 활용 관련  (0) 2014.04.07
안드로이드 In-app Billing Version 3 - 구글번역  (0) 2014.03.27
파이어 폭스 유용한 부가기능  (0) 2014.02.24
유니티 광고 수익  (0) 2014.02.18
유니티 개발 시작  (0) 2014.02.18
삼각함수 관련  (0) 2014.02.16
Trackback 0 And Comment 0

유니티 광고 수익

|

애드몹, 카울리 등 광고를 붙이는 방법을 모색해보자.


'유니티 > Note' 카테고리의 다른 글

안드로이드 In-app Billing Version 3 - 구글번역  (0) 2014.03.27
파이어 폭스 유용한 부가기능  (0) 2014.02.24
유니티 광고 수익  (0) 2014.02.18
유니티 개발 시작  (0) 2014.02.18
삼각함수 관련  (0) 2014.02.16
벡터  (0) 2014.02.16
Trackback 0 And Comment 0

유니티 개발 시작

|

유니티 개발에 있어서 최대한 많은 습작을 만드는게 좋을 것 같음.

책에 있는 내용들은 거의 그대로 따라하는 방식으로 작업을 했었음.

그 이후에는 각종 예제 소스들을 분석해가면서 작업.

그리고 자기만의 게임을 만들어야 될듯.


일단 책에 있는 게임 예제들을 책을 안보고 혼자서 해보는 방식으로 개발하는것도 괜찮을 것 같음.

유니티의 장점은 에셋이 없어도 프로토타입을 쉽게 만들 수 있는 것이기 때문에.





'유니티 > Note' 카테고리의 다른 글

파이어 폭스 유용한 부가기능  (0) 2014.02.24
유니티 광고 수익  (0) 2014.02.18
유니티 개발 시작  (0) 2014.02.18
삼각함수 관련  (0) 2014.02.16
벡터  (0) 2014.02.16
메카닉 관련 유니티 제공 에셋  (0) 2014.02.14
Trackback 0 And Comment 0

삼각함수 관련

|

코사인 90도는 0

코사인 0도는 1


사인 90도는 1

사인 0도는 0


'유니티 > Note' 카테고리의 다른 글

유니티 광고 수익  (0) 2014.02.18
유니티 개발 시작  (0) 2014.02.18
삼각함수 관련  (0) 2014.02.16
벡터  (0) 2014.02.16
메카닉 관련 유니티 제공 에셋  (0) 2014.02.14
유니티 2D 배경에 카메라 맞추기  (0) 2014.02.04
Trackback 0 And Comment 0

벡터

|

벡터의 해석


1. 위치

2. 속도와 가속도

3, 방향과 거리




(위치)                                                                 (속도)                                                ( 방향)                                      (거리)











스칼라

- 방향을 가지고 있지 않고 크기만 가지고 있는 물리량(온도,길이,속력)


벡터의 표현 방법


v = (x,y)


벡터의 덧셈


c = a + b = (a.x, a.y) + (b.x, b.y) = (a.x + b.x , a.y + b.y)


예) 벡터를 사용해 계산해보자

위치가 p = (3,2) 이고 여기에 속도 벡터 v = (-2,3)을 더해보면 다음과 같은 위치값을 얻을수 있다.

`p = (3 + -2, 2+3) = (1,5) 이때 p 오른족 위에 있는 어퍼스트로피는 단지 p 벡터를 구했음을 나타내는 표시이므로 신경쓸 필욘 없다.

물론 이 연산은 위치와 방향 벡터 단위가 서로 일치할때만 말이 된다. 여기서는 미터(m)이고 속도가 초당 미터(m/s)라고 가정할때 벡터단위가 일치한다.


벡터의 뺄셈


c = a -b = (a.x, , a.y) - (b.x, b.y) = (a.x - b.x, a.y - b.y)

  

 이때도 두 벡터의 요소를 서로 합치기만 하면 된다. 하지만 벡터의 뺄셈을 뺄때는 빼는 순서가 중요하다. 

예를 들어서 pg=(1,4) 에 있고 pr = (6,1) 에 있으면  pg에서 pr의 거리 벡터를 빼면 다음과 같다.


 d = pg - pr = (1,4) - (6,1) = (-5,3)


그런데 결과가 약간 이상합니다. 이 값은 pr에서 pg를 가리키는 벡터이기 때문입니다. 원하는 값을 구하려면 뺄셈의 순서를 반대로 해야된다.


 d = pr - pg = (6,1) -  (1,4) = (5,-3)


위치 a에서 위치 b로의 방향 벡터를 구하려면 다음과 같은 일반 공식을 사용해야 한다.


c = b - a


다시 말해서 항상 끝 위치에서 시작 위치를 빼야 하는 것이다. 


벡터는 스칼라만큼 곱할 수도있다.

a` = a * scalar = (a.x * scalar, a.y * scalar)

벡터가 d =(0, -1) 로 지정되면 이 벡터에 s= 2스칼라를 곱하면 벡터의 길이를 두배로 만들수있다. d * s = (0, -1 * 2) = (0, -2)
물론 1보다 작은 스칼라를 사용하면 길이를 더 줄일수도 있다 예를 들어 d에 0.5를 곱하면 d` = 0, -0.5) 가 된다.

벡터의 길이

|a| = sqrt(a.x * a.x + a.y * a.y)

이때 |a| 의 표기는 벡터의 길이를 나타낸다. (피타고라스의 정리)

벡터의 길이는 루트의 특성상 항상 양의 값이다.

위의 pr과 pg의 벡터의 길이는 다음 과 같다.
|pr - pg| = sqrt(5 * 5 + -3 * -3) = sqrt(25 +9) = sqrt(34) ~= 5.83m


단위벡터

길이가 1인 벡터를 단위 벡터라고 한다.

d` = (d.x/|d|, d.y/|d|)

|d|는 벡터의 길이입니다.

예를들어 정확히 북동쪽으로 향하는 방향 벡터 d (1,1) 이 필요하다고 가정하자 얼핏 보기에는 두 벡터 요소 모두 1이므로 이 벡터는 이미 단위 벡터 처럼 보인다. 하지만 이는 잘못된 생각이다.
|d| = sqrt(1*1, 1*1) = sqrt(2) ~= 1.44

이 벡터를 단위 벡터로 만들면 문제를 쉽게 해결할수있다.

|d| = (d.x/|d|, d.y|d|) = (1/|d|, 1/|d|) ~= (1/1.44, 1/1.44) = (0.69, 0.69)

이를 벡터 정규화라고 한다 벡터 정규화는 벡터의 길이 값을 1을 갖게 만듦을 뜻한다.





'유니티 > Note' 카테고리의 다른 글

유니티 개발 시작  (0) 2014.02.18
삼각함수 관련  (0) 2014.02.16
벡터  (0) 2014.02.16
메카닉 관련 유니티 제공 에셋  (0) 2014.02.14
유니티 2D 배경에 카메라 맞추기  (0) 2014.02.04
유니티 창 여러개 띄우기  (0) 2014.02.04
Trackback 0 And Comment 0

메카닉 관련 유니티 제공 에셋

|


teddy.z01


teddy.z02


teddy.z03


teddy.z04


teddy.zip


'유니티 > Note' 카테고리의 다른 글

삼각함수 관련  (0) 2014.02.16
벡터  (0) 2014.02.16
메카닉 관련 유니티 제공 에셋  (0) 2014.02.14
유니티 2D 배경에 카메라 맞추기  (0) 2014.02.04
유니티 창 여러개 띄우기  (0) 2014.02.04
현재 보고 있는 Scene와 똑같이 Game 뷰를 보는 방법  (0) 2014.02.04
Trackback 0 And Comment 0

유니티 2D 배경에 카메라 맞추기

|

배경화면에 꽉 차게 카메라를 맞추는 방법

스프라이트의 Pixels To Units 값에 의해서 결정된다.

디폴트 값은 100이며 만약 배경화면의 높이가 640이라고 하면. 유니티 상에서는 6.4 유닛이 되며

그 절반인 3.2 를 카메라의 사이즈에 대입하면 딱 맞게 화면에 보여진다.


관련 표 다.



Trackback 0 And Comment 0

유니티 창 여러개 띄우기

|

다른 소스들이나 스크립트등을 참고할대 여러개의 유니티 창을 띄우고 싶을 때가 있음

1. Edit > Preferences 

2. General > Always Show Project Wizard 체크


확인을 누르고 유니티를 실행하면 어떤 프로젝트를 열지 확인하는 창이 뜬다.




Trackback 0 And Comment 0
prev | 1 | ··· | 6 | 7 | 8 | 9 | 10 | 11 | next