본문 바로가기

C#,Unity

(16)
스크립트로 UI 제어하기 - Selectable Unity에서 사용할 수 있는 UI들을 마우스뿐만이 아니라 키보드로 조작할 수도 있다는 사실은 여간 신기한 정보가 아닐 수가 없습니다. 그러나 대부분의 게임은 플레이 도중 원치 않게 UI를 조작하는 것을 방지하기 위해 Navigation을 None으로 설정해 키보드 조작을 막아놓는 경우가 많을 것입니다. 사실 본인은 게임 하나밖에 안 만들어봐서 보편적인 경험이라고 비약시키긴 힘들겠네요.  일반적으로 UI를 클릭하면 해당 UI는 Click 이벤트가 실행된 다음 Select 상태로 남습니다.UI의 Transition 정보에서 그것을 유추할 수 있습니다. 이 상태에서 해당 UI의 Navigation이 활성화되어 있다면 상하좌우+스페이스바/엔터 키코드로 주변 UI로 넘어가거나 클릭 없이 클릭 이벤트를 발동시킬 ..
Unity - 오브젝트 클릭 이벤트 만들기(IPointer,RayCast) 유니티에는 마우스 클릭으로 이벤트를 발생시켜야 할 상황이 많습니다.기본적으로 UI에 Button 컴포넌트가 있지만 이는 UI에만 적용 가능하고 오브젝트에서 사용 가능한 버튼 컴포넌트가 따로 존재하지는 않습니다. 이번에는 UI가 아닌 오브젝트를 클릭해 이벤트를 발생시키는 스크립트와,해당 스크립트를 이용해 Button 컴포넌트 없이 발동하는 UI 버튼을 만들어 보겠습니다. using UnityEngine.EventSystems;public class test : MonoBehaviour, IPointerClickHandler{ [SerializeField] private TextMeshProUGUI MyTMp = null; public void OnPointerClick(PointerEventData e..
Unity - Google Spreadsheet 연동하기(실시간X) 우선 실시간이 아닌 이유: 시트 내용을 불러올 때마다 셀의 값이 아닌 시트 전체의 값을 불러오기 때문에 하나하나 체리피킹해서 원할 때 사용하기엔 무리가 있음   게임을 만들다 보면 특정 수치들을 제어하는 데이터시트를 만들고 싶어질 때가 있습니다.단순 수치 조정뿐만이 아니더라도 ScriptableObject로 만지기에는 너무나 복잡하고 많은 양의 데이터라던가,언어 팩 등등 유니티 내부에서 하나하나 수정하기에는 껄끄러운 종류의 데이터 종류도 한두가지가 아닐 것입니다.  본인의 경우 이벤트의 ID,등장 위치, 등장 조건 및 내용물과 아이템의 내용, 그리고 각종 텍스트의 ID와 언어별(한글,영어) 값, 그리고 게임 내부 수치 등을 구글 스프레드세트를 사용해 나름이나마 좀 더 수월하게 편집할 수 있었습니다. 이러..
Unity - 부드럽게 순차적으로 이동시키기 목표: 여러 오브젝트를 경유하는 움직임에도 AnimationCurve를 적용하기 저번 포스팅에서 AnimationCurve를 적용해 부드러운 직선 움직임을 만들어 보았습니다.이번엔 여러 경유지를 통틀어 곡선 움직임을 보여주는 스크립트를 제작해봤습니다.public class test : MonoBehaviour{ [SerializeField] private AnimationCurve MyCurve = null; [SerializeField] private List Targets= new List(); private void Awake()=> StartCoroutine(movecoroutine()); [SerializeField] private float TargetTime = 7.0f; pri..
Unity - 순차적으로 진행되는 코루틴 대기열 만들기(Queue 활용) 유니티에서 코루틴을 다루다 보면 WaitforSecond나 WaitUntil같이 일정 시간, 혹은 일정 조건까지 기다리게 하는 대기문을 사용하는 경우가 잦습니다.'몇 초간 기다려라' 혹은 '무엇이 어떻게 될 때까지 기다려라' 외에도 '이 코루틴이 끝날 때까지 기다려라'라는 대기 조건도 있는데,마지막의 경우는 yield return startcoroutine()으로 구현할 수 있습니다.  이번에는 여러 코루틴을 받아올 때마다 선입선출 방식으로 하나하나 실행하게 하는 스크립트를 만들어보겠습니다.public class TempManager : MonoBehaviour{ private static TempManager instance = null; public static TempManager Instanc..
Unity - Coroutine을 변수로 사용하기 코루틴은 아주 유용합니다.비동기로 작동하기 때문에 시간과 관련된 기능을 구현할 수 있어 각종 게임 기능과 뗄래야 뗄 수 없는 감초입니다. 코루틴의 시작은 StartCoroutine, 정지는 StopAllCoroutine으로 명령한다는 것은 딱히 본문에서 언급하지 않아도 많은 분들이 알고있으실 것입니다. 그러나 StopAllCoroutine을 사용하면 해당 스크립트에서 작동중인 모든 코루틴이 일괄적으로 중지되어 세밀한 조작에는 맞지 않는다는 특징이 있습니다. StopCoroutine(normalcoroutine());보통 StopCoroutine을 처음 사용해보신 분들은 위 코드처럼 멈추고 싶은 코루틴을 대입해본 경우가 많을 것입니다.그러나 StopCoroutine은 StartCoroutine처럼 '코루틴..
Unity UI - 화면을 벗어나지 않은 UI 만들기 유니티에서 UI를 다루다 보면 가끔 마우스를 따라가야 하는 UI를 제작할 때도 있습니다.이러한 경우 마우스가 화면 가장자리까지 이동하면 해당 UI가 가장자리를 넘어가서 보기 안 좋은 경우가 많습니다.딱히 마우스를 따라가지 않더라도 몇몇 상황에서 UI가 화면을 넘어가는 경우도 있긴 합니다. 그러한 경우를 대비해 화면을 벗어나지 않으면서 자유롭게 이동하는 UI 예시를 제작해 보았습니다. 우선 캔버스 설정은 Screen Space - Camera, Scalew with Screen Size(1920:1080)으로 설정되어 있습니다.public class test : MonoBehaviour{ [SerializeField] private RectTransform PreviewRect = null; [Seri..
Unity - 오디오 싱글톤으로 사운드 관리한 기록 우선 본 작성자는 아마추어 개발자이고 본문의 내용은 본인의 개인적 경험을 인용한 것이며, 결코 업계 표준의 방식인지 알 수 없다는 점을 알아주시길 바랍니다. https://store.steampowered.com/app/2693250/Way_Nd_Choice/ Save 20% on Way Nd Choice on SteamWay Nd Choice is a game that combines a resource management adventure with a text adventure, AI Illusts, AI Illusts. Explore the world and complete the given objectives by consuming health, sanity, and gold appropriate..