2023/01/05

안석환·2024년 1월 5일
0

오늘 배운 코드


  1. char.ToUpper/ToLower
  • 코드를 대/소문자로 변환

💾 코드

char lowercaseChar = 'a';
char uppercaseChar = char.ToUpper(lowercaseChar);

Debug.Log(uppercaseChar); // 출력 결과: 'A'

📖 참고

참고할 코드 내용


  1. ToCharArray()
  • string을 char 배열로 전환

💾 코드

        string originalString = "Hello, World!";

        // 문자열을 char 배열로 변환
        char[] chars = originalString.ToCharArray();

📖 참고

참고할 코드 내용




🧐기본 공부 내용


  1. Dotween
  • 쓰는 이유: 애니메이션은 idle 때도 값을 dirty로 만듬 // 애니메이션 쓰는 UI 분리 매우 추천 (Canvas 단위로 분리)
  • Do시리즈
    - 트랜스폼 계열
    1. DOMove : Transform의 위치를 지정된 목표 위치로 Tween(보간)하는 메서드입니다.
    2. DOLocalMove : Local 좌표계에서의 이동을 담당하는 메서드입니다.
    3. DOMoveX : DOMove의 확장 메서드로, 주로 x축 방향으로의 이동에 특화된 메서드입니다.
    4. (rectTransform) DOMoveXAnchor : RectTransform의 앵커 위치를 x축 방향으로 Tween하는 메서드입니다.
    5. DORoate
    6. DOScale


    - 기타
    1. DOColor
    2. DOFade
    3. DOText

  • 옵션
    -Ease: 어떻게 트위닝이 진행되는지에 대한 양상에 대한 것입니다. 선형적인것만 가능했다면 사실 코루틴을 이길 수가 없을텐데, 수학적인 연산을 활용하여 아래와 같은 다양한 형태의 변화를 제공합니다.
    1. In: 시작점에서 해당 변화가 두드러지는 경우
    2. Out: 끝지점에서 해당 변화가 두드러지는 경우
    3. InOut: 시작과 끝에서 해당 변화가 두드러지는 경우


    -Delay: 어떤 이벤트가 일어날 때 지금 당장 일어나야되는 게 아니라든지 하는 이유로 딜레이가 필요한 게 있습니다. 그럴 때 SetDelay를 통해 딜레이를 살짝 줄 수 있습니다.


    -From: 어떤 이벤트가 일어날 때 시작점을 지정을 따로 초기화해야 하는 경우가 있는데, 이럴 때 From을 활용하여 시작점을 초기화하지 않고 걸 수 있습니다

  • Sequence: 시퀀스는 일련의 동작의 순서를 정의할 수 있는 개념입니다
    1. Append : 뒤에 붙인다
    1. Prepend : 앞에 붙인다
    2. Join : 같이 일어나도록 한다
    3. Insert : 실행시기를 초단위로 정해서 넣는다
  1. 유니티 꿀팁
  • 객체지향 코드는 위에서 아래로만 읽는게 아닙니다.
    F12 / Shift + F12로 호출관계를 확인하면서 읽으세요

  • 한 줄 다 지울때 Backspace로 지우지 마세요.
    Ctrl+X로 한 줄 지우기 실천하세요.

  • 윗줄로 옮길 때 잘라넣기하고 넣고 빈 줄 지우지마세요.

Alt + Up/Down Arrow키로 코드 옮기세요.

  • 오브젝트 붙일 때 나노단위 이동하지 마세요.

V를 통해 붙일 수 있어요.

  • 오브젝트를 딱 맞게 이동하고 싶을 때

Ctrl를 누르고 이동할 수 있어요.

  • 씬 뷰에서 QWER-2단축키 활용하세요

  • 게임의 현재 최적화 상황을 대충 보려면 stats보세요.

  • 게임이 너무 느릴 때 프로파일러 보세요.

  • 빌드했을 때만 발생하는 오류를 보기 위해서 Quantum console혹은 Log Viewer 활용하세요.

  • 해당 에셋을 활용하면 빌드한 이후에도 로그를 볼 수 있어요.


📖 참고

// DO시리즈 참고

using UnityEngine;
using DG.Tweening; // DOTween을 사용하기 위한 네임스페이스

public class TweenExample : MonoBehaviour
{
    void Start()
    {
        // 이동 관련 메서드
        MoveExamples();

        // 회전 관련 메서드
        RotateExample();

        // 스케일 관련 메서드
        ScaleExample();

        // 기타 메서드
        OtherTweenExamples();
    }

