• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

코드스타일 문의

21.09.30 18:24 작성 조회수 99

0

안녕하세요. 코드스타일(?)관련 문의를 드립니다.
공부하던 도중 업데이트함수를 아래와 같이, 강의교안과 다르게 작성해보았습니다.
메모리 구조 관련하여 강의교안처럼 newX, newY를 따로 만드는 것이 좋은지, 아니면 그냥 아래처럼 써도 되는건지 모르겠습니다.

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class PlayerScript : MonoBehaviour

{

    public float speed = 5;

    Vector3 min, max;

    Vector2 colSize;

    Vector2 chrSize;

    void Start()

    {

        min = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 0));

        max = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 0));

        print("min: " + min + ", max: " + max);

        colSize = GetComponent<BoxCollider2D>().size;

        chrSize = new Vector2(colSize.x / 2, colSize.y / 2);

        print(chrSize);

    }

 

    void Update()

    {

        float x = Input.GetAxisRaw("Horizontal");

        float y = Input.GetAxisRaw("Vertical");

        Vector3 dir = new Vector3(x, y, 0).normalized;

        transform.position += dir * Time.deltaTime * speed;

        

        if(transform.position.x < min.x + chrSize.x)

        {

            transform.position = new Vector3(min.x + chrSize.x, transform.position.y, transform.position.z);

        }

        if (transform.position.x > max.x - chrSize.x)

        {

            transform.position = new Vector3(max.x - chrSize.x, transform.position.y, transform.position.z);

        }

        if (transform.position.y < min.y + chrSize.y)

        {

            transform.position = new Vector3(transform.position.x, min.y + chrSize.y, transform.position.z);

        }

        if (transform.position.y > max.y - chrSize.y)

        {

            transform.position = new Vector3(transform.position.x, max.y - chrSize.y, transform.position.z);

        }

    }

}

 

답변 1

답변을 작성해보세요.

1

이건 그냥 선택의 문제 같습니다. 

같은 코드라도 보고 작성하지 않으면 다른날 작성하면 다른 코드가 나옵니다. 

x, 나 y를 미리 받아놓지 않고 중간중간에 새로 받는다는 것이 어떤지를 말씀하시는 것 같은데요. 

이 방법도 관계없습니다. 

장점이라던지 단점이 존재할텐데 거의 신경 쓸 수준은 아닙니다. 

코드 상의 장점이라면 한줄에 코드를 길게 쭉 썻기 때문에 코드가 세로로 줄어들어 가독성이 있을 수 있습니다. 

코드상의 단점이라면 가로로 길어질수 있기 때문에 한눈에 들어오지 않아 가로로는 가독성이 떨어질수 있습니다. 

메모리 적인 측면으로는 현재상태로 x, y 값을 받아오는 부분이 한번 더 실행되는 것일 것입니다만 효율적 측면에서는 코드 한줄이니 문제는 없습니다. (if 에서 한번 x 를 읽어오고 if 안에서 한번 읽어올테니까요.)

(두번 실행되는 것의 효율을 따지는 문제는 진짜 느려지는 부분이 발생하는 경우입니다. 일반적으로는 그냥 원하시는 대로 작성하는 것이 좋습니다)

또한 변수를 내부에서 하나 새로 선언하지 않기때문에 그러한 차원에서는 작업하신 내용이 더 좋다고 말씀드릴 수 있습니다만 제 가 작성한 코드의 경우에는 내부변수를 한번 더 추가하는 것은 스택에서 추가되는 것이기 때문에  별로 비용이 발생하지 않습니다. 마찬가지로 yong2418님이 작성하신 x를 두번 두번 읽어오는 것도 그렇게 많이 비용이 발생하지 않습니다. 

하지만 결론적으로 답은 없습니다. 생각나는대로 원하는대로 작성하는 것이 코드라고 생각합니다.

감사합니다.