목록BCA/6. Unity RPG 따라하기 (10)
VioletaBabel
이번엔 카드 슬롯형 상점을 만들 것.상점 창과 아이템 카드 창을 만든다.카드의 왼쪽에는 이미지를, 오른쪽엔 이름과 설명, 가격 등을 적는다.그리고 설명 아래에 버튼을 넣어 구매라고 넣는다. ShopCard.cs를 만든다. 그리고 아이템 카드 창에 드래그해 넣어준다.스크립트에서 Image icon, Text title, Text cost를 받고 onClick에 사용할 buyButton() 함수를 만든다.그리고 연결은 그동안 해온 것과 비슷한 듯. 상점 창에 Shop2.cs를 만들어 넣고 거기서 카드들을 Instantiate해준다. === 위치를 잡고 만들어 준 후, 내용을 채우고 스크롤 바를 넣을 계획. 아이콘을 받아오고 이미지의 스프라이트로 넣어주고 아이템 이름과 설명, 가격도 받아온다. 그리고 스크롤 ..
캔버스에 상점 창을 ShopDialog라고 만들고 평소엔 꺼둔다.그리고 K를 누르면 ShopDialog를 active toggle한다.ShopUI.cs의 Start에서 Dictionary shopList를 만든다.그리고 mShopList를 shopList에 넣어주고 Image를 만들어 의 sprite를 바꿔준다. 리스트에 있는 아이템은 창에 정렬해서 나타나게 한다. 여전히 Start()에서 // https://docs.unity3d.com/kr/530/ScriptReference/EventSystems.EventTrigger.html var trigger = imageObject.AddComponent(); //이미지에 이벤트트리거를 넣고 꺼낸 후 EventTrigger.Entry entry = new ..
하이에라키에 우클릭하여 2d object - Sprite Mask를 누른다.그리고 2d object-sprite도 하나 만든다.그리고 sprite renderer의 mask interaction을 visible outside mask로 해둔다.여기서 Sprite mask의 크기가 중요하다. 알아서 스케일을 잘 조치할 것. 그리고 Sprite Mask에 MoveMask.cs를 만들어 넣는다. 그리고 Update()에 position을 이동시키면 스프라이트가 안보이다가 한 쪽부터 샤라락 나타나게 할 수 있다. Sprite가 아니라 Raw Image면?Raw Image의 텍스쳐를 받아와 Sprite의 텍스쳐로 넣어주면 된다. ===상점 만들기 캔버스에 Shop이라고 빈 Object를 만들고 Image도 하나 ..
NPC가 나왔을 떄 특정 키를 누르면 대화창이 나오게 하자. ===대화창 이미지를 구한다. 스프라이트 에디터에서 녹색 박스를 가운데로 오게 네모를 만든 후 apply하면, width, height를 늘렸을 때 가운데만 늘어나서 테두리를 유지할 수 있다. 겁나 신기하네 진짜 === Image에 방금 위 방법대로 에디트한 대화창을 넣는다. 그리고 계산하기 귀찮으니 Rect Transform의 pivot을 0,0으로 하겠다. GameCanvas.cs의 OnGUI 함수에서ChatDialogBackground라고 GameObject를 받은 후 Position을 0,0으로 한다.그리고 dialogSize를 코드에서 수동으로 잡아주었다.(화면의 사이즈가 바뀔 때마다 불린다.) === 이제 Text를 뿌려야 한다.Im..
구글 스프레드시트를 이용해 데이터를 만들자.실시간으로 받아오는 것은 느리므로, 만들어서 파일을 넣는게 낫다.물론 엑셀이 있으면 그냥 엑셀 쓰는게 제일 편함. GameData.cs에 class로 playerdata를 만들어 현재 hp, 최대 hp, 현재 mp, 최대 mp, atk, def를 담는다.그리고 leveldata라는 클래스를 만들어 level, atk, def, hp, mp, exp를 담는다. 그리고 Dictionary 형 변수를 하나 만든다. 그 후 defaultData()라는 변수를 만들어 그 안에서 leveldata를 하나 new 시켜 레벨업 될 때마다 변하는 데이터를 규칙적으로 넣어 Dictionary에 담는다. === save(), load()함수를 만든 후 에셋 스토어에서 Json을 다..
적이 캐릭터와 가까워지면 공격, 멀어지면 다시 패트롤하게 할 것. === 우선 웨폰 매니저에게 나무를 받아와서 부모를 손으로 두면 나무 막대기를 쥔다. === Find를 하고 나면 null 검사를 하는게 좋다. 터지는 것을 방지.무언가가 죽었다가 다시 살아날 때, active를 껐다 켜도 되지만 destroy하고 다시 instantiate하면 메모리가 달라져서 검사를 하지 않으면 터질 수 있다. === NavMeshAgent를 이용해 주인공과 일정 거리 안이면 다가오게 한다.그리고 공격반경 내에 들면 플레이어의 방향을 보고 공격 모션을 취하도록 한다. === [Header("적힐 말")] 을 public 앞줄에 붙이면 묶인다.그 뒤에 있는 애들이 항목으로 묶인다. 변수값 입력에 슬라이드바도 넣고 싶거든 ..
몹을 움직여보자.5초에 1번 움직이게 한다.몹에게 NevMeshAgent를 넣는다.리스폰 몹 매니저를 만든다.그리고 위치들을 게임오브젝트로 만들고, 그걸 저장해 거기를 따라 가게 함그리고 NavMeshAgent형 변수 agent를 만들어 getcomponent한 후, agent.autobraking을 false해준다. (autobraking이 true면 목적지에 도달하면 속도가 느려짐) === 변수에 set을 할 때 value라는 키워드는 넣는 값을 의미. === InvokeRepeating() 함수가 있다. 일정 시간마다 반복하게 해주시는 듯.별도로 MoveMob()이라는 함수를 만든 후, InvokeRepeating("함수명",시작시간,실행주기); 식으로도 이용할 수 있다.이를 막으려면 CancelI..
무기를 쥐어주자.오른 손에 무기를 넣어주자CharWeapon.cs라는 파일을 만든다.그리고 맘에 드는 프리팹을 Start()에서 만들어줄 것이다.무기를 프리팹으로 넣어두고 instantiate한다.각도나 그런건 잘 넣는다. === LeftControl을 눌렀을 때 휘두르게 해보자. Invoke("함수명",시간); // 몇 초의 시간 후에 기재한 함수를 실행하는 함수. 이걸 이용함. === 몹을 등장시킴 나무에 콜라이더를 트리거로 넣고 리지드바디를 키네틱으로 하였다. Weapon.cs를 만들고 거기에 공격력 수치를 넣는다. Mob.cs도 만들고 체력, 방어력 수치를 갖는다. 그리고 addDamage 함수를 통해 체력을 깎도록 하였다. 웨폰의 트리거엔터 함수에서 몹의 addDamage를 실행시킨다. 그러면 ..
카메라에 BgmOnOff는 있는데 볼륨 조절이 없으니BGM.cs에 setVolume(float vol) 함수를 만들어 볼륨을 저장그렇게 사운드 조절과 퀄리티 세팅도 다 넣어주자. === 게임씬이라는 애를 만든다.시작 버튼 누를 시 그 씬으로 가도록 이어준다. === 터레인을 만들고 주인공을 넣는다.카메라가 주인공을 따라가게 하자.FollowCamera.cs를 만든다.그 다음 주인공을 public gameobject로 받아온 후 주인공의 포지션과 카메라의 포지션을 벡터3로 각각 저장한다(heroPos, camPos)그리고 카메라의 포지션을 주인공에게서 일정 위치로 떨어뜨려놓는다.(우선은 주인공이 어디를 보든 상관없이 한 쪽으로 카메라 고정) ===그리고 주인공의 움직임을 다룰 스크립트를 만들자.MoveCh..
Sprite로 로고를 화면에 띄우고 스크립트(Logo.cs)를 하나 붙인다.Logo.cs에서는 DoTween을 이용한다.로고의 SpriteRenderer를 Getcomponent하고나타났다 사라지게 DoFade를 Sequence로 준다.이 때 시퀀스가 다 끝난 순간을 알기 위해 Sequence sq = DoTween.Sequence().AppendInterval(1.0f).Append(할 일들 쭉 .Append로 넣어줌).AppendCallback(() =>{시퀀스 끝나면 불릴 함수});sq.Play(); === Canvas를 World Space로 만든 후 Button을 단다(게임시작, 종료) 그 다음 Canvas의 active를 꺼두고 Logo.cs에 그 canvas를 public한 GameObjec..