    void MoveExamples()
    {
        // 1. DOMove
        Vector3 targetPosition = new Vector3(5f, 2f, 0f);
        transform.DOMove(targetPosition, 1f); // 1초 동안 부드럽게 이동

        // 2. DOLocalMove
        Vector3 targetLocalPosition = new Vector3(2f, 0f, 0f);
        transform.DOLocalMove(targetLocalPosition, 0.5f); // 0.5초 동안 Local 좌표계에서 이동

        // 3. DOMoveX
        float targetX = 3f;
        transform.DOMoveX(targetX, 0.3f); // 0.3초 동안 x축으로 이동

        // 4. (RectTransform) DOMoveXAnchor
        RectTransform rectTransform = GetComponent<RectTransform>();
        float targetXAnchor = 200f;
        rectTransform.DOMoveXAnchor(targetXAnchor, 0.5f); // 0.5초 동안 x축으로 앵커 이동
    }

    void RotateExample()
    {
        // 1. DORotate
        Vector3 targetRotation = new Vector3(0f, 0f, 90f);
        transform.DORotate(targetRotation, 1f); // 1초 동안 회전
    }

    void ScaleExample()
    {
        // 1. DOScale
        Vector3 targetScale = new Vector3(2f, 2f, 2f);
        transform.DOScale(targetScale, 0.5f); // 0.5초 동안 스케일 변경
    }

    void OtherTweenExamples()
    {
        // 1. DOColor
        SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
        Color targetColor = new Color(1f, 0.5f, 0.5f, 1f);
        spriteRenderer.DOColor(targetColor, 1f); // 1초 동안 색상 변경

        // 2. DOFade
        Image image = GetComponent<Image>();
        image.DOFade(0.5f, 0.7f); // 0.7초 동안 투명도 변경

        // 3. DOText
        TextMeshProUGUI textMeshPro = GetComponent<TextMeshProUGUI>();
        textMeshPro.DOText("New Text", 1f); // 1초 동안 텍스트 변경
    }
}
//Do 시리즈 참고 end

//Ease 시리즈
using UnityEngine;
using DG.Tweening;

public class EasingExample : MonoBehaviour
{
    void Start()
    {
        // Ease 타입에 따른 예제
        EaseInOutExample();
        EaseInExample();
        EaseOutExample();
    }

    void EaseInOutExample()
    {
        // EaseInOut: 시작과 끝에 완만한 가속도와 감속도를 적용
        transform.DOMoveX(5f, 1.5f).SetEase(Ease.InOutQuad);
    }

    void EaseInExample()
    {
        // EaseIn: 시작 부분에 가속도를 적용
        transform.DOMoveY(3f, 1.5f).SetEase(Ease.InBounce);
    }

    void EaseOutExample()
    {
        // EaseOut: 끝 부분에 감속도를 적용
        transform.DOMoveZ(2f, 1.5f).SetEase(Ease.OutCubic);
    }
}
//Ease 시리즈 end

//Sequence 시리즈

mySequence.Append(A)
.Join(B)
.Insert(1.5f,C)
.Prepend(D)
.Append(E);

//Sequence 시리즈 end 이미지 참고

참고 이미지

  • Ease

  • Sequence





⛔️ 에러


  1. 팀원과 기능이 겹쳐서 타협점을 찾아야 됬다.
  • 문제1: 일단 기능의 맡은바 책임이 저한테 있었기 때문에 우선권은 저한테 있다고 생각했다.
  • 문제2: 일단 객체지향적으로 내가 만든게 플레이어 스크립트에 인벤토리, 상호작용 기능 등등이 다 따로 들어가 있었기 때문에 조금더 좋다고 생각했다.
  • 해결1: 튜터님께 자문을 구하고 저의 생각을 더욱 구체화하고 확실한 증거들로 설득했다.
  • 해결2: 완전한 코드 사용보다는 어느정도 양보도 필요 했다고 생각하여 코드의 조합으로 방향을 이끌어 갔다.




💭 느낀점


  1. 역시 팀플은 해도해도 어렵다
  • 이 공부하는 장소가 팀플을 배우는 자리인가에 대한 생각을 했는데 팀플을 배우는 기회이기도 하지만 그것보다 공부가 먼저라 생각했다. 새로운 사람을 배우기보단 기능 공부를 어느정도 하는게 서로에게 맞다고 생각한다.
profile
안석환!

0개의 댓글