블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2795)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

정규식을 이용하여 특정 문자만 얻는 방법을 알아보겠습니다.

 

- Namespace : System.Text.RegularExpressions

- Class : Regex

- Method : 

 

 public static string Replace(
string input,
string pattern,
string replacement
 )

 

 

1. 숫자만 얻기

 - 정규식 : [^0-9]

1
2
3
4
5
6
string str = "Englsh@korea$101299**한글";
 
// 숫자만 0-9
str = Regex.Replace(str, @"[^0-9]""");
 
// 결과 : 101299
cs

2. 영문자만 얻기

 - 정규식 : [^a-zA-Z]

1
2
3
4
5
6
string str = "Englsh@korea$101299**한글";
 
// 영문자 a-z A-Z
str = Regex.Replace(str, @"[^a-zA-Z]""");
 
// 결과 : Englshkorea
cs

 

3. 한글만 얻기

 - 정규식 : [^가-힣]

1
2
3
4
5
6
string str = "Englsh@korea$101299**한글";
 
// 한글만 가-힣
str = Regex.Replace(str, @"[^가-힣]""");
 
// 결과 : 한글
cs

 

4. 특수문자 제거

  - 정규식 : [^0-9a-zA-Z가-힣]

1
2
3
4
5
string str = "Englsh@korea$101299**한글";
// 특수문자 제거
str = Regex.Replace(str, @"[^0-9a-zA-Z가-힣]""");
 
// 결과 : Englshkorea101299한글
cs

 

※ 위의 예에서와 같이 정규식을 잘 이용하면 얻고자 하는 문자를 쉽게 처리 할 수 있습니다.

 

 

[출처]

http://docko.tistory.com/entry/C-%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AC%B8%EC%9E%90-%EB%B3%80%ED%99%98

반응형
Posted by blueasa
, |

유니티 애즈(Unity Ads)를 이용하여, 광고를 시청하면 골드를 보상받는 예제를 포스팅합니다.


 구현하고자 하는 기능은 다음과 같습니다.

* 구현 기능

 - 버튼 클릭 -> 유니티 애즈 시청 -> 골드 보상




 다음은 작업의 전체 순서입니다.

#1. 유니티 애드 설정 (Web 작업)

#2. 유니티 프로젝트 적용 및 테스트 (Unity3D, 디바이스 작업)



#1. 유니티 애드 설정 


1. https://unityads.unity3d.com에 로그인 합니다.


2. 게임탭에서 '+새 게임 추가'를 클릭합니다.


3.플랫폼을 선택(안드로이드)하고, '여기'를 클릭합니다. 출시전이므로 어플리케이션 찾기를 건너뜁니다.


4. 이름을 입력하고, '게임 추가'버튼을 클릭합니다. 정보 인증 설정후 '계속'을 클릭합니다.


5. 게임탭에 새 게임이 추가되었습니다. 게임 ID는 본문 뒷부분에서 코드(UIManager.cs)에 사용합니다. 

 게임 이름(UnityAdsTest)을 클릭합니다.


6. '수익화 설정'탭에서, '고급 설정 보기'를 클릭합니다.


7. Video ad placement의 '설정'을 클릭합니다.


8. 옵션을 설정합니다. 강제 시청을 위해 '동영상 건너 뛰기 허용' 항목의 체크를 제거하고, '저장'을 클릭하여 완료합니다.




#2. Unity 프로젝트 적용 및 테스트


1. Unity3D 새 프로젝트를 생성합니다. 타이틀은 UnityAdsTest로 하였습니다.


