일단 제가 제작하고 있는 게임을 다시 이야기할 필요가 있으리라고 저는 생각을 합니다.

뭐... 지도를 뺀 기획서도 컴퓨터에 존재하고 등등 이런 저런 일이 존재하죠


일단 업데이트의 버젼은 DAY라는 단위를 선택하기로 하였습니다.

그리고 큰 틀?? 말고 버그와 사소한 단위의 벨런스 변동은 아마도 이런식이 되지 않을까 조심스럽게 생각을 합니다.


DAY 1.0001   <-- 요런 느낌??? 아무튼 일단은 총기의 반동을 조금 손 보고 있는데 제가 생각하는 것과는 많이 다른 느낌들이 많습니닼ㅋㅋㅋ


솔직히 총기 반동을 제어 하기 위해서는 점사와 단발 이외에도 연사 사격을 하면서 화면을 계속 아래로 내리는 행위가 있는데요

제가 화면을 아래로 내리는 행위를 건드리지 못해서 DAY 1 소수점 패치를 결정해야 겠습니닼ㅋㅋ

일단 지금은 먼저 스캔 히트 방식으로 제작이 되었습니다만....??

총기 반동을 추가 하고 났더니 뭔가 총알이 총의 반동과는 상관 없이 그냥 화면 중앙에 날라가서 타격을 시전하는 이상한 현상을 발견하게 되었습니다.


결론은 제가 bullet spawner를 총구에 추가하는 것으로 바꾸도록 하겠습니다.

먼저 DAY1을 제작하여 완성을 시킨 뒤에 소수점 패치로 변경하는 점과 그냥 처음부터 스캔히트를 사용하지 않고 탄도학을 적용시키는 것인데요

일단 저는 이 두개중에 고민을 하면서 타 게임들을 조사하고 있습니다.


그리고 DAY1의 4개 타일인 맵은 C구역의 행정기관만 어떻게 해야하나 생각을 하고 있습니다.

A 주거 지역 / B 상점가 / D 빌딩 지역

이렇게는 일단 지금 완성이 된 상태이고

더욱 더 많은 것을 추가 시키기 위해서 여러가지 생각을 일단 하고 있습니다.


EXO슈트(골격 강화 슈트)라던가 / Night Vision(야간 투시경)이라던가 / WW2 무기라던가


일단 지형 현황은 

이런 모습이고

차량이며 도로며 건물 모두 일단은 Ground로 지정이 되어 있기에 아마도 좀비 AI를 만들면 살짝 버그가 날지도 모를 것 같은 상황에 놓여있습니다.

일단 그것은 좀비 Ai를 먼저 제작을 하고 해결하는 것으로 생각을 하고 있습니다만

이 좀비를 만드는 것 이전에 리얼(현실 / 학교)에서 시험이라는 것도 존재하고

일단 총기 반동을 화면으로 제어 하는 것 말고도 총구에 방향에 맞게 총알이 날라간가는 것도 구현 하고 싶다는 생각이 들었습니다.


그럼 여기서 또 의문점이 드실 겁니다.

스캔히트로 하고 그냥 발사되는 지점을 총구로 설정하면 안되는 거야?

라는 그런 생각을 하실 수도 있는데...

제가 생각하고 있는 앞으로의 개발 과정은 맵을 좀 더 확장시키는 것을 생각하고 있습니다.

즉 FPS이면서 심리적 공포이면서 오픈 월드에 사행성을 담은 그런 게임....??


미리 이야기를 하자면 이것은 거의 비밀과도 같지만 총기를 랜덤박스에 넣어 보는 것도 생각중입니다.


다시 한 번말하지만 저는 디비전( 무기의 다향성 / 레벨 기능 / 오픈 월드 ) + 레포데 ( 1인칭 사격 / 좀비 ) + 다크소울( 난이도 ) + (심리적 공포 장르) +  World War Z( 무식한 물량 )이라는 끔찍한 혼종을 만들어 보고 싶습니다.

그렇기 때문에 그냥 그런 분위기를 조성 하는 것 같습니다.

하하!!

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

원래 이거는 실습을 할 때도 체크를 하기는 했는데....

그냥 그렇겠지 하면서 오류를(?) 버그를(?)불러 일으킬 것을 알고 있었음에도 불구하고 저는 그냥 진행을 하였습니다.

뭐 예를 들어서 방금 올라간 게시글에도 있고...?


아무래도 지금 운영하고 있는 카테고리인 유니티3D는 아마도 책에서 크게 벗어나는 것은 없을 겁니다.

제가 실습을 하는 와중에 직접적으로 실행조차도 하지 못하게 만드는 버그는 수정을 하겠지만 그렇지 않은 경우에는 아마도 책에 있는 그대로 하게 될 것으로 예상이 됩니다.

