C# 유니티 - 리스트 + 랜덤, 마우스클릭

Se0ng_1l·2022년 7월 26일
0
post-thumbnail

이 글은
https://www.inflearn.com/course/유니티-게임-프로그래밍-에센스
강의를 요약한 강의노트 입니다.
유니티를 처음 접하시는 분들이거나 좀 더 기반을 다지고 싶으신 분들에게 👍강력하게 추천합니다.

📌리스트

배열의 단점 :
배열은 확장 및 축소가 불가능하다. 따라서 배열의 범위 밖으로 접근할 경우
오류가 발생한다. 배열의 크기를 늘리기 위해 배열의 크기를 실행 중 수정하면
기존 배열이 가지고 있던 값들이 모두 초기화되어 없어져 기존 값들을 넣는 과정으로 시간이 낭비된다.
이러한 배열의 단점을 해결하기 위해 List를 사용한다.

List의 특징
1. 확장이 가능하다. Add...
2. 축소가 가능하다. Remove, RemoveAll, Clear...
3. 배열처럼 접근이 가능하다. 단, 범위 밖은 접근 불가능하다.
4. 람다식을 통해 다양한 함수를 구현하지 않아도 사용할 수 있다.
5. 리스트를 사용하려면 using System.Collections.Generic; 지시문을 넣어야 한다.

📌마우스, 랜덤

마우스 클릭관련 함수

Input.GetMouseButtonDown(0)
Input.GetMouseButton(1)
Input.GetMouseButtonUp(2)

0 == 마우스 왼쪽 클릭
1 == 마우스 오른쪽 클릭
2 == 휠 클릭

Random

Type num = Random.Range(min, max);
min ~ max사이에 랜덤한 값을 리턴해준다.
Type에 해당하는 형에 min ~ max값 사이의 랜덤한 값을 리턴해 num에 넣는다.

📌Code

배열을 사용한 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    public int[] scores = new int[10];
    private int idx = 0;
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            scores[idx++] = Random.Range(0, 100);
        }
    }
    
}

리스트를 사용한 코드, Add함수 사용

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    public List<int> scores = new List<int>();
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            int randNumber = Random.Range(0, 100);
            scores.Add(randNumber); // 리스트에 원소 추가
        }
    }
    
}

📌삭제

리스트에서 삭제는 원소를 삭제하는 것이 아닌 리스트 밖으로 빼내는 개념이다. 삭제 후 빈 공간은 뒤에 원소를 당겨와서 채운다.
이 작업을 Trim이라고 부른다.
RemoveAt() : 괄호 안 인덱스에 해당하는 원소를 삭제한다.
Remove() : 괄호 안에 값을 가지고 리스트에 해당하는 값이 있는지 찾고 있다면 삭제한다. 중복된 값이 리스트에 있다면 가장 먼저 오는 원소를 삭제
Clear() : 리스트 안 모든 원소를 삭제해 리스트를 비운다.
RemoveAll() : 괄호안 람다식을 통해 조건이 만족한다면 해당 원소를 삭제한다.

📌삭제 관련 코드

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    public List<int> scores = new List<int>();

    void Start()
    {
        int score0 = 45;
        int score1 = 60;
        int score2 = 75;
        
        scores.Add(score0);
        scores.Add(score1);
        scores.Add(score2);
        scores.Add(score2);
        scores.Add(score2);
        scores.Add(score2);
        scores.Add(score2);
        scores.Add(score2);
        
        scores.RemoveAt(1); // index 1에 해당하는 원소 60 제거
        scores.Remove(45); // 원소의 값이 45인 값을 제거
        scores[0] = 119;
        scores[1] = 119;
        scores.RemoveAll(x => x != 119); 
        // x는 리스트 안에 값으로 x의 값이 119가 아니라면 삭제한다.
        // 이때 List의 크기는 2가 된다. 0 => 119 1 => 119
        scores.Clear();
        // List 비우기
    }
}
profile
치타가 되고 싶은 취준생

0개의 댓글