'Developer/GAME'에 해당되는 글 34건

  1. 2006/04/21 글뻥 스케치업으로 시작하다.
  2. 2006/04/07 글뻥 free 3D game Engine인 irrlicht으로 만들어 보기로 최종결정
  3. 2006/04/07 글뻥 Ovorp C# 2D Game Engine
  4. 2006/03/29 글뻥 C# vs C++ in Game Engine (4)
프로 SW개발자로 들어선것이 1999년이니 햇수로만 개발현장을 떠나지 않고 지킨것이 16년정도 되는 군요.
수 많은 사업들에 참여하였고, 현재는 게임개발자로 남은 연료를 태우고 있습니다만,
사람 마음이란게 참 재미있는것 같습니다.

SI현장에서 만난 고객도 그러했고,
게임개발현장에서 만난 고객도 그러했고,
심지어 내부 고객도 그러했으며, 월급주는 상황에서도 똑같은 경험을 하게 되는데...

대부분의 경우, 더 자세히는 "새로운 것을 만들자"라고 시작하는 일의 경우,
정작 새로운 것을 만들어 놓으면 듣는 이야기가...
"뭐야 이거 무서워"
사용자 삽입 이미지
그렇다고, 이미 익숙한 걸 건네주면...
"지금 나랑 싸우자는 것임?"
사용자 삽입 이미지

매커니즘으로 분석해보면 대부분의 사용자(USER)들은 다음의 심리를 가지고 있다는 사실을 알 수 있습니다.
- 새로운걸 내게 보여줘! 새로운 경험을 하게 해달라고... 하지만, 너무 새로우면 내가 무서우니까 니까 잘 알아서 무섭지 않으면서도 새로운 걸 내놔. 

즉, "새로움 추구" -> 막상 새로운 걸 만나면 "시발 무서워" 또는 막상 익숙한 걸 만나면 "지금 나랑 싸우자는 것임?"

다시 말해, 개발자는 사용자(USER)가 익숙한 시스템과 UX는 추구하되 시각적으로 다름을 추구해야 합니다.
이를 게임에서는 "장르"라고 하죠. 네넵.

다시말해 "장르"라는 것에 충실히 따른다는 것은 "사용자가 익숙한 시스템을 추구하되 시각적으로는 다름을 추구한다는 뜻과 같습니다."
여기에 하나에서 두개 정도의 독창성을 추구하되 절대 포기하지 말아야 할 것은...

"즉각적인 System Feedback"입니다.
예를 들어, 사용자가 "A"를 입력하고 화면에 입력된 결과가 1초 뒤에 뜬다면 사용자는 짜증이 나겠죠?
혹은, "A", "B", "C" 가 반복해서 보여지는데 마우스 클릭으로 "A"를 입력해야 한다면?

여기서 중요한 개념이 예측가능성 (predictability) 입니다.
- 사용자가 원하는 입력을 자신이 원하는 때에 즉시 하고, 그 반응은 항상 빨라야 합니다. 

어느 미친넘이 이런 시스템을 사용할까요?

각설하고, 중요한건 장르를 알아야 합니다. 
장르를 공부하고 나서 "직관"이란 것도 생깁니다.

공부하는 이유는 이러한 "직관"을 얻기 위한 과정인 것입니다.

"직관"은 수 많은 시행착오와 공부를 통해 얻어지는 것이지 상상한다고 얻어지는 것이 아닙디다.

2015/02/15 04:49 2015/02/15 04:49
Sonar cube란 소스의 정량적 상태를 가시화하는 툴이다.
이러한 소스 가시화는 예전부터 꾸준히 테스트 또는 CI 등으로 나타났는데 이제서야 제대로 된 소스의 상태를 추적관리 할 수 있도록 해주는 툴이 나타났다고 생각한다.