물론 부가 설명이나 그런 것은 제가 느낀점(?)을 추가로 적는 경우도 있습니다.

하지만, 그렇게 많은 편도....읍읍???


아무튼 그런 이유가 있습니다.

그리고 이번에 새로 만들겠다던 Fps장르의 Post Apocalips(?)는 결국 20만원어치 Assets을 구매하고 말았습니다.


흐아아아아아아!!!!

그래서 프로그래밍 일지가 아마도 종종 올라갈 것으로 예상하는데...... 그래도!!! 책은 전부 끝내야죠!

아마 그것도 11월?? 기준으로 끝맺음을 하지 않을까 조심스럽게 생각만 하고 있습니다.

아무튼! 구매한 Assets은?

요녀석들인데!

흐음..... 뭔가 많이 빠진 기분입니다...... 뭐.... 살짝 부족한?? 20만원어치 개발비를 부은 게임을 만들어보죸ㅋㅋㅋㅋ

물론 제 시간과 인권비는 빠진 비용입니다만??ㅋㅋㅋㅋㅋㅋㅋ


그러면 이제 다시 유니티3D카테고리에 뵙도록 하겠습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

플레이어는 움직이는데 적군은 그대로라면....?

매우 이상한 상황이 연출되는 군요!

어느 누가 근육을 사용하지 않고 그렇게 활동을 합니까??

관절과 근육을 사용하지요!

그래서 일단 적군도 일일이 설정을 해야합니다.

노가다가 예상되는 군요.....흐음....


그러면 먼저 차이점을 알아야 겠군요!

늑대와 드래곤은 인간이 아닙니다.

그러니 휴머노이드는 아니군요! 그래서 Generic이 됩니다.

휴머노이드에서만 가능한 것은 사용하지 못하겠군요!

하지만 상관없습니다!

스테이트 관리만 하면 되는 것이거든요!


플레이어는 대기, 이동, 공격, 쓰러짐이 있었습니다.

하지만 늑대와 드래곤은 HP가 0이 된다면 그자리에서 사라지게 해야겠습니다.

저는 모아서 설명을 하지만!

따로 설정해 주세요!

혼동이... 왜 책에서 따로하라는지 모르다갘ㅋㅋㅋ


아무튼 시작하겠습니다!!!

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

그럼 이제 다시 애니메이션 데이터를 설정합시다.

Inspector에서 Rig 탭란의 Animation Type이 Generic으로 설정되어 있는지 확인합니다.

이 작업은 모델 데이터와 애니메이션 데이터 모두 확인을 합니다.

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

애니메이션 클립 설정은 작성을 하겠지만 이벤트 설정은 준비한 Animation에 따라 다르기 때문에 작성을 하지 않도록 하겠습니다.

그리고 다시 확인을 해보니 건들이는 항목이 없었던 것으로 기억을 합니다.

그러면 뭐..... AnimatorController 작성이네요??

백문이불여일견!!

위 사진처럼 AnimatorController를 Create에서 만든뒤에 이름을

늑대는 'WargAnimatorController'로

드래곤은 'DragonAnimatorController'로 설정합니다.

이름을 변경한 AnimatorController는 Animator뷰로 표시 합니다.

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

AnimatorController에 애니메이션 데이터를 드래그앤 드롭으로 꺼냅니다.

늑대와 드래곤의 혼동을 주의하세요

Stay를 디폴트 스테이트( 주황색 )으로 만들어 줍니다.

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

그리고 파라미터를 설정합니다.

캐릭터와 비슷한 방법으로 Float형 'Speed' / Bool형 'Attacking' / Trigger형 'Down'을 설정합니다.

Down을 만드는 이유는 스크립트를 재활용 하기 위해서 만들어 줍니다.

뭐... 사용안하면 그만이지요

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

그리고는 애니메이션 전환을 확인합니다.

그럼 이제 적용을 합니다!

하지만! 먼저 우리는 알아야 할 것이 있습니다!

Prefabs에서 각각 애니메이션이 존재하는 모든 Prefab에 AnimatorController를 설정합니다. ( Animator 컴포넌트 )

아마도.... 각각의 이름으로 되어 있으니 잘 적용하리라고 믿습니다.

그리고는 Animator 컴포넌트에 있는 Apply Root Motion의 체크는 해제합니다.

또 CharaAnimation스크립트를 추가합니다.

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

이제는 재생 버튼으로 잘 되었나 확인 합니다......

잘 되리라고 믿고 저는 이만!! 빠지도록 하겠습니다.

다음은 공격에 관하여 알아보도록 하겠습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