2. Unity Ads 패키지를 임포트합니다. 유니티 애셋 스토어에서 다운받을 수 있습니다. (https://www.assetstore.unity3d.com/en/#!/content/21027)


3. Canvas및 버튼(BtnUnityAds)을 생성합니다. 각 설정은 임의로 합니다.


4. C# 스크립트, UIManager.cs를 생성하고 다음의 코드로 대체합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using UnityEngine;
using System.Collections;
 
using UnityEngine.UI;
using UnityEngine.Advertisements;
 
public class UIManager : MonoBehaviour {
 
    public Button _BtnUnityAds;
    ShowOptions _ShowOpt = new ShowOptions();
    int _Gold = 0;
 
    void Awake()
    {
        Advertisement.Initialize("63660"true);
        _ShowOpt.resultCallback = OnAdsShowResultCallBack;
        UpdateButton();
    }
 
    void OnAdsShowResultCallBack(ShowResult result)
    {
        if (result == ShowResult.Finished) _Gold += 100;
    }
 
    void UpdateButton()
    {
        _BtnUnityAds.interactable = Advertisement.IsReady();
        _BtnUnityAds.GetComponentInChildren<Text>().text 
            = "See ads and earn gold\r\nGold = " + _Gold.ToString();
    }
 
    public void OnBtnUnityAds()
    {
        Advertisement.Show(null, _ShowOpt);
    }    
 
    void Update() { UpdateButton(); }
}
 
cs

- 15: Advertisement.Initialize( "게임ID", 테스트광고 여부 )

게임ID는 유니티 애드 사이트에서 얻을 수 있습니다.

: 출시전 테스트를 위해서 테스트 광고 여부 인자를 true로 합니다. 

> true: 테스트용 광고가 나옵니다.

> false: 실제 광고가 나옵니다.


- 20: OnAdsShowResultCallBack( ShowResult result )

: 광고 보기후 호출되는 콜백입니다. result인자의 값에 따라 처리합니다.


- 27: _BtnUnityAds.interactable = Advertisement.IsReady()

Advertisement.IsReady()는 광고가 보여줄 수 있는 상태인지를 반환하는 함수입니다. 보여줄 수 없다면 버튼을 비활성화 시킵니다.


5. UIManager를 Canvas의 컴포넌트로 삽입합니다.


6. Canvas의 인스펙터창에서 UIManager: Btn Unity Ads의 인자로 BtnUnityAds오브젝트를 지정합니다.


7. BtnUnityAds의 OnClick 이벤트를 지정합니다. 오브젝트는 Canvas로, 함수는 UIManager:OnBtnUnityAds로 합니다.


8. 안드로이드 플레이어 설정을 마친후 빌드하여 테스트합니다.

    : 실행하면 버튼이 잠시후 활성화됩니다. ( Advertisement.IsReady() )


: 버튼을 클릭하면 보여지는 테스트용 광고


: 광고 종료후 Gold가 100으로 되었습니다.



출처 : http://gnupart.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%95%A0%EB%93%9CUnity-Ads-%EC%84%A4%EC%A0%95-%EB%B0%8F-%EC%A0%81%EC%9A%A9

반응형
Posted by blueasa
, |


[링크] http://lnz5.tistory.com/273

반응형
Posted by blueasa
, |

DeployGate App을 찾아보니 AOS는 있는데

[DeplayGate AOS App] https://play.google.com/store/apps/details?id=com.deploygate&hl=ko


 iOS App이 없어서 찾아보니 따로 설치해야 돼서 정리해 놓음.



[DeplayGate iOS App 설치]


1) 아이폰-사파리에서 아래 주소로 접속한다.(사파리에서 해야됨)

   [링크] https://deploygate.com/connect/iphones



2) 아직 로그인하지 않은 경우 로그인 화면이 뜬다. 로그인 해주자.

   (회원가입이 안했으면 우선 회원가입부터..)



2) 사파리에서 열면 아래 스샷처럼 나온다.

   'Install DeployGate'를 누르자.



3) 진행하면 '프로파일 설치' 화면이 뜬다.

   얘도 설치해주자.




