전체 글 37

# 027 Portfolio video (with. perf)

https://github.com/Kimhyogyeom/ProjectA GitHub - Kimhyogyeom/ProjectA: Unity-MOBA-PrototypeUnity-MOBA-Prototype. Contribute to Kimhyogyeom/ProjectA development by creating an account on GitHub.github.com 안녕하세요. 오늘은 프로젝트의 전체 요약본 영상을 녹화해 보았습니다. 시간을 3~4분으로 줄여보려고 했지만.. 쉽지 않더라고요. 그래도 7분 이내로 세이브했습니다.🤣 추가로 Tap 키를 누르면 Score Board가 나오게 작업을 해주었습니다. ScoreBoardController 스크립트using System.Collection..

인사말

안녕하세요. 요즘 ProjectB를 어떤 걸 해볼지 생각하다가 최근 동향도 살필겸 시중에 나와있는 게임들을 찾아보기 시작했습니다. 그중 드드드드릴 게임이 있었는데요. https://play.google.com/store/apps/details?id=com.tree.godown&hl=ko 드드드드릴 - Google Play 앱귀여운 외계인의 우주 정복기! 땅파서 획득한 장비를 업그레이드하고 괴물과 전투하여 승리하세요!play.google.com 홍보글은 아닙니다.😄 단순한 조작법에, 재미있는 연출이 많다고 생각되어 흥미가 생겼고, 모바일 + 광고 + 결제 등 다양한 시스템이을 구현 해 보고 싶다는 생각도 들어서 이 게임을 레퍼런스 삼아 모작 프로젝트 ProjectB를 준비해 보려고 합니다. http..

# 026 Git (with. ScriptableObject)

https://github.com/Kimhyogyeom/ProjectA GitHub - Kimhyogyeom/ProjectA: Unity-MOBA-PrototypeUnity-MOBA-Prototype. Contribute to Kimhyogyeom/ProjectA development by creating an account on GitHub.github.com 안녕하세요. 작업을 하다 보니 코드가 길어지고, 코드에서 전과 무엇이 수정됐는지 등 알아보기가 어려워 git으로 관리를 하기 위해 리포지토리를 새로 만들어 주었고 README를 새로 작성해 주었습니다. 우선 작업은 maindev - feature/...전략으로 하려고 했는데요. 생각해 보니 협업으로 진행하는 것이 아니어서 충돌 문제가..

# 025 Victory (with. DOTween)