먼저 JAVA가 설치되어 있어야 한다.
http://www.oracle.com/technetwork/java ··· 260.html에서 다운로드 받아서 설치하자. Unity3D 안드로이드 개발할때 정신적으로 피곤하지 않으려면, 최신버전보다 2~3단계 하위버전으로 x86버전으로 다운로드 받자.
설치가 완료되면, 제어판에서 시스템, 고급시스템설정, 고급탭에서 환경변수를 클릭한다.

시스템변수 부분에 새로 만들기를 클릭하여 다음과 같이 입력한다.

변수명(변수이름) : JAVA_HOME
변수값 : C:\Program Files (x86)\Java\jdk1.7.0_45
* 변수값은 설치경로에 맞게 수정.

자바설치의 마지막으로 Path라고 변수명이 되어 있는곳에 다음과 같이 추가한다.

;%JAVA_HOME%bin;

모든 이제 cmd로 Command창을 열어 java라고 명령을 내려보면 작동하는걸 확인할 수 있다.

자바가 설치되었으면 MySQL을 설치한다. 물론 다른 DB도 지원한다. (지원 DB : MySQL, Oracle, PostgreSQL, MSSQL) 
일부 MSSQL이 설치되어 있는 분들도 있겠지만, 여기서는 범용성을 따져서 MySQL을 설치하겠다.

http://dev.mysql.com/downloads/
에서 Community server를 다운로드 받아서 설치하자. 
root암호를 입력하고 나면 모든 설치과정이 완료될 것이다.

MySQL이 설치된 경로로 이동하여 다음과 같이 MySQL로 접근하자.

MySQL -u root -p패스워드

다음과 같이 SONAR DB를 생성한다.
CREATE DATABASE SONAR;


생성된 DB를 확인하려면 다음과 같이 명령을 내린다.
SHOW databases;


이제 다음의 명령을 차례대로 내려서 sonar가 사용할 계정을 생성한다.
CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL PRIVILEGES ON SONAR . * TO 'sonar'@'localhost';
FLUSH PRIVILEGES;


아직 한참 남았다. Sonar cube와 Sonar runner를 다운로드 받아서 압축파일을 해제하자.
http://www.sonarqube.org/downloads/