스크립트를 이용하여 Animatorcontroller의 Parameters로 설정한 파라미터로 스테이트를 전환합니다.

그럼 이제 전환하는 스크립트를 준비합니다!

using UnityEngine;

public class CharaAnimation : MonoBehaviour

{

Animator animator;

CharacterStatus status;

Vector3 prePosition;

bool isDown = false;

bool attacked = false;

public bool IsAttacked()

{

return attacked;

}

void StartAttackHit()

{

Debug.Log("StartAttackHit");

}

void EndAttackHit()

{

Debug.Log ("EndAttackHit");

}

void EndAttack()

{

attacked = true;

}

void Start ()

{

animator = GetComponent<Animator>();
status = GetComponent<CharacterStatus>();
  
prePosition = transform.position;

}

void Update ()

{

Vector3 delta_position = transform.position - prePosition;
animator.SetFloat("Speed", delta_position.magnitude / Time.deltaTime);
  
if(attacked && !status.attacking)

{

attacked = false;

}

animator.SetBool("Attacking", (!attacked && status.attacking));

if(!isDown && status.died)

{

isDown = true;
animator.SetTrigger("Down");

}

prePosition = transform.position;

}

}

이렇게 셋팅합니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

이번에는 Animator에 관한 설정들을 배우도록 하겠습니다.

앞에 게시글처럼 끊어서 하지 않고 한번에 처리를 할 예정이니 그점은 알아주시기를 바랍니다.

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

모델의 애니메이션 처리는 Animator 컴포넌트에서 처리를 합니다.

이 컴포넌트가 애니메이션을 제어하는 데 필요한 데이터를 Animator Controller라 하는데

이것은 재생할 애니메이션, 애니메이션끼리 전환 관계, 애니메이션 전환조건이 저장됩니다.

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

그렇다면 편집은 어떻게 해야 할까요??

간단합니다.

Window메뉴에서 Animator를 선택하면 Animator 뷰가 표시가 됩니다.

일단 위 사진은 제가 먼저 작업을 하면서 만들어둔 모양인데.... 신경은 쓰시지 마시고 일단 합시다.


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


그러면 이제 플레이어에게 부여할 애니메이션을 설정합시다.

Animator Controller를 말이죠

Project 브라우저에서 Assets/Animations 경로를 들어갑니다. ( 없으면 만들기! )

폴더에서 Create 버튼으로 Animator Controller를 선택합니다.

'New Animator Controller'가 생성이 되면 'PlayerAnimatorController'로 이름을 변경합니다.


그리고 Animator뷰에 표시를 합니다.


당연히 첨엔 Any State만 표시되어 있습니다. ( 는 개뿔 책아 구라 작작좀.... 실은 Entry도 있습니다. ) 

책에서는 Alt키와 좌클릭을 이용하여 화면을 이동한다고 하는데..... 그냥 귀찮으니 휠을 누른 상태에서 이동을 합시다.


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


추가 State를 생성해야 하겠지요??

그러면 이제 Project에 있는 Player@____를 전부 불러옵니다.

드래그 앤 드롭으로 말이죠.

그럼 이제 기본 값을 설정해야 하겠죠??

그런데 이미 Stay를 먼저 꺼내셨기를 빌며 그러셨다면 아마 Stay가 기본 값입니다.

아닌 분들은 

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

그러면 이제 애니메이션 전환 피라미터가 필요합니다.

위 사진 처럼 만듭니다!

Float형을 추가하고 이름은 Speed로 설정합니다.

Bool형을 추가하고 이름은 Attacking으로 설정합니다.

Trigger형으로 추가후에 이름을 Down으로 설정합니다.

그러면 이제 Bool과 Trigger가 무엇이 다른지 모를지도 모르니 설명을 해야겠습니다.

Bool은 True값과 false값을 전환합니다만, Trigger는 전환되는 순간 false값으로 변경됩니다.

간단하게 말하면 스위치랑 조건부 형식이지요

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

이제는 전환 조건을 만들어야 겠죠???

그럼 이게 무엇을 하는 것이냐??

처음에 올린?? 사진에 화살표 같은 것들이 막!! 복잡하게!! 설정이 되어 있었습니다.

그것을 하는 것인데요!

이렇게 만든 화살표를 가볍게 클릭을 해준다면!

Inspector에 화살표의 파라미터를 편집할 수 있습니다.

그냥 간단하게 이런 느낌입니다.

Inspector에 표시된 트랜지션의 파라미터 내에 있는 Conditions에서 스테이트 간 전환 조건을 지정합니다.

당연히 설정한 파라미터는 클릭으로 선택하는 것이겠죠?

위 사진은 Conditions를 확대한 것인데요

+와 -로 추가또는 삭제가 가능합니다.

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

