static

"한정자"로서 메소드나 변수 등을 수식한다.

한정자: 다른 요소들을 꾸며주는 역할

C# 프로그램의 각 요소는 코드가 실행되는 시점에 비로소 메모리에 할당하는 반면,

Static 키워드로 수식되는 코드는 프로그램이 처음 구동될 때부터 메모리에 할당이된다.

 

 

CLR : Common Language Runtime

C#으로 만든 프로그램이 실행되는 환경.

C#뿐만 아니라 CLS(Common Language Specification) 규격을 따르는 모든 언어로 작성된 프로그램을 지원하기때문에 이름이 붙여짐.

 

void

"비어있는" 라는 뜻이다. 이 메소드가 어떠한 결과도 돌려주지 않을 것이라는걸 컴파일러에게 알려주는 기능

'TIL' 카테고리의 다른 글

TIL-2024/02/21(버튼을 눌렀을때 저장법)  (0) 2024.02.21
TIL-2024/02/08  (0) 2024.02.08
TIL-2024/02/02  (0) 2024.02.02
TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/30  (0) 2024.01.30

Json에 저장/불러오기

  public void SaveData()
  {
      string data = JsonUtility.ToJson(playerData,true);
      path = Path.Combine(Application.dataPath,playerData.name +"JSon");
      File.WriteAllText(path, data);
  }
   public void LoadData()
   {
       string data = File.ReadAllText(path);
       playerData = JsonUtility.FromJson<PlayerData>(data);
   }

 

저장,로드씬하는 dataManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.IO;
using UnityEngine.UI;

public class DataManager : MonoBehaviour
{
    public class PlayerData
    {
        public string name;
      
    }
    public static DataManager instance;
    public int CurrentIndex;
    public PlayerData playerData = new PlayerData();
    string path;

    public Text playerName;
 
    private void Awake()
    {
        if(instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);
    }

    public void SaveData()
    {
        string data = JsonUtility.ToJson(playerData,true);
        path = Path.Combine(Application.dataPath,playerData.name +"JSon");
        File.WriteAllText(path, data);
    }
    public void LoadData()
    {
        string data = File.ReadAllText(path);
        playerData = JsonUtility.FromJson<PlayerData>(data);
    }
   
    public void LoadSceneMainScene()
    {
       playerData.name = playerName.text;
        SceneManager.LoadScene("MainScene");
        Debug.Log(playerName.text);
        
    }
}

'TIL' 카테고리의 다른 글

TIL-2024/03/12  (0) 2024.03.12
TIL-2024/02/08  (0) 2024.02.08
TIL-2024/02/02  (0) 2024.02.02
TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/30  (0) 2024.01.30

ATM 과제 중 기능을 구현하였지만 GameManager.cs에 몰아서 하였다.

하지만 Class를 나눠야해야 나중에 협업할때도 좋고  유지보수도 좋은 점을 알고있어서

스크립트를 분리하려다가 클라스를 나누는 기준?점을 인지하고있지 않아 실패를 하였다.

 

해설 강의를 보고 좀 스크립트를 나누고 하는법을 알게되었다.

 

UI에서 바뀌는 텍스트값을 연결시켜주기

 

[UserData.cs]

[System.Serializable]
public class UserData
{
    public string Name;
    public int Balance;
    public int Cash;

    

    public UserData(string name,int balance,int cash)
    {
        Name = name;
        Balance = balance;
        Cash = cash;
  

    }

 

 

[GameManager.cs] 에다가 UserData.cs을 붙여준다.

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public UserData User;


    private void Awake()
    {
        if(Instance == null)
            Instance = this;
        else
            Destroy(gameObject);
    }

 

 

UI를 관리하는 [PopUpBank.cs]에서 gamaManager을 통해 UserData값을 가져온다.

public class PopUpBank : MonoBehaviour
{
    [SerializeField] private Text userName;
    [SerializeField] private Text balance;
    [SerializeField] private Text cash;
    [SerializeField] private GameObject popupError;
    
    
    private void Start()
    {
        Refresh();
    }
    
     private void Refresh()
    {
     userName.text = GameManager.Instance.User.Name;
     balance.text = GameManager.Instance.User.Balance.ToString();
     cash.text = GameManager.Instance.User.Cash.ToString();
  
    }
 }

 

유니티에서 해당 텍스트들을 끌여다주면된다.

 

게임매니저에게는 이렇게 노출해주고싶은걸 넣어주면된다.

 

그럼 게임페이지에서 노출이 이렇게된다.

'TIL' 카테고리의 다른 글

TIL-2024/03/12  (0) 2024.03.12
TIL-2024/02/21(버튼을 눌렀을때 저장법)  (0) 2024.02.21
TIL-2024/02/02  (0) 2024.02.02
TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/30  (0) 2024.01.30

강의를 듣다가 자꾸 궁금한게 생겨 딴곳으로 빠지게된다..ㅠ

InputActionPhase.뒤에 어떤것들이 올수있을까? 

if(context.phase == InputActionPhase.Performed)

 

 