서로 다른 어플리케이션이므로 같은 폴더에 넣지는 말자. =(
먼저 Sonarcube가 압축이 해제된 폴더에서 "conf"에 있는 "sonar.properties"파일을 열고, 

다음의 부분을 찾아서 
#----- MySQL 5.x
#sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
다음과 같이 주석을 제거하자.
#----- MySQL 5.x
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar runner가 압축해제된 폴더에 "conf"폴더에 있는 "sonar-runner.properties" 파일을 열어서 다음의 항과 같이 수정하자.
#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
#----- Security (when 'sonar.forceAuthentication' is set to 'true')
sonar.login=admin
sonar.password=admin

이제 Sonarcube를 실행해보자.
압축해제한 경로의 bin\window-x86-32\StartSonar.bat 을 실행하면 된다.

접근은 http://localhost:9000/ 로 가능하다.

로그인은 admin / admin으로 접근할 수 있다.

로그인후에 좌측상단의 Setting 을 눌러 "System"아래에 있는 "Update Center"를 클릭한다.
그러면, "Installed Plugins", "Available Plugins", "Plugin Updates", "System Updates" 탭으로 보여질텐데, 그중 "Available Plugins"링크를 클릭하여 다음의 플러그인을 다운받도록 하자.

C# / ReSharper / StyleCop

링크를 누를때마다 install 버튼이 활성화 되는데 꼭 눌러주자.
이 과정이 완료되면 Sonarcube를 재시작해준다.

마지막으로 소스가 있는 폴더로 이동하여 "sonar-project.properties"파일을 생성한다. 
다음과 같이 생성한 파일을 채워넣자.

# Project Identification
sonar.projectKey = Unity 
sonar.projectVersion = 1.0 
sonar.projectName = ProjectPuppy

# Info required for Sonar 
sonar.sources = .

# Comma-separated paths to directories with sources (required) 
sonar.language = cs

# ----- Default source code encoding
sonar.sourceEncoding = UTF-8


이제 Sonar runner를 소스가 있는 폴더에서 실행하는 일만 남았다.
C:\{프로젝트경로}>c:\sonar-runner-2.4\bin\sonar-runner.bat
모든 작업이 완료되면 http://localhost:9000/ 로 접근하여 소스 분석결과를 확인해보자.


2015/02/04 11:06 2015/02/04 11:06
TAG
최근 박준표님과 유저스토리 관련 이야기를 나눴었는데..
그 때의 생각이 나서 간단하게나마 최초 요구사항을 어떻게 도출했는지 사진을 통해 회고하고자 한다.

최고 AKA Snapsh-OO-t이 출시된건 아마도 10월경이었던걸로 기억난다.
이때 우리팀은 현재의 문제점과 고객에게 받은 Keywrord를 나열하였다.

그때까지 나왔던 Key Word를 Postit에 기재하고 예상 일정을 세웠다.
사용자 삽입 이미지
항상그렇지만, 초도 버전까지 정신없이 달리고나면 남는건 향후 개선포인트들이다. 위의 개선 포인트 중 U에 동그라미는 고객의 요청사항이다.
사용자 삽입 이미지
하나씩 그룹핑하다보면 Keyword들이 보인다.

사용자 삽입 이미지
아마도 이까지가 시급히 개선해야할 1차 범위였던 것으로 기억난다.
사용자 삽입 이미지
마지막, 시간이 가능하다면 추가로 진행할 부분이었다.

다시 이를 그룹핑하여 가능한 항목별로 나열하고 실재 일정과 대입하였다.
사용자 삽입 이미지

막상 써놓고 보니, 별로 한일이 없어 보이지만, 치열한 토론 끝에 포스트잇 한장 한장 써붙였다.

잘된 점 
1. 누가 요구사항을 도출했는지를 명확히 구분하였다.
2. 기능별 요구사항을 그룹핑한 결과 일정 추정이 단순해 졌다.
3. 2의 이유로 업무 분장이 쉬워졌다.
4. 요구사항 항목은 결국 한장의 프린트지로 관리되었다.

잘안된 점
1. Why를 기록하지 못했다. 누가 왜 이런 요구를 했는지 중에 "왜"가 빠졌다.
2. 요구사항이 1장의 목록으로 관리되다보니 구현에 집중하면서 정확한 상황을 인식하고 구현하는데 경험요소에 많이 좌우되었다. (굳이 단점이라고 할 것 까지는 없었던 듯 하다.)

인상적이었던 점
1. 1년차에게 기획서 없이 개발한다는 이야기를 들었다. (기획서는 요구사항이 아니다.라는 생각과 배치되어 요구사항 있잖아 하고 넘어 갔는데.. 이건 좀 미스인듯)
2. 요구사항의 중요성을 그토록 토로했지만, 결과적으로 팀내 누구도 체화하지 않았다.(수련이 필요한 영역임에 분명한 것 같음)
3. 실컷 같이 만들어 놓고 "실장님꺼"란 이야기를 들었다. (방송국에서 편집권은 PD에게 있다. PM은 프로젝트 편집권을 쥐고 있는 PD다.)

마지막으로 게임 같은 콘텐츠 개발 방법에 대한 추가 보완이 필요하다.
- 기능적으로 접근하는 방법이 과연 맞을까? 하는 생각이 든다.
- 과거 웹에서는 데이터 Driven 으로 개발되는 사례가 많았다. 그와 같은 방식으로 회귀해야 하지 않을까?
- RichClient & X-Internet 개념은 모바일 게임에서도 여전히 유효한듯.

여러가지 교훈을 남겼던 프로젝트 였다.
비록 "신뢰를 얻는 스킬의 부족"일지라도 내 방식은 "진심은 통한다"이다.
굳이 못하는거 안하는게 답인듯...
2015/01/22 00:42 2015/01/22 00:42
출처는 이전의 AES 방식(링크 : http://www.wolfpack.pe.kr/828) 과 같이.. 까먹었슴돠..

using UnityEngine;
using System.Collections;
using System.Security.Cryptography;
using System.Text;

public class MainTester : MonoBehaviour {

 string _x = "";
 UTF8Encoding ByteConv = new UTF8Encoding();
 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
 
 // Use this for initialization
 void Start () {
 _x = "Hello!!!";
 byte[] _encText = Encryption(ByteConv.GetBytes(_x), RSA.ExportParameters(false), false);
 Debug.Log( ByteConv.GetString(_encText) );
 Debug.Log(ByteConv.GetString(Decryption(_encText, RSA.ExportParameters(true), false)));
 }
 
 static public byte[] Encryption(byte[] Data, RSAParameters RSAKey, bool DoOAEPPadding)
 {
 try
 {
 byte[] encryptedData;
 using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
 {
 RSA.ImportParameters(RSAKey);
 encryptedData = RSA.Encrypt(Data, DoOAEPPadding);
 }
 return encryptedData;
 }
 catch (CryptographicException e)
 {
 Debug.Log(e.Message);
 return null;
 }
 }

 static public byte[] Decryption(byte[] Data, RSAParameters RSAKey, bool DoOAEPPadding)
 {
 try
 {
 byte[] decryptedData;
 using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
 {
 RSA.ImportParameters(RSAKey);
 decryptedData = RSA.Decrypt(Data, DoOAEPPadding);
 }
 return decryptedData;
 }
 catch (CryptographicException e)
 {
 Debug.Log(e.ToString());
 return null;
 }
 }
}


암호화 결과 : 0BB@�{8n��*�b"�FN?s�
복호화 결과 : Hello!!!
2015/01/20 15:40 2015/01/20 15:40
유니티3D에서 자이로 효과를 카메라에 적용하는 스크립트입니다.
(Marker 없이 자이로로만 캐릭터를 바닥에 닫게 한다던가... 그럴때 사용하는...)

using UnityEngine;
using System.Collections;

public class CameraPivot : MonoBehaviour
{
 float _BaseAngle = -90f;

 void Start()
 {
 Input.gyro.enabled = true;
 }

 void Update()
 {
 Quaternion q1 = Input.gyro.attitude;
 Quaternion q2 = new Quaternion(q1.y, -q1.z, -q1.x, q1.w);

 transform.rotation = Quaternion.Euler(new Vector3(q2.eulerAngles.x, _BaseAngle, q2.eulerAngles.z));
 if (transform.rotation.eulerAngles.z <= 275f && transform.rotation.eulerAngles.z > 180f)
 transform.rotation = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 275f));
 if (transform.rotation.eulerAngles.z >= 355f || transform.rotation.eulerAngles.z <= 180f)
 transform.rotation = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 355f));
 }
}