그러면 

이 화면 내에 있는 모든 화살표의 설정을 보도록 하겠습니다.

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

그러면 이제 애니메이션 전환을 직접 확인을 하시면 됩니다!


블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

이번에는 공격에 관한 이벤트를 설정합니다.

- 무기로 공격이 시작된 타이밍에 적과 무기의 타격 판정을 시작하는 이벤트 함수

- 무기로 공격이 끝나는 타이밍에 적과 무기의 타격 판정을 종료하는 이벤트 함수

- 무기를 휘두른 후 다음 행동으로 전환 할 수 있는 상태를 알려 주는 이벤트 함수

이렇게 입니다.

그럼 이제 사진을 통해서 알아보도록 합시다.


1. Project 브라우저에서 Assets / 3D Assets / Player / Player@Attack을 선택해서 Inspector를 봅니다.

2. Inspector에서 Animations 탭을 클릭합니다.

3. 이벤트 추가 버튼으로 사진을 참고해 설정합니다.

공격이 시작되는 부분

공격이 끝나는 부분

공격 모션이 완전히 끝나가서 처음이랑 포즈가 처음으로 같은 부분


이렇게 설정을 합니다.


모든 설정을 맞추면 Apply를 눌러서 설정을 종료합니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

애니메이션 클립을 재생할 때에 특정 타이밍에 루트 게임 오브젝트에 설치한 스크립트의 이벤트 함수를 호출합니다.

애니메이션 이벤트는 Inspector엥서 애니메이션 클립을 편집할 때 표시되는 Events 속성에서 설정 가능합니다.

Events의 타임라인은 0~100이며 애니메이션 클립의 재생 위치를 나타냅니다.


뭔가 추가하는 듯한 그런 저 버튼을 누르면 애니메이션 라벨을 추가할 수 있습니다.

타임라인 위에서 추가된 라벨을 마우스로 드래그해 이동시키면 애니메이션 이벤트의 시작 타이밍을 변경가능 합니다.

라벨을 선택한 후에 Delete키를 누르게 된다면 삭제가 됩니다.

애니메이션 이벤트에서 라벨을 선택하면 Edit Animation Event 대화창이 나타난다고 합니다.

애니메이션 이벤트가 호출하는 함수 이름을 Function에 입력합니다.

애니메이션을 재생하는 컴포넌트와 같은 오브젝트에 추가된 스크립트만 호출할 수 있다는 점!!!

float / int / String / objecct는 이벤트 함수에 전달하는 값입니다.

- 애니메이션 이벤트용 이벤트 함수의 인수에는 0또는 1만 설정 가능합니다.

- 호출하려는 함수 이름이 Hoge일 때 스크립트에 작성가능 한 함수는

- void Hoge()

- void Hoge( float f )

- void Hoge( int i )

- void Hoge( string s )

- void Hoge( UnityEngine.Object o )

- 하지만 인수가 두 개인 경우 오류를 불러옵니다.

- 같은 스크립트 안에 같은 이름의 함수가 있는데 인수가 서로 다를 때는 먼저 만든 함수만 호출합니다.


블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

애니메이션 클립을 설정합니다.

Player@Stay와 Player@Run을 먼저 설정하도록 하겠습니다.

각각을 이렇게 설정을 합시다

그리고 Apply를 눌러줍니다.

그 다음으로는 Player@Attack과 Player@Down을 이렇게 설정합니다.

이렇게 해서 일단 셋팅은 마치도록 하겠습니다??

셋팅은 일단 이런 식으로 하는 겁니다하고 알려드렸습니다.

이것을 참고해서 만들어 보시기를 바랍니다^^

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

제가 오류가 생겼다면서 작성하였던 코드를 올리도록 하겠습니다.

UnityEngine.Component.Getcomponent<Rigidbody>().velocity = velocity;

제가 이런 코드를 가지고 있었습니다.

이것은 UnityEngine에서 살짝 직접 수정을 해준 내용이었는데....

이게 오류를 불러오고 있었습니다.

물론 오류라면서

[파일 이름] error CS0120 (26,XX)

라고 표기가 되어 있었기 때문에 무슨 파일 몇번째인지를 알게 되었습니다.

그래서 일단 수정을 할까 해서 오류가 났다고 알려주는 console창을 읽는 도중

제가 혹시 몰라서 원래 작동이 되고 있던 코드도 같이 수정을 해 두었었습니다.

그래서 그거와 관련이 되어있다는 것을 알고

얼른 수정하러 이동을 하였죠

gameObject.Getcomponent<Rigidbody>().velocity = velocity;

이렇게 수정을 하고 console창을 보았더니!!!


놀랍게도 지금은 없어졌습니다!!


만세!!

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,