Resources유니티에서 사용하는 특수한 폴더이름이다.해당 프로젝트에 있는 Resources라는 폴더에 있는 에셋을 탐색하여 로드할 수 있다.Resources.Load("path");해당 작업은 동기로 진행되어 병목이 걸릴 수 있다.이를 비동기로 처리하는 방법도 있다.단, 이러한 방식은 오래된 방식이다.개선된 방법으로는 Addressable Asset을 사용하는 것이다.https://unity.com/kr/blog/technology/tales-from-the-optimization-trenches-saving-memory-with-addressables 어드레서블 에셋 시스템으로 메모리 최적화하기고품질 게임은 메모리 내외부로 에셋을 효율적으로 스트리밍하는 기능을 필수로 갖추고 있어야 합니다. 저는 유..
멋쟁이 사자처럼
AngryBird 클론 코딩앵그리 버드 클론 코딩 프로젝트를 진행했다.다른 시스템이나 기능을 접목하려 했지만, 아이디어가 떠오르지 않아 최대한 유사하게 만들어보기로 했다. 기본 시스템우선, 앵그리 버드의 기본 시스템을 다음과 같이 정의했다.새총을 뒤로 당겨 새를 발사한다.구조물이 존재하고 발사된 새가 부딪혀 피해를 줄 수 있다.구조물 사이에 적(돼지)이 존재하고 구조물이나 새에 부딪혀 피해를 입는다. 새총 발사새총을 뒤로 당겨 새를 발사하기 위해서 새총 기능을 담당할 오브젝트를 생성했다.마우스로 해당 오브젝트를 클릭한 뒤, 드래그해 줄을 당기도록 구현하고 싶었다.이를 구현하기 위해 마우스 이벤트를 처리하는 인터페이스를 상속받아 진행하였다.using System;using System.Collect..
오브젝트 드래그게임상에서 오브젝트를 클릭하고 드래그하는 방법을 알아보자.우선, 가장 간단한 방법은 마우스 입력이 일어나면 마우스 포인터 위치에 raycast를 진행해 오브젝트를 찾아서 처리하는 것이다.하지만, 다른 방법도 있다.마우스 입력을 처리하는 인터페이스를 사용하면 된다.using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;public class DraggableObject : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler{ private Vector3 star..
벡터의 내적벡터의 내적은 게임 수학에서 자주 사용되는 개념이다.내적의 결과는 스칼라 값이다.이 결과를 통해 다음과 같은 정보를 알 수 있다.결과가 음수라면 두 벡터의 사이각이 90˚~270˚ 사이에 있다.내적은 $cos \theta$ 가 곱해지기 때문이다90˚~270˚에 있다는 뜻은 자신보다 뒤에 있다는 뜻이 된다.내적의 결과는 하나의 벡터를 다른 벡터에 투영한 벡터의 크기와 같다.즉, 하나의 벡터를 분리하여 다른 벡터의 방향에 대한 크기를 알 수 있다. 간단한 예로, 입사각과 반사각을 생각해 보자.바닥이 고정되어 있고 하나의 물체가 특정한 방향으로 떨어져 바닥과 완전 탄성 충돌을 한다고 가정해 보자.그렇다면 물체가 바닥에 튕겨 나갈 것이다.이를 수학적으로 계산하면 다음과 같다.바닥은 고정되어 있어 no..
스킬UI 버튼이 눌렸을 때, 스킬이 사용되도록 만들어 보자.우선, 스킬 버튼을 만들어 보자.해당 버튼은 다음과 같은 스크립트를 갖고 있다.버튼 입력 처리를 위한 Listener를 관리하는 스크립트이다.using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;using UnityEngine.UI;public class CButton : MonoBehaviour{ [SerializeField]private Button button; private void Awake() { button = GetComponent(); } pu..
Animation CurveEaseInOut 같은 커브를 지원하는 클래스이다.public AnimationCurve curve = AnimationCurve.Linear(0,0,1,1);Vector3 newPosition = Vector3.Lerp(itemBeginPOS, boxTransform.position, curve.Evaluate(t / duration)); Item Spawner아이템을 동적으로 생성하는 spawner를 만들어 보자.using System.Collections;using System.Collections.Generic;using UnityEngine;public class ItemSpawner : MonoBehaviour{ public GameObject itemP..
캐릭터 점프캐릭터의 점프 기능을 추가해 보자.우선, Space를 입력하여 동작할 수 있도록 입력 Action을 추가하자.private InputAction Jump_Input;void Start(){ ... Jump_Input = Input.actions["Jump"]; ...}이를, Update함수에서 입력을 감지해 점프가 실행되도록 하면 된다.추가로 Animation까지 적용해 보자.private bool IsGround = true;public bool Ground{ get => IsGround; set => IsGround = value;}void Update(){ Vector2 moveValue = Move_Input.ReadValue(); if (moveVal..
2D 애니메이션2D 게임에서 입력에 따라 캐릭터의 애니메이션을 적용하는 방법은 다음과 같다. 우선, 애니메이션을 적용할 2D 이미지를 준비한다.이후, Sprite Editor를 통해 다음과 같이 Slice 해주면 된다.자동으로 크기를 설정해도 되고 원하는 크기로 자를 수도 있다.Slice가 적용되면 다음과 같다.Slice가 완료되면 다음과 같이 분할된 스프라이트가 생성된다.캐릭터로 사용할 GameObject를 생성하고 Sprite Render와 Animator를 붙여준다.원하는 애니메이션을 Animation View에 넣고 SampleRate를 설정하면 애니메이션을 만들 수 있다.만들어진 애니메이션을 Animator에서 설정하면 다음과 같이 동작한다.트랜지션 조절하면 애니메이션 간의 전이를 할 수 있다...
메테리얼 색상 변경GameObject의 적용된 Material의 색상을 변경해 보자.Material은 Render Component에 적용되어 있다.이를 받아와 color의 값을 변경하면 색상을 변경할 수 있다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class MatColorChanger : MonoBehaviour{ private BoxCollider boxCollider; [SerializeField] private GameObject cube; private Vector3 minBounds; private Vector3 maxBounds; void Start() ..
알고리즘알고리즘은 프로그래밍에서 문제를 해결하기 위한 단계적인 절차나 방법을 의미한다. 알고리즘의 주요 특징입력: 알고리즘은 하나 이상의 입력을 받는다.출력: 알고리즘은 하나 이상의 결과를 생성한다.명확성: 각 단계는 모호하지 않고 명확해야 한다.유한성: 알고리즘은 유한한 수의 단계 후에 반드시 종료되어야 한다.효율성: 알고리즘은 가능한 한 효율적으로 설계되어야 한다. 알고리즘의 중요성프로그래밍에서 알고리즘은 매우 중요한 역할을 한다.효율적인 알고리즘은 프로그램의 성능을 크게 향상시키고, 복잡한 문제를 해결하는 데 필수적이다. 알고리즘의 종류정렬 알고리즘: 버블 정렬, 퀵 정렬, 병합 정렬 등검색 알고리즘: 선형 검색, 이진 검색 등그래프 알고리즘: 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS),..