안녕하세요.🙂 오늘은 크게 4가지를 작업했습니다. 1. 플레이어가 포탑에 공격될 때2. 플레이어 사망 관련3. 넥서스 공격4. 승리 / 패배 먼저 플레이어가 포탑에 공격될 때입니다. 포탑이 플레이어를 공격하는 작업은 기존 TurretAttackObject 스크립트에서 구현했습니다. private void HitTarget(GameObject target) { EnemyStats enemy = target.GetComponentEnemyStats>(); if (enemy != null) { enemy.TakeDamageTurret(turrentStats.damage); } else { ..

# 024 GameManager (with.production)

안녕하세요. 이번 작업은 크게 5가지를 해주었습니다. 1. 텔레포트 작업 2. 기본 공격 및 스킬의 연출효과 3. 매니저를 이용한 전체 시스템 메시지 및 흐름 관리 4. 플레이어 to 포탑 공격 5. 아이콘 해제 먼저 텔레포트 작업입니다. PlayerTeleport 스크립트입니다.using UnityEngine;using UnityEngine.AI;public class PlayerTeleport : MonoBehaviour{ private Vector3 initialPosition; private Vector3 returnStartPosition; [SerializeField] private Animator animator; [SerializeField] ..

# 023 Object Icon (with. Minimap Drag & Click)

안녕하세요.😊 오늘은 크게 3가지를 작업하였습니다. 1. Enemy 관리.2. 오브젝트 요소 아이콘 배치3. 미니맵 드래그 및 클릭 이동 나름 어제보단 훨씬 볼만해진 것 같습니다.😖 우선 아이콘 배치는 넥서스와 터렛은 고정이기에, 미니맵 이미지 위에 배치하여 고정을 해주었습니다. 다음으로 Enemy 관리입니다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class EnemyManager : MonoBehaviour{ public static EnemyManager Instance; public ListGameObject> minions = new ListGameObject>(); ..

# 022 Map Design

안녕하세요. 오늘은 맵 디자인을 주 작업할 예정입니다😎 활용할 디자인 요소들을 찾아보며 폴더를 탐색해 보는데 이전에 캔디크러쉬를 모티브로 이것저것 찾아보며 작업했던 프로젝트가 있더라고요 반갑기도 하고 그때의 기억도 새록새록 돋아서 기분이 오묘... 했습니다ㅎㅎ 아직 개선을 해야 할 부분은 많지만! 당장에 급히 동작하도록 코드 추가 및 스프라이트를 추가해서 영상을 찍어봤습니다. 또한 기억도 더듬어보고 게임의 완성도도 높여 볼 겸 ProjectB로 진행해 보면 어떨지 생각 중입니다. 언제든 할 수 있고, Puzzle 요소와 메타버스 요소를 합쳐서 내 캐릭터를 직접 꾸미기도 하고, 장식품도 구매해서 집도 꾸미며 사람들도 만날 수 있게 하면 정말 재밌을 것 같은데요 ㅎㅎ 어찌 되었은 주 요소는 ..

# 021 Golem (2) (with. PlayerHpBar)

안녕하세요.🙂 오늘은 어제에 이어서 Golem에 관련된 마무리 작업을 하려고 합니다. 바로 이어서 코드를 보면서 일지를 작성해 보겠습니다. 기능이 추가된 "GolemAI"입니다.using System.Collections;using UnityEngine;using UnityEngine.AI;public class GolemAI : MonoBehaviour{ [SerializeField] private PlayerMovement playerMovement; [SerializeField] private PlayerAttack playerAttack; [SerializeField] private GolemStats golemStats; [SerializeField] private G..

# 020 Golem (1) (with. State)

안녕하세요.😀 오늘은 대중교통을 이용하면서 '어떤 작업을 진행해 볼까?' 고민하다가,정글 몬스터가 갑자기 떠올랐습니다. 우선 골램을 빠르게 만들어 보려고 했는데,테스트 과정이 생각보다 길어져 시간이 조금 걸렸습니다.🤣 먼저 새로 생성한 GolemAI의 전체 스크립트입니다.using UnityEngine;using UnityEngine.AI;public class GolemAI : MonoBehaviour{ float hp = 300f; // 임시 [SerializeField] private float attackCD = 3f; [SerializeField] private float attackRange = 1f; [SerializeField] private float ..

#019 Enemy (3) (whit. Combat)

안녕하세요. 😃 오늘은 지난번에 이어 Enemy 작업을 해주기로 했습니다. 우선 먼저 enemy가 포탑에 근접하였을 때 포탑을 향해 공격을 하며 HpBar를 깎아주는 작업입니다. 지난번 작성한 EnumyMovement > EnemyMovement 스크립트에서 변수를 추가해 주었습니다.using UnityEngine;using UnityEngine.AI;public class EnemyMovement : MonoBehaviour{ [SerializeField] private EnemyStats enemyStats; [SerializeField] private Animator enumyAnim; [SerializeField] private NavMeshAgent agent; [Se..

# 018 Login (with. Firebase)

안녕하세요.😁 이번에는 기분 전환(?)겸 평소 궁금하기도 하고 학습도 할 겸 Login 작업을 구현하기로 했습니다. 먼저 UI 작업부터 해주었습니다. 이미지는 LMArena를 활용하여 생성하였고 프롬프트는 Chat GPT를 활용하여 작성하였습니다. 로그인 구현은 Firebase로 해볼 생각입니다. Firebase에 "projectA"라는 명으로 앱을 등록시켜 주어 기본 세팅을 완료했습니다. 1. Unity에서 다운로드한 json 파일추가 2. Asset > import package > FirebaseAnalytics, Auth 추가 문제 1 : google-services.json 경로문제 원인 : google-services.json은 반드시 Assets/Streami..

# 017 Enemy (2) (with. Turret)

안녕하세요.😎 오늘은 Enemy에 관련된 작업 중 포탑(Turret)의 공격과 Enemy의 Hp가 줄어드는 작업을 할 예정입니다. 바로 코드부터 보겠습니다. TurretAttackObject Script이 스크립트는 포탑(Turret)가 발사하는 오브젝트를 제어하는 역할입니다.using UnityEngine;public class TurretAttackObject : MonoBehaviour{ [SerializeField] private TurrentStats turrentStats; [SerializeField] private float moveSpeed = 10.0f; private Transform targetTransform; public void Initialize(..

# 016 Enemy Spawn & movement

안녕하세요 😇 오늘은 Enemy의 Spawn과 이동 로직을 작업할 예정입니다. 우선.. 조금 창피하긴 한데, 제가 적을 칭하는 영어로 Enemy를 Enumy라고 사용을 했었더라고요.. 몰랐던 게 아니라.. 너무 흔한 단어여서 발음 가는 대로 작성해.. 이상할 것이라고 인지하지 못한 점 고백합니다 하하..😂 뭔가 적으면 적을수록 이상해지네요.. 먼저 Enemy가 Spawn을 해주는 넥서스입니다.뭔가 정적인 모델을 넣을까 하다가, 애니메이션을 통한 동적인 느낌을 연출하는 것이 더 재밌을 것 같기도 하고 Enemy가 소환이 될 때 애니메이션을 추가해 주는 것도 재밌을 것 같았습니다. 바로 코드를 살펴보겠습니다.using System.Collections;using UnityEngine;usin..

# 015 Development (with. feature additions)

안녕하세요. 😁 이번 작업은 개선 및 수정해야 할 사항들을 간략하게나마 Develop 하는 시간을 갖겠습니다. 사실 오늘은 Enumy에 관련하여 넥서스에서 생성, 목적지로 이동, 공격하는 포탑 등에 대한 작업을 하려고 했었는데요 우선적으로 꼭 fix를 해야 하는 곳도 보이고, 게임 플레이상 문제는 없지만 사용자 입장으로 추가 및 개선되어야 할 부분들도 보였습니다. 우선 현재의 파악한 부분들에 대해 빠르게 적어보겠습니다. 1. 아이템을 이동할 때 다른 Slot에 아이템이 있으면 덮어쓰는 현상입니다. 2. 상점에서 아이템을 구매 및 판매할 때 현재 상태에 대한 메시지가 없다는 점입니다. 3. 스킬 사용 후 애니메이션 진행 되는 상태에서 플레이어가 이동하는 문제 1. 먼저 아이템을 덮..

#014 Inventory (With. Store)

안녕하세요.😁 이번에는 아이템에 관련된 작업을 하기로 마음먹었습니다. 작업 계획은 다음과 같습니다. 1. 인벤토리에서 아이템 이동.2. 상점 UI 만들기.3. 아이템 구매 및 판매 먼저 인벤토리에서 아이템 이동 부분인 "InventoryItemDrag" 스크립트입니다.using UnityEngine;using UnityEngine.EventSystems;public class InventoryItemDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler{ private Transform dragCanvas; [SerializeField] private RectTransform rectTransform; [Seri..

# 013 Player Skill Point (with. Event Trigger)

안녕하세요. 이번에는 스킬에 마우스 포인터가 올라가면, 간단한 설명이 보이도록 하는 작업을 구현하기로 했습니다. 먼저 위 보이는 사진과 같이 사용자가 스킬에 마우스를 올리면 스킬의 간단한 설명 정보창이 팝업 되며 또한 레벨업을 하였을 때 "Level up!"이라는 팝업 될 알림 텍스트도 같이 배치를 해주었습니다. 뒤에 오는 +0의 값 은 플레이어의 스킬 포인트로 넘겨줄 예정입니다. 다음은 새로 생성한 "SkillDiscription"입니다.using TMPro;using UnityEngine;public class SkillDiscription : MonoBehaviour{ [Header("Component")] [SerializeField] private PlayerStats ..

# 012 Player Exp (with. Get Gold)

안녕하세요.🙍‍♂️ 이번 작업은 플레이어가 Enumy를 처치할 때 와, System Message를 작업해 주었습니다. 먼저 UI 작업을 해주었는데요뭔가.. 원하는 디자인 느낌이 안 나서 이것저것 찾아보다가 결국 찾지 못하고, 제가 했던 방식 중에 가장 깔끔한(?) 느낌으로 임시 저장해 두기로 하였습니다.(디자인적 요소는 차차 업데이트를 하도록 하겠습니다.) 먼저 "PlayerExpBar" 스크립트를 만들어 주었습니다.using TMPro;using UnityEngine;using UnityEngine.UI;public class PlayerExpBar : MonoBehaviour{ [SerializeField] private PlayerStats playerStats; [Serial..

#011 Minimap

안녕하세요. 이번에는 미니맵에 대해 작업을 해보려고 합니다. 처음에는 Unity에서 카메라를 한대를 더 생성해서 RenderTexture로 보여주는 방식을 생각했는데요 구현을 해놓고 미니맵 카메라에서만 보이는 레이어가 다른 아이콘 이미지를 생성하려던 도 중 현재 구상 중인 미니맵은 고정된 지형이고, 구조가 바뀌거나 파괴 등 실시간으로 렌더링 할 필요가 없다고 생각되어 렌더링 비용도 줄이고자 2D 이미지로 대체해 보기로 마음먹었습니다. 또한 미니언, 플레이어, 포탑, 넥서스 등 필요한 좌표만 구해와서 미니맵에 2D 이미지 아이콘만 해당 좌표에 띄우는 것이 훨씬 효율적이라고 생각했습니다. MinimapController 스크립트입니다.using UnityEngine;using UnityEngine..

# 010 Player Mp (with. Runtime Performance Stats)

안녕하세요.😀 이번 작업은 플레이어의 Mp에 관련된 작업을 해주었습니다. Mp는 Skill을 사용할 때 소모가 됩니다. 우선 작업 전 화면에 동적인 느낌이 너무 없어서 심심해 보였는데요 그전에 미리 배치해 둔 UI 요소들 중 fps / ms / time을 간단히 구현해 봤습니다. FpsDisplay 스크립트입니다.Time.deltaTime - fpsTime으로 현재 프레임과 이전 평균의 차이를 나타내었으며0.1f를 곱해줌으로써 10%만 반영해 차이의 폭을 보정해 주었습니다. fps = 1초 / 1 프레임 시간으로초당 프레임 수 (FPS)를 계산하며 Ceil() 함수를 사용해 소수점은 모두 올림 처리를 해주었습니다.using TMPro;using UnityEngine;public class FpsDi..

# 009 Enumy Hp (With. Skill Attack)

안녕하세요.😊 이번 작업은 Enumy를 공격해서 Enumy의 Hp Bar가 줄어드는 작업을 진행했습니다. 가장 먼저 이전에 작업했던 Skill에 애니메이션 전이 조건을 실행되게 작업하려던 도중 스킬을 발사할 때 원하던 방향으로 발사체가 날아가지만, 원하던 위치에 생기지 않는 문제를 발견했습니다. 수정 전 코드입니다.skill.skill1 Object.transform.position = playerTransform.position + new Vector3(0f, 1f, 0.4f); 스킬 오브젝트의 포지션이 생기는 위치를 플레이어의 기준 + 살짝 위 방향에서 z 축 0.4f의 위치에 생성되도록 했었는데요 바로 원인을 살펴보자면 단순히 봤을 땐 이상이 없어 보이지만! 새로 만든 new Vector3(..

# 008 Attack (with. Animation)

안녕하세요. 💪 이번 작업은 플레이어의 기본 공격과 애니메이션 작업을 병행해 주었습니다. 가장 먼저 애니메이션은 믹사모에서 무료로 가져와 주었습니다.링크 : https://www.mixamo.com Mixamo www.mixamo.com 다음은 플레이어의 애니메이터에 "IsAttack" 파라미터를 생성해 주어 애니메이션 "Attack"의 전이 조건으로 true/false로 설정해 주었습니다. 다음은 스크립트입니다. "PlayerAttack" 스크립트를 만들어 주었으며 하나씩 살펴보겠습니다.using System.Collections;using UnityEngine;public class PlayerAttack : MonoBehaviour{ [Header("Player Compon..

#007 Follow (with. Enumy)

안녕하세요.😌 오늘은 플레이어가 마우스로 선택된 몬스터(Enumy)를 따라가고 강조되는 효과를 작업했습니다. 먼저 몬스터는 이전에 Unity Asset Store에서 무료로 받았던 에셋을 사용했습니다. 다음은 플레이어의 이동을 담당하는 "PlayerMovement" 스크립트에서 Ray로 Enumy가 선택 됐는지 판단할 예정이기에 Enumy에 콜라이더를 입혀주었습니다. 다음은 "PlayerMovement" 스크립트입니다.using UnityEngine;using UnityEngine.AI;public class PlayerMovement : MonoBehaviour{ [Header("Player Component")] [SerializeField] private Animator playe..