4) 설치하고나면 아래와 같은 화면이 보인다.

   아직 올린게 없어서 아무것도 없는 상태다. 업로드는 홈페이지(https://www.deploygate.com) 가서 올리면 됨.






[iOS App 설치 참조]

https://deploygate.uservoice.com/knowledgebase/articles/418294-ios%E7%89%88%E3%81%AEdeploygate%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86

반응형
Posted by blueasa
, |

안드로이드에서 테스트 앱 배포 관련 좋은 방법이 없나 찾던중 아래 기사를 보고 deploygate 사이트를 찾았다.


http://techcrunch.com/2012/09/18/deploygate-simple-over-the-air-real-time-app-beta-testing-comes-to-android/


사용법도 간단하고 좀더 테스트 해봐야 알겠지만 일단 진행 중인 프로젝트에 적용해 보기로 했다.


https://deploygate.com/ <- 여기 사이트를 들어가면 상단에 Sign up 클릭 하여 가입을 한다.


기존에 GitHub, Google 계정이 있으면 해당계정을 아래 화면에 맞게 입력하고 가입 하면 된다. 나는 테스트 계정을 만들어서 가입했다.




가입 -> 로그인을 하면 아래 화면에서 Upload App을 선택해서 업로드 하면 끝! 정말 간단하다!





위에 절차를 다 하면 Gooogle Play Store 에서 DeployGate 검색해서 단말에 설치 하고 DeployGate 실행하면 설정 화면에서


가입한 계정으로 로그인 하면 기본 세팅은 완료!


앱 상단 메뉴에서 INSTALLED는 현재 단말에 설치되어 있는 목록을 보여주는거고 AVALABLE는 현재 deploygate 사이트에 현재 업로드된


파일 목록을 보여준다.







앱을 수정을 하고 다시 배포를 할려고 하면 


deploygate  https://deploygate.com 사이트에 들어가서 수정된 앱을 다시 Upload App 선택하여 업로드 하면 앱을 설치된 사용자 한테


PUSH가 간다~ 끝!





좀더 테스트 해봐야 알겠지만 급한대로 쓸만한거 같다~ 




[출처] http://devlsh.tistory.com/entry/DeployGate-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%95%B1-%EB%B0%B0%ED%8F%AC

반응형
Posted by blueasa
, |

[링크] http://www.sonniss.com/gameaudiogdc2016/


[사용권] http://www.sonniss.com/gdc-bundle-license/




[출처] http://gpgstudy.com/news/item/1410

반응형
Posted by blueasa
, |

 

 

 

화창한 가을 약채한정식으로 건강 챙기기

 

**위치**

경기도 성남시 분당구 운중동 55-4(하오개로 366-6)

한국학 중앙 연구원 입구

(주변 대중교통이 없으니 자동차로 이동)

**메뉴**

약정식(기본)13,000원

채정식(평일 점심) 11,000원

약채정식 16,000원

시골여행정식 23,000원

보리굴비정식 25,000원

**영업시간**

오전 11시~오후 9시30분/연중무휴

 

---------------------------------------------------------------------

 

날씨가 무지막지하게 좋았던 지난 한글날

집에 있기 아쉬워 야외로 고고~!

성남 판교 근처 외곽에 한적한 식당들이 몰려있고, 예쁜 빌라도 많다고 해서 바로 향했다.

 

우리가 찾은 곳은 <시골여행>이라는 한정식 집이다.

성남에선 꽤 이름난 곳인 듯

점심시간 지난 뒤에도 사람들이 북적였다.

 

 

[주변 살펴보기]

늦은 점심 도착한 주차장

외곽에 있어서 주차 걱정은 전~혀 할 필요가 없다.

 

 

 

 

입구를 들어서면 큰 호박덩어리들이 반겨준다.

 

저렇게 큰 호박은 매년 이맘 때 즈음 시골 할머니댁에서 종종 볼 수 있었는데

할머니께선 늙으셔서 밭에서 딸 힘이 없다고

매번 말씀하셨던게 생각이 났다.

 

 

 

 

문 앞엔 각종 약초(?) 같은 것들을 투명용기에 담아 보관해두었다.

조명아래 은은히 비치는게 운치있다. 

 

 

 

 

계산대 앞엔 각종 스타들의 사인들로 벽을 가득 채웠다.

 

 

 

 

이곳의 가장 큰 특징인 남자밥과 여자밥

대부분 밥보단 메인음식을 강조하는데 이곳은 밥에 중점을 둔거 같아 마음에 들었다.

차이점은 밥에 들어가는 육수였다.

 

 

 

 

실제로 문가엔 남자밥과 여자밥에 들어가는 물을 달이는 기구가 따로 있었다.

 

 

 

 

한켠에 마련된 셀프 포장

한정식은 반찬 가짓수가 많아서 남기는게 대부분인데

이곳은 남은 음식을 포장해 갈 수 있게 일회용 용기를 준비해둔게 마음에 들었다.

 

 

 

[주문 메뉴&본격 식사]

 

채정식은 평일 런치에만 된다고 해서 패스~

우리가 주문한건

약채정식

 

약채정식과 약정식의 차이는 낙지볶음과 코다리가 추가되는게 다르다.

2인에 6,000원 차이기도 하고

한정식 대부분은 기본만 먹어도 배부르기에

주문했는데

약정식만으로도 충분할거라는게 결론이다.

 

 

 

[기본반찬]

 

녹두죽

어떤 블로그에선 가장 기억에 남는 음식으로 꼽았던 메뉴.

녹두의 부드러운 식감과 달지 않은 담백함이 좋았다.

 

 

 

 

녹두죽을 다 먹으면 한상 차려진다.

식사를 하기전 거한 에피타이저라고 생각하면 된다.

 

 

 

 

보들보들 수육

 

차갑지 않았고, 기름기가 쪽 빠져서 고소고소했음

 

 

 

 

와사비 소스를 곁들인 생 팽이버섯 샐러드

 

별거 아닌거 같은데 먹어보니 톡 쏘는 맛에 중독됐다.

 

 

 

검은깨소스를 첨가한 양상추 샐러드

 

직접 만든 듯 소스가 엄청나게 고소했음

 

 

 

잡채

 

미리 만들어 놓을 수 밖에 없는 메뉴인지라 면이 불어있고, 겉에 윤기가 없었음

솔직히 이건 내가 만든게 더 맛있다고 생각됐다.

 

 

 

호박크림소스 새우

 

바로 튀긴 듯 바삭한 식감이 살아있었다.

한정식과는 어울리지 않는 메뉴지만 맛은 좋았음

 

 

 

참나물 무침과 곁들어 나온 숯불갈비

 

조금 짰지만 육질이 부드럽고 숯향이 배어 있었음

 

 

 

[약채정식 포함 추가 메뉴]

 

코다리 조림

 

두께가 2센티 정도 될법할 정도로 두툼한게 특징

한번 튀겨낸 다음 달콤짭짤하게 조려내었는데

전통방식으로 요리한 건 아닌 듯하다.

어른들보단 아이들에게 인기있을 메뉴

 

 

 

낙지볶음

 

살이 통통오른 낙지들이 많이 들어있었고, 알맞게 조리해서 부드러운 식감을 유지하고 있었다.

 기본 찬들이 양이 많아

나중에 보니 거의 건들이지 않았더라는 ㅠ.ㅠ

식구가 많지 않다면

그냥 기본메뉴 주문하길 다시 한번 추천한다.

 

 

 

낙지볶음, 코다리 조림, 숯불갈비는 식사를 위해 남겨두고 나머지는 올킬~!

 

 

[메인 식사]

 

참으로 궁금했던 여자밥

두둥~!

 

헷갈리지 않게 돌솥밥 뚜껑에 여자밥이라고 써 있음

뚜껑을 여니

대추, 은행, 호두, 호박씨 등이 들어있고, 밥이 갈색빛이 돌 만큼 어두웠다.

그렇다고 약초향이 강하진 않고

은은하면서 구수한 맛이 입안을 감돌았다.

확실히 일반 물로 밥을 지은 것과는 다른 풍미를 느낄 수 있었음

 

 

 

 

이건 남자밥

여자밥과 달리 색이 진하지 않다.

남자밥이라 맛은 따로 안봄 

 

 

 

 

밥을 빈 공기에 덜어낸 후에 돌솥그릇엔 보리차물을 넣으면 구수한 여자밥 숭늉이 만들어 진다.

 

 

 

[이제부턴 식사 밑찬들]

 

들깨버섯볶음

 

 

 

 

맛살마늘쫑볶음

 

 

 

 

 

말린 표고로 만든 표고버섯무침

 

 

 

 

이게 뭐였더라

말린시래기무침이었나

 

 

 

 

배추 겉절이

 

 

 

 

제일 별로였던 간장게장

게장의 핵심인 게가 신선하지 않아서 살이 으스러지고 비린맛도 강했다.

 

 

 

 

아 이게 시래기 무침이네

그럼 위에 있던건 뭐지ㅡ.ㅡa

 

 

 

 

달큰새콤했던 호박장아찌

 

 

 

 

식사 반찬 중 가장 맛있었던 조기구이

생선이 작아서

살이 있을랑가 싶었는데 속이 꽉차 있고 비린맛도 없어서 야무지게 다 멋었다.

게장보다 훨 맛있었음

 

 

 

 

도라지무침

 

 

 

 

 

멸치볶음

 

 

 

 

내용물이 푸짐했던 된장찌개

 

 

 

 

한상 거하게 먹은 뒤 배 두둘기고 있는데

호박식혜라며 후식을 주심

 

호박식혜는 처음 먹어봤는데, 호박맛이 많이 나서 신기했다.

식혜와 달리 걸리는 건더기가 없어서 바로 원샷~!

입구에 있었던 호박이

바로 이 호박식혜를 만든 호박인가?ㅎㅎ

 

 

 

 

식사를 하고 나오면 문 오른편 통로에 커피 마시면서 앉아있는 공간이 있다.

 

 

 

 

각 테이블엔 꽃잎을 띄운 항아리가 앙증맞게 자리잡고 있었다.

주인의 정성이 느껴지는 공간

 

***

이곳은 확실히 밥이 맛있는 집이었다.

가격도 비싼편이 아니라서 차가 있으면 한번씩 방문하면 좋을 듯

가족끼리 가면 건강도 챙기면서

이야기거리가 많아 재밌게 식사를 할 수 있는 곳일 듯 하다.

 

 

 

 


[출처] http://daldalspace.tistory.com/118

반응형

'나만의 맛집' 카테고리의 다른 글

[펌] 사천복요리 :쉐프 문경희는 위로 그 자체♥  (0) 2020.02.13
[신현리] 고향생각  (0) 2015.09.08
Posted by blueasa
, |

[링크] http://cafe.naver.com/jgplan

반응형
Posted by blueasa
, |
 

在Unity3D的Legacy动画系统中应用Root Motion

标签: unity3d动画Root Motion
 5591人阅读 评论(2) 收藏 举报
 分类:
 

目录(?)[+]

最近仔细比较了Unity3D目前版本中的两套动画系统:Legacy和Mecanim。Mecanim系统功能较之Legacy要强大很多,但是使用AnimatorController着实不方便(尽管使用AnimatorOverrideController可以避免重复编辑状态机),是因为游戏逻辑层面往往要用一个状态机或者类似的机制来控制角色的状态,而角色层面的状态逻辑和动画层面是无法一一对应的,两套复杂的状态机要配合起来。。。想想就觉得蛋疼啊!难怪很多朋友现在还在使用Legacy动画系统。Legacy动画系统其实功能也很全面了,包括Layer、过渡混合、上下身混合之类的功能完全能够胜任,而且控制起来就直接的多了。唯独Root Motion这个我很需要特性没有支持,本文就探讨一下如何在Legacy动画系统之上附加Root Motion功能,其实很简单大笑

何谓Root Motion

在不使用Root Motion的情况下,类似走、跑这样的位移控制是这样的:
  1. 请美术在导出动画时把位移去掉;
  2. 在程序代码里控制角色移动的速度,在播放动画的同时,计算其位移。
这种做法其实挺不科学的,程序控制的角色,只能当做一个质点来处理,并且大多数时候都是匀速运动,而动画中的角色的移动往往很难跟这个匹配。所以需要比较良好的计算和比较好的美术技巧才能避免角色“滑步”的现象。在“跑”这种快速移动这,滑步还比较好处理,如果是慢速移动。。。。再厉害的美术也爱莫能助了。这种情况下,最好还是使用Root Motion:
  1. 美术在导出动画的时候是附带位移的;
  2. 程序把动画的每一帧的位移是从动画中读取出来,再应用到角色上的,这样就能达到动画和位移的完美匹配了。

在Legacy中添加Root Motion功能

了解了Root Motion的概念之后,在Unity3D引擎中我们很简单就可以实现此功能了。Unity3D有一个统一的对象层次结构设计,这点非常赞,我们可以很简单找到角色的根骨骼,然后把其中的Transform变换读取出来,请见以下示例代码:
[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //-- 计算当前帧的Root Motion  
  2.             Vector3 rootPos = m_rootBone.localPosition;  
  3.             m_rootMotion = rootPos - m_lastRootPos;  
  4.             m_lastRootPos = rootPos;  
  5.             rootPos.x = 0;  
  6.             rootPos.z = 0;  
  7.             m_rootMotion.y = 0;  
  8.             m_rootBone.localPosition = rootPos;  
请注意,我们在后续的代码中要把m_rootMotion附加的角色对象上,所以m_rootBone的postion被reset了。
在读取了此帧的Root Motion,在可以把它应用到当前对象之上了:
[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //-- Apply Root Motion  
  2.     Vector3 nextPos = this.transform.position + m_rootMotion;  
  3.         this.transform.position = nextPos;  
另外,一个细节需要处理一下,在动画循环的那一帧,需要特殊处理一下。好的,看一下完整的源代码吧:
[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class ApplyRootMotion : MonoBehaviour   
  5. {  
  6.     public Transform m_flagObject;  // 用来测试位置的一个对象  
  7.   
  8.     //-- Root Motion 控制变量  
  9.     Transform m_rootBone;  
  10.     Vector3 m_lastRootPos;  
  11.     Vector3 m_rootMotion;  
  12.     int m_lastAnimTime;  
  13.   
  14.     void Start ()   
  15.     {  
  16.         //-- 从SkinnedMeshRenderer中读取Root Bone  
  17.         SkinnedMeshRenderer skinMesh = this.gameObject.GetComponentInChildren<SkinnedMeshRenderer>();  
  18.         m_rootBone = skinMesh.rootBone;  
  19.   
  20.         //-- 变量初始化  
  21.         m_rootMotion = Vector3.zero;  
  22.         m_lastRootPos = m_rootBone.localPosition;  
  23.         m_lastAnimTime = 0;  
  24.     }  
  25.       
  26.     void Update ()   
  27.     {  
  28.         //-- Apply Root Motion  
  29.         Vector3 nextPos = this.transform.position + m_rootMotion;  
  30.         this.transform.position = nextPos;  
  31.   
  32.         //-- 测试代码:更新测试物体的位置  
  33.         Vector3 flagPos = m_flagObject.position;  
  34.         flagPos.x = nextPos.x;  
  35.         flagPos.z = nextPos.z;  
  36.         m_flagObject.position = flagPos;  
  37.   
  38.         //-- 测试代码:更新摄像机  
  39.         Camera.main.transform.LookAt(this.transform);  
  40.     }  
  41.   
  42.     void LateUpdate()  
  43.     {  
  44.         AnimationState animState = this.animation["walking"];  
  45.   
  46.         if ((int)animState.normalizedTime > m_lastAnimTime)  
  47.         {  
  48.             //-- 动画循环处理  
  49.             m_lastRootPos = m_rootBone.localPosition;  
  50.             m_rootMotion = Vector3.zero;  
  51.         }  
  52.         else  
  53.         {  
  54.             //-- 计算当前帧的Root Motion  
  55.             Vector3 rootPos = m_rootBone.localPosition;  
  56.             m_rootMotion = rootPos - m_lastRootPos;  
  57.             m_lastRootPos = rootPos;  
  58.             rootPos.x = 0;  
  59.             rootPos.z = 0;  
  60.             m_rootMotion.y = 0;  
  61.             m_rootBone.localPosition = rootPos;  
  62.         }  
  63.         m_lastAnimTime = (int)animState.normalizedTime;  
  64.     }  
  65. }  

最后是截图。。。好吧,静态图片看不出效果,可以下载完整Demo(请使用Unity 4.6版本打开),角色移动非常平滑,毫无滑步。

请移步百度网盘:http://pan.baidu.com/s/1o6kJsIe 密码:osoc






반응형
Posted by blueasa
, |

크런치

Etc / 2016. 3. 27. 15:45

크런치(crunch)는 crunch time이라는 숙어 ‘극도의 긴장이 필요한 때’에서 온 것으로 보이는데, 게임업계에서 개발 막바지 일정 기간 동안 야근과 철야를 밥먹듯이 해 개발을 완료해내는 그런 상태를 말한다. 그래서 “오늘부터 1개월간 크런치 모드입니다”라는 말은 “앞으로 한 달 동안은 죽었다고 생각하고 매일 야근 합시다”라는 뜻이다.

이 크런치에 대해서는 업계 내에서 오랫동안 다양한 의견이 있어왔다. 워렌 스펙터는

[…] “크런치는 창조적 매체에서 미지의 요인을 가지고 일하기 때문에 발생하는 결과입니다. 게임 개발은 항상 미지로 가득하기 때문에 퀄리티를 높이려 분투하는 개발사에서는 항상 크런치를 하게 돼요. […] 30년간 게임을 만들었는데 전 아직도 크런치 없이 인정할 만한 수준의 게임을 만드는 마법사는 본적이 없어요.”

라고 이야기를 했다고 하고, 스타독(Stardock)의 데릭 팩스턴은

“게임 업계의 기업들과 사람들은 크런치에 써버린 시간을 훈장처럼 자랑하는짓을 그만둬야 해요. 크런치는 망가진 업무 절차와 관리의 결과입니다. 크런치로 직원들이 희생됩니다. 전 왜 크런치가 다른 업계에서는 이슈가 되지 않는데 왜 게임회사들에만 이슈가 되는지 묻고 싶군요.”

라고 이야기를 했다고 하며, 개인적으로 만나본 여러 개발자들도 크런치의 필요성이나 효과에 대한 다양한 증언이 있었다.

그런데 얼마 전부터 가마수트라에 올라오기 시작한 게임 개발 성과 측정 프로젝트(한국어 번역)에서 분석한바에 따르면

우리의 결과물은 명백하게 크런치가 비범한 결과물을 낳지 않는다는 사실을 보여줍니다. 실제로는 크런치는 항상 게임을 덜 성공적으로 만듭니다. 프로젝트가 크런치를 이용해서 구덩이에서 빠져나오려고 발버둥 치면, 발밑의 구덩이가 더 깊어지는 결과를 낳을 뿐입니다.

이라고 확정적인 결론을 내렸다. 이 연구에서도 언급하지만,

한편, 경영학에서는 방대한 규모의 입증된 연구결과를 통해 연속된 초과근무는 건강생산성, 인간관계, 사기, 조직 몰입도,의사 결정 능력을 망치고 심지어 알콜 남용의 위험성을 높인다는 사실이 확인되어 있습니다.

대량의 입증된 경영학 연구에서는 근로자들의 총 생산성이 겨우 몇 주만 초과근무해도 음수로 변한다는 사실을 보여주고 있습니다. 근무시간을 일간 8시간에서 9시간으로 늘리면 총 생산성은 무려 16-20%가 감소합니다. 겨우 몇 주만 50시간을 근무해도 해당 기간 동안의 총 누적 생산량이 주당 40시간 근무했을 때보다 오히려 더 줄어듭니다. – 추가적인 주당 10시간의 근무는 실제로는 근로자들의 총 생산량을 감소시킵니다. 동시에 근로자들의 스트레스를 증가시키며, 인간관계를 목 조르고, 제품의 결함률을 높입니다.

다른 모든 산업에서는 초과 노동이 생산성에 전혀 기여하지 못하고, 오히려 부정적인 효과만 작용을 하는데, SW 업계에서는 이 크런치가 효과가 있다는 믿음을 여전히 가지고 있다는 것이다.

사실 이 문제는 게임 개발의 품질이나 생산성, 열정에 대한 문제 이전에 기본적인 개발자 삶의 질에 대한 이야기에서 출발해야 한다. 2013년 8월 게임 산업 종사자 실태조사에서 출퇴근 시간과 평균 야근 시간을 조사했던 것은 이런 맥락에서였다.

특히나 게임산업이 젊은 개발자들의 열정을 빨아먹는 산업이 아니라 다른 모든 산업들처럼 안정적이고 평범한 산업 환경이 되기 위해서는, 종사자들의 삶이 안정되어야 하고, 그러기 위해서는 일과 삶의 균형을 (개발자 스스로 맞추기에 앞서) 기업이 만들어줘야 하기 때문이다.

이미 그 열악하다던, 흥행 산업의 대명사인 영화 업계도 오랜 부당 노동(초과 근로와 최저 임금에도 못 미치던) 환경을 개선하는 노력으로 노조를 구성했으며, <국제시장>은 표준근로계약서를 도입해 그간 스탭들을 착취하던 관행을 깼다. 심지어는 만화계에서도 처우 개선에 대한 이야기가 시작됐다.

개발자가 게임업체를 다니면서 결혼하고, 자식을 낳고, 키우면서 가족과 행복하게 저녁을 먹는 그런 삶을 누리는 것이, 결국에는 개발자를 재충전하게 해주고 더 좋은 게임을 만들 수 있는 환경이 될 것이다. 그리고 그렇게 ‘안정적인 직업’이 될 때 젊은 지망생과 개발자들이 개발자로 업계에 입문할 꿈을 꾸고 살아가는 그런 환경이 될 것이라고 생각한다.

게임의 흥행 성공률이 낮다는 이유로 개발자들을 싸게 초과 근로를 인사 고과에 반영하면서 갈아 넣어서는, 단기적으로는 프로젝트를 끝낼 수 있겠지만 장기적으로는 경험 있고 실력 좋은 개발자를 업계에서 밖으로 밀어내는 결과를 낳는다.

당장 크런치를 없앨 수는 없을 수 있다. 하지만 적어도 우리가 이런 잘못된 개발 환경으로 인해서 무엇을 놓치고 있는지, 어떻게 개선하면 어떤 것을 얻을 수 있는지는 고민해볼 때가 됐다고 생각한다.

한국에서 게임 개발이 ‘산업’이 된지도 이제 20년이 되어 간다. 생각을 해볼 때다.


출처 : http://nairrti.works/2015/02/27/crunch/

반응형
Posted by blueasa
, |