  • Started: 실행 시작 시 호출
  • Performed: 실행 확정 (완전히 실행) 시 호출
  • Canceled: 실행 종료 시 호출
  • Disabled: 액션이 활성화되지 않음
  • Waiting: 액션이 활성화되어있고 입력을 기다리는 상태

일반적인 버튼 입력 상황 (Default)에서는 Started와 Performed가 같은 타이밍에 실행(실행 순서는 Started가 먼저)
그리고 Canceled는 버튼을 뗐을 때 실행됨

   public void OnMoveInput(InputAction.CallbackContext context)
   {
       if(context.phase == InputActionPhase.Performed) // 만약 입력을 받고있다면,마우스가 움직인다면
       {
           curMovementInput = context.ReadValue<Vector2>();
       }

       else if(context.phase == InputActionPhase.Canceled) //안움직이면
       {
           curMovementInput = Vector2.zero;
       }
   }

 

 

강의와 예외로 구글링을 하다가 Hold에 대한걸 찾았다.

입력 시스템의 Interaction 중 Hold에 대한 예시를 들어보면,

Hold를 감지하기 위한 pressPoint가 있고, 이 pressPoint를 넘어가는 순간 started가 실행됩니다.
그리고 그 상태에서 duration만큼의 시간이 흐르면 그때가 되어서야 performed가 실행됩니다.

스마트폰 홈 화면에서 앱을 누르고 홀드하는 것과 비슷한 경우입니다.
그냥 터치했을 때는 앱이 실행되고, 오래 터치하고 있으면 앱 위치를 이동하는 모드로 변경되는 것처럼요.

 

뭔가 꾹누르고있을때 요리를한다던가 이런곳에 쓸수있을것같다.

아래어떻게 쓰는지 몰라서 gpt에게 물어본 코드이다.

using UnityEngine.InputSystem;

public class AppController : MonoBehaviour
{
    private InputAction touchAction;
    private bool isHolding = false;

    void Start()
    {
        touchAction = new InputAction(type: InputActionType.PassThrough, binding: "<Touchscreen>/primaryTouch");
        touchAction.AddInteraction("hold(duration=2)"); // 지속시간을 2초로 설정
        touchAction.started += context => OnTouchStarted(context);
        touchAction.performed += context => OnTouchHeld(context);
        touchAction.Enable();
    }

    private void OnTouchStarted(InputAction.CallbackContext context)
    {
        isHolding = false;
        Debug.Log("App is activated");
        // App activation code goes here
    }

    private void OnTouchHeld(InputAction.CallbackContext context)
    {
        if (!isHolding)
        {
            isHolding = true;
            Debug.Log("Switch to app moving mode");
            // App moving mode code goes here
        }
    }
}

 

 

이해가 가지 않는 코드해석해보기 -1
 public void OnLookInput(InputAction.CallbackContext context) 
 {
     mouseDelta = context.ReadValue<Vector2>(); 
    
 }

 

 public void OnLookInput(InputAction.CallbackContext context) ==

OnLookInput 함수를 실행할때 Player에 붙여둔 Events 내에 설정해둔 Look을 매개체로 쓰겠다).

 

Look Action에 할당된건 Delta[Mouse]이므로

 

 mouseDelta = context.ReadValue<Vector2>(); 를 읽어온다.

 

 

 

이해가 가지 않는 코드해석해보기 -2

 

    void CameraLook()  
    {
        camCurXRot += mouseDelta.y * lookSensitivity;
        camCurXRot = Mathf.Clamp(camCurXRot,minXLook,maxXLook); 
                                                               
        cameraContainer.localEulerAngles = new Vector3(-camCurXRot, 0, 0); 
        transform.eulerAngles += new Vector3(0, mouseDelta.x * lookSensitivity, 0);
    }

  

 

    카메라가 바라보는 코드 ,마우스로 움직일수있게할꺼임 ()
    {

     [첫째 줄]
        x축이 축이되어야 y의 값이 변하기 때문에, x = 마우스위아래(Y)하는거리 * 민감도(속력)

    [둘째 줄]
       위의 끄덕임을 더 돌아가지않게 가두기
       Mathf.Clamp (첫번째 매개변수 value는 집어 넣을값(=검사할값) , 두번째 매개변수 min 최소값 , 세번째 매개변수                max최대값) 

    [셋째 줄]
    마우스를 상하로 움직이는 각도를 조절하는 "localEulerAngles" ,

    x축에 ( - ) 를 붙여주는 이유는 ??

    실제로 로테이션을 돌렸을떄 마우스를 밑으로 내리면서 시야가 위로 향할때 x가 -가되기떄문


     [넷째 줄] 

    도리도리가능하게 y축을 (x축의거리*속력) 만큼 이동
    }

'TIL' 카테고리의 다른 글

