Unity 77

C# TryParse로 Switch문 개선하기

switch문에서 case로 번호를 눌렀을 시 해당 번호로 이동하게끔 로직을 주던 도중, 만약 아이템의 리스트가 100개 1000개라면 어떤식으로 대응해야 할까 생각이 들어 고민하던 끝에 TryParse를 이용해 이를 개선할 수 있다는 것을 깨달았다. 1.일반적인 switch문 아래는 일반적인 swtich 문이다. static void CheckCharacter(ref ICharacterinter.ICharacter selectCharacter, Armor armor, Sword sword) { bool isChoice = false; while (!isChoice) { Console.Clear(); Console.WriteLine("게임을 시작합니다."); Console.WriteLine("게임 시작 ..

Unity 2023.11.13

[C#] out 과 ref 키워드

C#의 고급 문법 중 out과 ref 키워드가 있다. 1. out 과 ref의 사용처 out과 ref는 메서드에서 매개변수를 전달할 때 사용된다. out 키워드는 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용된다. ref 키워드는 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용됩니다. out ref 키워드를 사용하면 메서드에서 값을 반환하는 것이 아닌, 매개변수를 이용해 값을 전달할 수 있습니다. 2. 예제 //out void Divide(int a, int b, out int quotient, out int remainder) { quotient = a / b; remainder = a % b; } int quotient, remainder; Divide(7, 3, out qu..

Unity 2023.11.10

C# 블랙잭 만들기

C#을 통한 간단한 블랙잭을 만드는 과정을 담은 내용이다. 1. 취지 어디까지나 코드 자랑이 아닌 함께 공부하기 위함이다. 그리고 코드리뷰를 함께 하면서 완전히 나의 것으로 흡수하기 위해 쓰는 내용이다. 코드리뷰에 있어서 취지에 대해 말하자면 SelectMany(SelectMany를 이용한 두 가지 배열을 list에 같이 돌려 다시 담는 내용) 라는 메서드를 이용하여 이러한 방법으로도 할 수 있다는 것을 함께 알아가기 위함이다. 난 어떤식의 코드를 짰고, 설명을 함으로써 흐름파악 및 안보였던 것들을 다시한번 보게끔 하기 위함이다. 어려웠던 점이라던지 힘들었던 부분에 대해서 같이 나누기 위함도 있다. 2. 설계 블랙잭의 규칙에 대해서 알아봤고, 이에 맞춘 설계를 하였다. 2-1 블랙잭의 핵심 규칙 52장의..

Unity 2023.11.09

SelectMany 를 이용한 다중 배열

SelectMany 를 이용한 다중배열로 두 개의 배열을 같이 돌려 숫자와 문자를 합쳐 카드로 만들었다. 코드는 아래와 같다. static List InitializeDeck() { string[] ranks = new[] { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; string[] suits = new[] { "♠", "♥", "◇", "♣" }; return ranks.SelectMany(rank => suits, (rank, suit) => rank + suit).ToList(); } 위 코드를 해석해보자면 2 ~ A 까지 각각 스페이드, 하트, 다이아, 클로버 를 붙여주는 식이다. 2스페이드, 2하트, 2다이아, 2클..

Unity 2023.11.08

[Unity] 2주차 틱택토 구현

2주차 과제에 text로 틱택토게임을 구현하라는 과제였는데 일반적인 배열로 판을 만드는게 아닌, 오늘 처음 배운 2차원 배열로 판을 만들고 이로 틱택토 게임을 하는것을 구현해 보겠다. 연습용으로 만드는 과제이기 때문에 잘 몰랐던 2차원 배열과 잘 못쓰던 do While을 사용하여 코드를 구현해 보았다. 1. 2차원 배열 2차원 배열은 행과 열로 이루어진 데이터 구조를 다루기에 적합한 배열의 한 종류다. 기본적인 코드는 아래와 같다. int[,] map = new int[5, 5]; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { map[i, j] = i + j; } } 5, 5면 행이 5 열도 5칸인 표가 하나 만들어진다. 이를 이용해 3 x 3..

Unity 2023.11.07

[C#] 재귀 호출과 구조체(struct) 및 구조체와 클래스의 차이

C#과 JAVA는 비슷한 부분이 매우 많다. 그 중 배우지않았거나 몰랐거나 다르다고 생각하는 부분을 정리할 생각이다. 물론 JAVA에도 이런 내용이 있을 수 있지만, 일단 내가 몰랐기에 정리하는 글이 되겠다. 1. 재귀 호출 재귀 호출이라고 하면 자기자신을 호출하는 것을 말하며, 이는 호출 스택에 호출된 메서드들을 순차적으로 쌓고, 메서드가 반환되면서 스택에서 순차적으로 제거되는 방식으로 동작한다. 코드는 다음과 같다. namespace _7_2Recursive { internal class Program { //재귀 호출 기초 static void CountDown(int n) { if (n

Unity 2023.11.06

[Unity] 카드 매칭 게임 프로젝트 마무리

4일 정도의 기간으로 팀원들과 함께 작은 토이프로젝트를 진행하여 마무리했다. 코드가 여러모로 지저분해 보이기도 했지만, 협업하면서 소통하다보니 잘 해결되지 않았던 문제들도 집단지성으로 해결했던 부분도 몇몇 있었다. 특히 git을 다루는 문제나 아직 Unity 공부를 한지 며칠 안돼서 이전에 했던 JAVA 웹개발과는 꽤나 차별점이 있었다.(event를 주는 부분에서나 특히 편이성이 Unity가 좋았다고 느낌) Unity를 시작하기 전에 조사했을때는 접근성이 좋다는 말을 들었는데 실제로 사용해보니 너무 편리해서 오히려 어려웠다고 느꼈다. eclipse사용할 때는 일일히 이벤트와 작동하는 흐름을 다 내가직접 연결했다면, Unity에서는 연결하는 일부분을 어느정도 도와주는 기능들이 많아서 헷갈리는 경우가 많았다..

Unity 2023.11.03

[Unity] TimeScale 사용시 유의할 점

프로젝트를 진행하면서 TimeScale을 통해 게임 종료시 게임을 멈추거나 일시정지 등 유용하게 사용할 수 있다. 사용방법은 아래와 같다. 1.TimeScale을 이용한 시간 정지 및 재생 GameManager.cs 중 일부분 /* 게임 종료 시 일어나는 함수 */ void GameEnd() { string sceneName = scene.name; isRunning = false; trialText.text = trialNum.ToString() + "회"; // trialText를 업데이트 warningBackground.gameObject.SetActive(false); Time.timeScale = 0f; endPanel.SetActive(true); thisScoreText.text = time..

Unity 2023.11.02

Unity Scene 불러오는 법 SceneManager.GetActiveScene()

Unity에서 자신의 신을 불러와야 하는 경우가 있다. 필자의 경우 카드 뒤집기 미니게임프로젝트 중 StrartScene에서 Easy모드 normal모드 Hard모드 세 가지 Scene을 사용하는데 게임이 끝나고 다시하기를 눌렀을 때 지금 진행하는 Scene을 띄우기 위해 Scene이름을 불러오는 코드를 사용했다. using UnityEngine.SceneManagement; Scene scene; private void Awake() { scene = SceneManager.GetActiveScene(); } public void RetryGame() { SceneManager.LoadScene(scene.name); } 해당 코드를 통해 retry 시에 현재 진행하고있는 씬을 로드하게끔 할 수 있다...

Unity 2023.11.01

PlayerPrefs를 이용해 데이터 저장하기

PlayerPrefs를 이용하면 내가 원하는 데이터값을 key값을 통해 저장하고, 이를 불러올 수 있다. 1.데이터 저장하기 데이터 저장은 다음과 같다. PlayerPrefs.SetFloat("key값", Float값); PlayerPrefs.SetInt("key값", Int값); PlayerPrefs.SetString("key값", String문자열); set을 통해 값을 저장하고, get을 통해 값을 가져오는 것이다. 데이터 불러오기 float num = PlayerPrefs.getFloat("key값"); int num = PalyerPrefs.getInt("key값") string str = PlayerPrefs.getString("key값"); 이를 이용해 점수를 key값에 담아 저장한 후, 가..

Unity 2023.10.31