1. 빈 게임오브젝트 만들어서 이름 바꾼뒤에 아래와 같이 스크립트 포함시킵니다.
사용자 삽입 이미지
2. Pivot 해줄 오브젝트 만들어서 다음과 같이 Rotation값을 (90, -90, 0)으로 설정합니다.
사용자 삽입 이미지
3. 마지막으로 Gyro camera를 설정한다.
사용자 삽입 이미지
4. Main Camera에서 다음과 같이 설정해주면 끝!
사용자 삽입 이미지

* Marker기반 AR과의 차이점.
1. Zoom in-out이 수동임.
2. 화면 Center를 중앙으로 인식함.
3. 회전이 수동임. (축이 고정되어 자동으로 먹히게 하는것 처럼 보이는 건 https://github.com/keijiro/GyroCam 참고)

2015/01/19 17:20 2015/01/19 17:20
씬간 데이터를 이동한다던가...
씬내에서 SQL처럼 데이터를 읽거나 쓰고 싶을때가 있을 것이다.

이전에는 playerprefs 에다가 JSON으로 데이터를 넣어두고 씬마다 리셋했는데... 
연구를 하다보니 씬 이동에도 불편하게 Dontdestroy 옵션을 설정하지 않아도 사라지지 않는 Entity Class 구현방법을 알게되어 포스팅하게 되었다.

(how to get data in other scene on the unity3d player with C# entity class)

먼저 다음과 같이 List 객체를 가지고 있는 Entity라는 정적 Class를 만들자.
e는 _e class 타입의 List이다. (hash 테이블보다는 일반 DB에 가까워서 List를 자주쓴다. 또한 JSON / XML 의 Deserializing / serializing에 유리하기도 하다.)

using System.Collections;
using System.Collections.Generic;

public static class Entity
{
     public static List<_e> e = new List<_e>();
}

public class _e
{
     public string _s;
}



이제 "test1Behavior" 테스트코드를 다음과 같이 작성하고 Main Camera에 스크립트를 Attach시켜둔다.
using UnityEngine;
using System.Collections;

public class test1Behavior : MonoBehaviour {

void Start () {
 Entity.e.Add(new _e { _s = "1234" });
 Application.LoadLevel(1);
 }
}


씬이름을 test1로 저장하고 새로운 씬을 연다.

위의 코드와 비슷하게 다음과 같이 작성하고 새로운 씬의 Main Camera에 스크립트를 Attach시켜두자.

using UnityEngine;
using System.Collections;

public class test2Behavior : MonoBehaviour {

 void Start () {
 foreach (_e x in Entity.e)
 {
 Debug.Log(x._s);
 }
 }
}


마지막으로 test2로 씬을 저장한 후에 

이로써 모든 작업이 완료 되었다.
build setting 에서 test1와 test2 씬을 차례대로 넣어두자.

이제 실행해보면 다음과 같이 test1Behavior에서 넣어두었던 데이터 "1234"가 새로운 씬에서 작동한다.

사용자 삽입 이미지
2015/01/15 16:06 2015/01/15 16:06
2015년 신년부터는 일하게 되는 곳이 바뀌게 되었고 그 기념으로 포스팅하려 합니다.

상인으로 3년을 보내며, 조금 많은 회사와 협력관계를 맺기도 했고, 게임팀을 맡겨보기도 했습니다만...
한가지 재미있는 사실은... "게임 만드는 사람이 게임의 문법을 모른다는 사실"을 깨달았습니다.

영화나 소설에도 기승전결이 있습니다.
물론 일부 괴랄맞은 감독은(크리스토퍼 놀란) 자신만의 문법으로 "결"부분에 꼭 애매하게 매듭을 묶어 놔서 사람 환장하게 만들죠!

* 시발!! 넘어지라고!!! 
사용자 삽입 이미지

반대로 아주 지랄맞은 감독은(안노히데 아키) 자신만의 문법으로 "결"부분을 완전히 결단을 내버리기도 합니다.

* 이게 뭐임? 안노 ㅅㅂㄻ!!!
사용자 삽입 이미지

다시 말해, 우리의 뇌는 우리가 받아 들이기 쉬운 형태의 문법을 선호하고 그것이 몇 천년동안 가공되어 왔다고 할때, 최근에는 한층 더 쎄련되면서 다음과 같이 가공되기도 했습니다.
그예가 바로 "3줄 요약!" 주저리 주저리 블라 블라 하고 나서 마지막에 "3줄 요약"

이렇게 함으로써 자신의 글 솜씨도 숨기고 하고 싶은 말은 다 합죠. 네넵. (한국인의 낮은 독해능력을 파고드는 방법입니다.)

그렇다면 노래는 어떨까요? 
네! 있습니다. 노래는 제가 잘 모르는 분야이지만 흔히들 "Code"라는 문법이 존재하더군요!

* YES24에서 절찬 판매중...
사용자 삽입 이미지


그렇다면 그림은 어떨까요?
이쪽은 더 잘 모르겠지만, 우리는 이미 학교 다닐때, 회화풍이 어쩌구... 저쩌구... 황금비율이 어쩌구 저쩌구하면서 이미 많은 지식을 머리속에 담고 있습니다.
하나의 예를 들어보면... 모더니즘 미술과 근대미술을 나누는 과정에서도 클래식과 현대 음악과 같은 뚜렷한 차이가 존재합니다.
아래의 추상화 패턴만해도 어떤 규칙을 가지고 있지요.
사용자 삽입 이미지
따라서, 회화 역시 문법이 존재한다는 심증을 가지고 있습니다.

다시말해 모든 Contents는 문법이 있습니다. 
그런데, 게임쪽은 희안하게도 종종 아주 자주 이러한 문법이 무시됩니다.
문법이란 인간의 뇌가 받아 들일 수 있는 규격임에도 그것이 무시됩니다. 아주 무섭고도 놀라운 일이죠.

흔히, 우리가 게임이라 하면, 화투나 포커같은 보드게임에서 부터, 당구, 야구, 축구, 연말평가 등등 이기고 지는 것에 대한 것을 게임이라 합니다.
광의의 의미에서 선거조차 게임입니다. 전쟁은 두말나위 없는 게임입니다. 나아가 시험도 게임입니다.

즉, 게임의 가장 고전적인 문법은 다음과 같습니다.

"플레이어가 OOO해서 OOO 보상을 받아, OOO 했다."

* 이걸 업계용어로 "Core Loop"라합니다.
사용자 삽입 이미지
모든 게임은 Core loop의 문법이 통용됩니다.

예를 들어, 최초의 오락실 게임인 핀볼을 예를 들면,
"볼을 쳐내서 많은 점수를 받고 Rank를 올렸다"

* 흔한 핀볼게임. Rule은 볼을 쳐내서 떨어트리지 않는 것이고 목적은 오로지 점수 올리는 것입니다.
사용자 삽입 이미지


이 문법을 그대로 수 많은 오락실 게임에 가져다 놓으면,
"적을 때려잡아서 많은 점수를 받고 몇 판 깼다"

* 팩맨과 갤러그... Rule은 다르지만, 친구들에게 "몇 판깼어!"하는 걸로 자랑하던 몇 판 깨기 목적 지향의 게임
사용자 삽입 이미지


다시 말해 게임의 기본 문법구조는 다음과 같습니다.
"XX규칙으로 OO을 달성하고 ZZ한다"

RPG역시 이러한 문법에 따릅니다.
- 몹많이 때려잡아서 보상을 많이 모아 Level업 한다."
물론 Level업하면 더 많은 지역을 갈 수 있고 (확장) 더 좋은 아이템이 떨어지는 던젼을 탐험 할 수 있습니다.(또 확장)

시뮬레이션 게임 역시 마찬가지 입니다.
- 유닛 많이 뽑아서 상대를 때려잡으면 승률이 올라가고 승률이 올라가면 더 놓은 리그에서 경기한다.
이 역시 같은 문법으로 이루어져 있습니다.


궁극적으로 평타 게임이란 이러한 문법에 충실한 게임입니다.
새로운 게임이란 이러한 문법을 벗어난 게임입니다. 그 일을 징가가 해냈죠!
사용자 삽입 이미지
팜빌 역시 같은 문법으로 이루어져 있습니다만, 확장의 방향이 조금 달랐습니다.
"농장물 잘 키워서 잘 팔고 남는 이윤으로 영토를 확장한다"가 기본 문법이지만, 이들이 취한 또 하나의 확장은 "친구의 확장"입니다.

그걸 옆나라에서 보고 있던 이들이 만든 문법은 조금 다릅니다.
"친구를 포함한 덱 잘만들어서 몹 때려잡으면 그 보상으로 더 상위 던전으로 진출하고 친구도 얻는다."
사용자 삽입 이미지
소셜로의 확장을 기본으로 하는 게임에서는 당연히 취해야 할 문법이라 봅니다.
이러한 문법이 깨졌을때 게이머는 화를 냅니다.

예를 들어, 
- 규칙이 안보이거나 규칙을 알 수가 없을때, (게이머가 OO해서 라는 부분이 졸라 복잡한거죠...)
- 게이머가 즉시 힘을 가상세계로 투사할 수 없을때, (크래쉬나 뻑이 난다던가.. 입력 반응이 느리다던가...)
- 목적을 알 수 없을때 (도대체 이 게임을 왜하는건지 감정이입조차 안되는 경우)
- 보상이 생각이하로 작다거나... 너무 크거나...
- 확장이 어렵다던가... 혹은 확장이 너무 쉽다던가..

이러한 경우는 우리는 "망작"이라 합니다.

기본적으로 게임은 Loop이기 때문에 기승전결의 구조를 작은 틀에서 가질 수 없습니다.
큰 틀에서 기승전결을 가지되 작은 스테이지 개념에서는 이러한 Loop 구조를 가져야 제대로된 게임이라 할 수 있습니다.

문제는 Animation 회사라면 추구할 (그래픽의 퀄이라던가.. 애니메이션의 퀄이라던가..) 내용에 힘을 쏟거나...
시뮬레이션 회사라면 추구할 (물리의 퀄이라던가.. 타격에 따른 반동의 퀄이라던가..) 내용에 힘을 쏟게 되면,

그야말로 있는 돈 다 쓰고 나 앉게 되는 것이죠.

그래서 게임에서는 가장 중요한 것이. 바로 Loop의 설계입니다. 
Loop의 설계가 제대로 되면 나머지는 "진짜 그런것이 아니라 그럴싸 한것으로 채워집니다."

* 물론 설계된 Loop가 제대로 된 것인지 검증을 해야합니다.(검증이 완료되면 그 때 만들면 되요)
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지


영화 인셉션의 기승전결의 문법이 성립되고나니 그 안의 모든 것이 그럴싸 한것으로 채워져도 진짜로 인식되거나 영화 인터스텔라의 기승전결의 문법이 성립되고나니 그 안의 모든것이 그럴싸 한걸로 채워져도 진짜로 인식되는 같은 이유입니다.

제발 게임 개발자 여러분.
게임의 문법을 먼저 생각하고 먼저 계획하시기 바랍니다.
여러분들의 투자자와 사장님은 눈물흘려요.
2015/01/03 20:12 2015/01/03 20:12
MS가 인터넷 회사로 Positioning하기 시작한 느낌입니다.
Sway를 사용해 게임개발 접근법이란 주제로 포스팅해보았습니다.

https://sway.com/fx6-n0TpBBv9lWuM

계속 업데이트해볼 생각입니다. ㅋ
2014/12/17 03:38 2014/12/17 03:38
1:17에서 부터 시작하는 Snapsh-OO-t 을 만들었습니다.
제대로 고객의 의도를 이해하지 못했구요.
Version 2.0 기획이 아마도 내일쯤 끝나서 다음달 초에는 2.0 업데이트 할 수 있을 것 같습니다.
죄송하고 송구스럽네요. 
추구하는 Value를 이제야 이해했네요 T_T

2014/11/13 16:38 2014/11/13 16:38
배포시 가장 큰 골치덩어리중 하나는 AndroidManifest.xml 파일 수정문제일 것이다.
Android Plugin을 만들어서 넣자니 짜증나고... 그럴때 간단하게 AndroidManifest.xml 파일을 수정할 수 있는 방법을 공개한다.

프로젝트 Root폴더에 보면 "Temp" 폴더가 생성되어 있을텐데 거길 가만히 보면 "StagingArea"라는 폴더가 보인다.
여기로 들어가면 다음과 같이 폴더가 구성되어 있다.

사용자 삽입 이미지
빌드에서 사용될 각종 Resource 파일들이 보일텐데 이중에 필요한건 
AndroidManifest.xml 파일과 res 폴더 두개이다. 이 2개를 선택해서 CTRL+C 해서 복사하고 
유니티로 돌아와서 "Plugins" 폴더를 만든다음 다시 "Android"폴더를 만들고 거기에 복사해 넣자.
사용자 삽입 이미지
이제 복사한 AndroidManifest.xml 파일을 열어서 마음대로 주무르면 됨. 끝!


2014/10/26 16:21 2014/10/26 16:21