본문 바로가기
공부/C#

스크립트에 변수가 많을 시 어떻게 정리할 것인가? - class 사용 정리 아이디어 정리

by 라이티아 2024. 11. 26.

현재 개발중인 유니티 TPS조작의 스크립트중 변수명이 있는 부분이다

public class PlayerMovement : MonoBehaviour
{
    private float _horizontal; 
    private float _vertical; 
    private float _mouseX;
    private bool _mouseLeft;
    private bool _canMove = true;

    private Animator _animator;

    public float moveSpeed = 10f;
    public float viewSpeed = 50f;
    public Vector3 cameraOffset;
    public bool isAiming = false;
    public bool isReload = false;
    private int _leftBullet = 30;

    private GameObject _aimIndicator;
    public Transform aimTarget;
    public GameObject gunMuzzle;
    private CameraMovement _cameraMovement;

    private float fireRate = 1f / 3f;
    private float lastFireTime = 0f;

    public int HP = 100;
    void Start()
    
    이하 작동 코드들

대충 보더라도, 이 변수들이 무엇을 하는지를 알 수 있어도 정리가 개판이라 가독성이 박살나 있다는 것을 알 수 있다

 

이를 해결하기 위해서 여러 아이디어를 생각하다 GPT와 대화하며 얻은 정리법을 시험해 보려 한다

 

 

현재 해볼것은 간단하다

이 변수들을 적당한 이름의 class로 묶어버린 뒤, 사용하는 것이다

 

예를들어

private float _horizontal; 
private float _vertical; 
private float _mouseX;
private bool _mouseLeft;
private bool _canMove = true;

이 이동과 관련된 변수들을

 

[System.Serializable]
public class MovementSettings
{
    public float _horizontal; 
    public float _vertical; 
    public float _mouseX;
    public bool _mouseLeft;
    public bool _canMove = true;
}

이렇게 class의 외부에 정의하는 것이다

 

그리고 이를 

 

public class PlayerMovement : MonoBehaviour
{
    [Header("Move")]
    public MovementSettings movementSettings;
    
    이하 동일

이렇게 Header와 함께 선언을 해준다

 

그리고 이를 사용한다

예를들어

 

private void HandleInput()
{
    _horizontal = Input.GetAxis("Horizontal");
    _vertical = Input.GetAxis("Vertical");
    _mouseX = Input.GetAxis("Mouse X") * viewSpeed * Time.deltaTime;
    _mouseLeft = Input.GetMouseButton(0);
    ControllSpeed();
}

원래 이렇게 되어 있는 부분을

 

private void HandleInput()
{
    movementSettings._horizontal = Input.GetAxis("Horizontal");
    movementSettings._vertical = Input.GetAxis("Vertical");
    movementSettings._mouseX = Input.GetAxis("Mouse X") * viewSpeed * Time.deltaTime;
    movementSettings._mouseLeft = Input.GetMouseButton(0);
    ControllSpeed();
}

이렇게 정리할 수 있다

 

다만, 더러워지는 면이 있으니, 주의가 필요한 것 같다

 

 

뭔가 더 좋은 방법이 있을것 같은데....

 

상속이나 다른 cs파일을 객체로 의존하는 방식을 생각해볼 여지가 있을 것 같다

'공부 > C#' 카테고리의 다른 글

C# 공부(12) 111~124(Part3 End && C# 언어 공부 End)  (0) 2024.08.28
C# 공부(11) 101~110  (0) 2024.08.27
C# 공부(10) 93~100  (0) 2024.08.27
C# 공부(10) 91~92(Part2 End)  (0) 2024.08.26
C# 공부(9) 81~90  (0) 2024.08.26