본문 바로가기

Unity

(48)
캐주얼 슈팅 액션 대전 게임 (모바일) - 11 피격시 카메라 흔들림, Hit Effect 변경 어제는 몇가지 변경 및 추가 사항들이 있었다. 기존의 hitEfffect는 거의 티가 나지 않고 예쁘지가 않아 괜찮은게 있나 찾아보던 중 현재 스타일과 잘 맞는 이펙트를 찾게 되었다. 기존의 코드에서는 그냥 캐릭터의 위치를 받아서 y 값으로 0.5만큼 올렸었다. 하지만 이럴 경우 문제가 있는데 이펙트가 캐릭터 안에서 터지기 때문에 조금 조치를 취해 줄 필요가 있었다. 문제 발견: 이펙트가 캐릭터 안에서 나오기 때문에 눈에 띄지 않는다. public class EffectManager : MonoBehaviour { private MemoryPool memoryPool; private Camera mainCam; void Start() { memoryPool = GameObject.Find("MemoryP..
캐주얼 슈팅 액션 대전 게임 (모바일) - 10 오브젝트 풀 개선 이전에 만들었던 오브젝트 풀은 리스트 한 개를 사용하여 bullet과 hitEffect 모두를 넣어놨다. 만약 나중에 추가적으로 관리해야 할 오브젝트들이 늘어난다면 리스트 안에서 특정 오브젝트를 찾는데 많은 연산을 해야할 지도 모른다. 예를 들어 리스트 안에 Bullet이 10개 HitEffect가 10개 StunEffect가 10개 있다고 해보자 필자는 리스트에 이 오브젝트들을 차곡차곡 넣어놨기 때문에 StunEffect를 가져다가 쓰려면 최소 21번은 리스트를 뒤져야 한다. 그래서 이 점을 개선하기 위해 오브젝트별로 리스트를 나눠놔야할 필요성을 느꼈다. 물론 지금은 관리해야 될 오브젝트들이 몇개 되지 않아서 이렇게 써도 퍼포먼스 적인 측면에서 큰 타격이 없을 것이다. 하지만 회사에 들어간다거나 혼자 ..
캐주얼 슈팅 액션 대전 게임 (모바일) - 9 피격 애니메이션, 이펙트 추가 및 구조 수정 구조를 조금 수정했다. 원래 Mediator에서 명령을 내려줘야 하는데 Status부분에서 SetDamage를 하면서 Mediator한테 전달해주는 건 의도한 바와 조금 달랐다. 그래서 Mediator에 Damaged라는 함수를 만들어서 Bullet에서 피격 판정을 할 때 Status에서 SetDamage를 부르는게 아닌 Mediator의 Damaged를 RPC로 불렀다. [PunRPC] public void Damaged(float attackPower) { status.SetDamage(attackPower); UI.SetSliderValue(status.CurrentHP, status.MaxHP); DamageAnimation(); effect.HitEffect(transform); } 그리고 피격..
캐주얼 슈팅 액션 대전 게임 (모바일) - 8 포톤_4 피격 동기화 주말동안 피격 동기화와 제자리 공격시 꾹 누르고 있어도 한 번만 공격되는 등의 문제 해결을 했다. 사소한 거라 후딱 구현하고 블로그에 정리를 하려고 했는데 예상치 못한 이슈로 오래걸려버렸다... 토요일에는 금요일에 발견한 문제를 해결했다. 문제 발생: 제자리에서 공격키를 누르고 있으면 로컬 상태에서는 제대로 공격이 계속 나가는데 리모트 상태에서는 처음 한 번만 공격이 나감(공격 애니메이션이 한 번만 작동됨). 이 문제를 해결하기 위해서 공격 애니메이션을 불러오는 함수 RPC 처리를 했다. 기존의 Attack 함수 private void Attack() { attackDir = input.GetAttackDirection(); attackDir.Normalize(); if (attackDir != Vect..
캐주얼 슈팅 액션 대전 게임 (모바일) - 7 포톤_3 체력바, 닉네임 색깔로 적과 차별점 두기 전 포스팅에서 만들었던 PlayerUI 스크립트 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class PlayerUI : MonoBehaviour { private Color myColor; private Color enemyColor = Color.red; public TextMeshProUGUI playerName; public Slider playerHPBar; public Image hpBarFiller; private void Awake() { myColor = new Color(0, 226, 225); } public vo..
캐주얼 슈팅 액션 대전 게임 (모바일) - 6 체력바 기존 캐릭터 에셋에 들어있던 HP Bar는 슬라이더가 아니라 이미지여서 HP Bar를 만들었다. HPBarCanvas이다. 1. 화면 특정 부분에 보이는게 아닌 캐릭터 위에 위치해서 계속 따라다닐 것이기 때문에 Render Mode를 World Space로 했다. 2. 추가적으로 캐릭터 이름을 담을 TextMeshPro도 캔버스에 넣어뒀다. PlayerUI 플레이어가 가지고 있는 UI를 담당하는 스크립트이다. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class PlayerUI : MonoBehaviour { private Color..
캐주얼 슈팅 액션 대전 게임 (모바일) - 5 애니메이션에 맞춰 총 쏘기 양쪽 총에 붙인 Gun 스크립트이다. public class Gun : MonoBehaviour { public Transform firePosition; public enum Type { None, LeftGun, RightGun} [SerializeField] private Type gunType; public Type GunType { get => gunType; private set => gunType = value; } public void GunShot() { print(GunType); Instantiate(Resources.Load("Bullet"), firePosition.position, Quaternion.identity, transform.root.Find("Magazine")); ..
캐주얼 슈팅 액션 대전 게임 (모바일) - 4 포톤_2 로컬 플레이어한테 카메라, 조이스틱 할당해주기 Camera가 플레이어를 따라오는 스크립트를 만들었다. public class CameraController : MonoBehaviour { public Vector3 offset; private Transform target; private void Update() { if (target == null) return; transform.position = target.position + offset; } public void SetTarget(Transform target) { this.target = target; } } void Start() { charCtrl = GetComponent(); input = GetComponent(); aniCtrl = GetComponent(); pv = GetC..