목록전체 글 (32)
1vdlrwnsv1 님의 블로그
국비 교육 중 팀원이 만든 Uinty에서 Firebase데이터를 받아와 유저의 랭킹 정보를 표시 하는 기능이 있는데 UI 오브젝트가 생성이 안되는 문제가 생겼다 결국 여러 방법을 시도하며 안정적인 방법을 찾아냈다 기존 코드private void Init() { FirebaseManager.Instance.DB.Collection("users") .OrderByDescending("score") .Limit(3) .GetSnapshotAsync().ContinueWith(task => { if (task.IsCanceled || task.IsFaulted) return; ..
벡터의 내적과 외적 내적(Dot Product)두 벡터간 각도 또는 방향의 유사도을 알고 싶을 때 사용함두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지고, 90도의 각을 이루면 0의 값, 180도로 반대의 방향을 가지면 -1의 값을 가지게 된다. 즉, -1 이상 1이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있다결과는 스칼라(숫자) 이며1: 같은 방향0: 수직-1: 반대 방향 사용 예시:시야 판별: 플레이어가 적을 바라보고 있는지 확인할 때.Vector.Dot(player.forward, directionToEnemy) > cos(시야각/2)) 외적(Cross Product)두 벡터로부터 수직인 벡터를 만들 때 사용함결과는 벡터벡터는 두 벡터가 이루는 평면에 수직방향은 오..
탄피부터기존에는 탄피가 생성되는 EjectCasing() 함수 내부에서 Rigidbody 물리력을 직접 주었는데, 이 로직을 탄피 프리팹 자체에서 담당하도록 분리하고자 했다.이를 통해 탄피 프리팹 자체가 자기 물리 처리 및 사운드를 제어하도록 설계함으로써 책임 분리를 달성 변경 전 구조 private void EjectCasing(){ GameObject casing = ObjectPoolManager.Instance.GetObject(...); Rigidbody rb = casing.GetComponent(); // 여기서 직접 힘을 주고 토크를 적용함 rb.AddExplosionForce(...); rb.AddTorque(...);} 변경 후 구조 (방법 1)1. Shel..
게임 내에서 적 위치를 시각적으로 탐지하고 표시하는 레이더 시스템 구현원래는 구형 전투기 레이저 처럼 탐지 막대가 돌아가고 그에 맞게 타겟위치가 일시적으로 표시되는 레이더를 구현했으나 기획 목적과 맞지않아실시간으로 적의 위치를 표시해주는 미니맵 같은 레이더로 변경먼저 전자의 레이더를 구현해보자 Rader.csusing System.Collections;using System.Collections.Generic;using UnityEngine;public class Rader : MonoBehaviour{ public Transform raderCenter; public RectTransform raderPanel; public RectTransform sweepLine; public..
1. Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.Unity의 생명주기는 게임 오브젝트의 생성과 소멸을 관리하는 주요 메서드들의 호출 순서를 의미합니다. 생명주기는 크게 Awake → Start → Update → LateUpdate → OnDestroy 순으로 흐릅니다.Awake: 게임 오브젝트가 생성되면 가장 먼저 호출됩니다. 다른 스크립트의 참조를 초기화하거나 필수적인 설정을 할 때 사용합니다. 이 시점에서 다른 오브젝트나 컴포넌트가 아직 활성화되지 않았을 수 있으므로, 참조를 설정할 때 유의해야 합니다.Start: Awake 이후, 첫 번째 프레임이 업데이트되기 전에 호출됩니다. 이 시점에서는 다른 오브젝트들이 초기화가 완료되었기 때문에, 상호작용을 위한 준비가 가능해..
기존 Target 클래스using UnityEngine;using System.Collections;using UnityEngine.UI;using System.Xml;public class Target : MonoBehaviour{ [Header("타겟 데이터")] [SerializeField]private TargetSO data; // 프리팹에 직접 넣는 방식 private float currentHp; [SerializeField]private Animator anim; [SerializeField]private Text lvText; [Header("시민일 경우 메테리얼")] [SerializeField]private Material civilianMater..
사용 기술싱글톤 패턴: ObjectPoolManager.Instance로 어디서든 접근 가능.주요 필드 private readonly Dictionary> pools = new();설명Dictionary>key: IPoolable.ResourceInstanceID (오브젝트를 식별할 유니크 ID)value: 재사용 가능한 오브젝트들을 담은 Queue 사용 기술자료구조: Dictionary + Queue 조합 public GameObject GetObjectInPool(IPoolable resource, Vector3 position, Quaternion rotation, Transform parent = null) public GameObject GetObjectInPool(IPoolable resou..
PlayerPref란? 유니티에서 간단한 설정 값이나 데이터를 저장 할 수 있는 가능데이터는 문자열, 정수, 실수 만 저장 가능구조체, 배열, 리스트 등은 직접 변환해야함 저장 위치Windows: HKEY_CURRENT_USER\Software\Unity\UnityEditor\\Mac: ~/Library/Preferences/unity...plistAndroid: /data/data//shared_prefs/*.xmliOS: NSUserDefaults 사용법PlayerPref.SetInt("MyInt", 100);PlayerPref.SetFloat("MyFloat", 0.1);PlayerPref.SetString("PlayerName", "IkJoon"); 디스크에 저장하고 싶으면PlayerPref.Sa..