TIL-2024/02/21(버튼을 눌렀을때 저장법)  (0) 2024.02.21
TIL-2024/02/08  (0) 2024.02.08
TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/30  (0) 2024.01.30
TIL-2024/01/29  (0) 2024.01.29
GameObject
 함수 이름 설명 
 Find  오브젝트 이름으로 검색하여 가장 처음에 나오는 오브젝트를 GameObject로 반환한다.
 FindWIthTag  태그 이름으로 검색해서 가장 처음에 나타난 오브젝트를 GameObject로 반환한다.
 FindGameObjectsWithTag
 태그 이름으로 검색해서 나타난 오브젝트 여러개를 GameObject 배열로 반환한다.
 GameObject.FindObjectOfType  오브젝트형(혹은 컴포넌트의 형)으로 검색해서 가장 처음 나타난 오브젝트를 GameObject로 반환한다.
(유효한 오브젝트만)
 GameObject.FindObjectsOfType  오브젝트형(혹은 컴포넌트의 형)으로 검색해서 가장 처음 나타난 오브젝트 여러개를 GameObject 배열로 반환한다.
(유효한 오브젝트만) 

 

Transform
 함수 이름 설명 
 Find  Object의 이름으로 자식 오브젝트를 검색해, 가장 처음에 나타난 자식 오브젝트를 반환한다.
 GetComponentInChildren  컴포넌트 형으로 자식 오브젝트를 검색해서 처음 나타난 자식 오브젝트를 반환한다.
 GetComponentsInChildren
 컴포넌트 형으로 자식 오브젝트를 검색해서 나타난 자식 오브젝트들의 배열을 반환한다.
 GetComponentInParent  컴포넌트 형으로 부모 오브젝트를 검색해, 가장 처음에 나타난 부모 오브젝으를 반환한다.
 GetComponentsInParent  컴포넌트 형으로 부모오브젝트를 검색해서 나타난 부모 오브젝트들의 배열을 반환한다.
 Transform.FindObjectOfType  오브젝트형(혹은 컴포넌트의 형)으로 검색해서 가장 처음 나타난 오브젝트를 반환한다.
(유효한 오브젝트만)
 Transform.FindObjectsOfType   오브젝트형(혹은 컴포넌트의 형)으로 검색해서 나타난 여러개의 Object들을 배열의 형태로 반환한다.
(유효한 오브젝트만) 

'TIL' 카테고리의 다른 글

TIL-2024/02/08  (0) 2024.02.08
TIL-2024/02/02  (0) 2024.02.02
TIL-2024/01/30  (0) 2024.01.30
TIL-2024/01/29  (0) 2024.01.29
TIL-2024/01/25  (0) 2024.01.25

맵이 큰  경우 플레이어가 이곳저곳 돌아다니는데 카메라도 같이 따라 움직이게하는 기능이다.

 

이 코드는 내가 작성한게 아니지만 배울수있어 추가해본다.

 

public class CameraController : MonoBehaviour
{
    private Transform player;
    private float position_x;
    private float position_y;

    void Update()
    {
        player = GameManager.instance.player.transform;

        if (player.position.x < -29 || player.position.x > 34)
        {
            if (player.position.x < 0)
            {
                position_x = -29;
            }
            else
            {
                position_x = 34;
            }
        }
        else
        {
            position_x = player.position.x;
        }
        if (player.position.y < -32.5 || player.position.y > 27)
        {
            if (player.position.y < 0)
            {
                position_y = -32.5f;
            }
            else
            {
                position_y = 27;
            }
        }
        else
        {
            position_y = player.position.y;
        }

        transform.position = new Vector3(position_x, position_y, transform.position.z);
    }
}

'TIL' 카테고리의 다른 글

TIL-2024/02/02  (0) 2024.02.02
TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/29  (0) 2024.01.29
TIL-2024/01/25  (0) 2024.01.25
TIL-2024/01/24  (0) 2024.01.24

C#이 지원하는쿼리식 문법

 

정렬

OrderBy // 오른차순으로 정렬

OrderByDescending  //내림차순으로 정렬

ThenBy 오름차순으로 2차 정렬

ThenByDescending // 내림차순으로 2차 정렬

Reverse // 컬렉션 요소의 순서를 거꾸로 뒤집기

 

집합

Distinct //중복값 제거

Except // 두 컬렉셕 사이의 차집합 반환

Intersect // 두 컬렉션 사이의 교집합 반환

Union // 두 컬력션 사이의 합집합 반환

 

필터링

OfType // 메소드 형식 매개변수로 형식 변환이 가능한 값들 추출

Where // 필터링할 조건을 평가하는 함수를 통과하는 값들 추출

수량연산

All // 모든 요소가 임의의 조건을 모두 만족시키는지 평가

Any // 모든 요소 중 단하나의 요소라도 임의의조건을 만족시키는지 평가합니다.

Contains // 명시한 요소가 포함되어 있는 지 평가합니다.

 

'TIL' 카테고리의 다른 글

TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/30  (0) 2024.01.30
TIL-2024/01/25  (0) 2024.01.25
TIL-2024/01/24  (0) 2024.01.24
TIL - 2024/01/22  (0) 2024.01.22

+ Recent posts