반응형

 

글을 작성하다보니 코딩을 위한 코드블럭이 아닌 특정 카테고리를 경로를 표시하기 위한 코드블럭이 필요했다.

찾아보니 HTML로 충분히 표현히 가능해서 정리해본다.

 

 

 

1. 코드블럭 HTML 편집

일단 내가 원하는건 회색 바탕에 빨간 글씨의 코드블럭이다.

<code style="color: #ef5369; background-color: #d5d5d5;">내용</code>
  • 원하는 색상 코드표는 네이버에 '색상 팔레트'를 치고 16진수 코드를 가져오면 된다.

 

 

 

2. 적용 방법

- 에디터 우측 상단의 '기본 모드'를 누르면 HTML 항목이 나오는데 이걸 클릭한다.

- 원하는 글에다가 1번의 코드블럭을 넣어주면 이렇게 된다.

 

 

 

3. 서식 지정

이제 원하는 코드블럭도 지정할 수 있게되었고, 색상도 설정할 수 있게 되었다. 하지만 일일이 설정하기에는 귀찮으므로 '서식 지정'을 통해 간편하게 작성해보자.

- 블로그 관리서식 관리서식쓰기를 누른다.

- 서식 제목을 작성하고 에디터 우측 상단의 '기본 모드'를 눌러 HTML항목을 클릭해준다.

- 다음과 같이 변경해준 뒤, 완료를 눌러서 서식 지정을 완료한다.

//기본으로 세팅되어있는 HTML 코드
<p data-ke-size="size16"></p>

//변경한 HTML 코드
<p data-ke-size="size16"><code style="color: #ef5369; background-color: #d5d5d5;">코드 블럭</code></p>

 

 

 

 

4. 결과

- 에디터 우측 상단에 ···을 눌러 서식에 들어가면 다음과 같이 뜬다.

이제 원하는대로 마음껏 코드 블럭을 사용해보자!

반응형

'Manage > Blog' 카테고리의 다른 글

티스토리 네이버 서치어드바이저 등록하기  (0) 2021.09.11
반응형

 

Windows PowerShell은 기본적으로 명령프롬프트 창과 같이 매우 원시적인(?) 형태를 갖추고 있다.

그렇기 때문에 cmder과 같은 터미널을 사용하지만, 나 같은 경우엔 어째서인지 cmder이 VS Code에서 열리지가 않는다.

결국 기본 터미널인 PowerShell을 사용해서 작업하는데 git을 쓰기엔 UI가 너무 불편하다.

찾아보니 다행히 Mac의 Oh-my-zsh와 같이 Oh-my_posh라는게 있어서 적용을 해 보고 정리하는 글이다.

 

 

 

1. Windows Terminal 설치

- 제일 먼저 Microsoft Store에 들어가서 Windows Terminal을 설치해준다.

 

 

 

 

2. Posh-Git, Oh-My-Posh 설치

- Posh-Git : PowerShell에 표시할 수 있는 git 상태 정보를 제공하는 모듈.

- Oh-My-Posh : PowerShell 테마 제공 모듈.

- Windows Terminal을 관리자 권한으로 열고 다음 명령어를 작성해 설치해준다.

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
  • 설치 과정 중에서 NuGet 공급자, 신뢰할 수 없는 리포지토리라는 경고가 뜨는데, NuGet 공급자 경고에 대해서는 'Y', 리포지토리 경고에 대해서는 'A'를 입력하여 설치를 진행하면 된다.

 

 

 

3. PowerShell 설정

- PowerShell 설정을 위해 터미널에서 notepad $PROFILE을 입력한다.

- 존재하지 않는 파일이라는 팝업창이 뜨면 '예'를 눌러준 뒤, 메모장에 다음 내용을 작성해주고, 저장한다.

Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt -Theme craver // 테마는 원하는 테마를 골라주면 됨.
  • Set-PoshPrompt -Theme (테마명) : 테마는 (여기)서 원하는 테마 명을 붙여넣어준다.

 

 

 

4. 에러 해결

- 3번을 적용한 후, 터미널을 관리자모드로 재시작해준다.

- 재시작하면 CategoryInfo, FullyQualifiedErrorId 항목으로 오류가 발생하는데 다음 명령을 작성해준다.

Set-ExecutionPolicy RemoteSigned
  • 이 후, 규칙을 변경하겠냐는 질의에는 'Y'를 눌러서 진행한다.
  • 2022.05 추가 : 7.77.0버전 기준 oh-my-posh가 불완전하게 설치가 된다. 해결방법이 찾아지지 않아서 옛날버전으로 직접 찾아서 다운받아서 해결함.

 

 

 

5. 글꼴 설치

- Oh-My-Posh에서 아이콘이 들어간 테마를 설정하면 대부분 깨질것이다.

- Oh-My-Posh에서는 Nerd Font를 사용하도록 설계되어 있는데, 이 글꼴은 아이콘을 포함되어있는 글꼴이기 때문에 Nerd Font를 설치하면 된다.

- Nurd Font 사이트 : (클릭)

- 원하는 폰트를 설치한 뒤,  Windows Termianl - 설정 - Windows PowerShell - 모양 - 글꼴에서 설치한 글꼴을 설정해주면 된다.

  • 2022.05 추가 : 버전 업데이트가 되면서 기본값-모양-글꼴 로 접근해서 변경한다.

 

 

 

결과

 

반응형
반응형

 

※ 해당 포스팅은 유니티 물리, 힌지 조인트를 사용하는것이 아닌 단순히 진자 운동을 보이게 하기위한 포스팅이다.

 

삼각함수를 이용하여 진자운동을 구현해볼것이다.

최종 목표는 진자운동을 구현하여 좌우로 흔들리는 철퇴 장애물을 만드는것.

 

구현하기에 앞서 삼각함수 그래프를 먼저 살펴본다.

파란선이 sin 그래프, 빨간선이 cos 그래프이다. (그림이 조악한건 이해바람..)

위 두 그래프는 1과 -1을 반복하기 떄문에 우리는 이 특성을 이용하여 진자 운동을 구현할 것이다.

진자 운동 코드를 만들기 전에 삼각함수 그래프를 이용한 움직임이 어떤지 확인해보기 위해 위, 아래로 먼저 표현을 해보자.

 

 

 

사용 예시

이번 예시에서는 Vector3.Lerp()의 마지막 인자 t의 값을 Mathf.Sin()으로 구해서 구체의 Position값을 변경하는 형태이다.

참고로 Vector3.Lerp()t인자 값은 0~1로 넣어줘야하는데 Mathf.Sin()의 값은 -1~1이다. 그렇기 때문에 약간의 추가 작업이 필요하다. t인자 값을 구하기 위한 코드는 다음과 같다.

float lerpTime += Time.deltaTime;
(Mathf.Sin(lerpTime) + 1) * 0.5f; //Lerp()의 t인자 값

그럼 본격적으로 철퇴 장애물을 만들어보자.

 

 

 

유니티 게임오브젝트 세팅

1. 빈 게임오브젝트를 만들어준다.

  ※ 이 게임오브젝트가 최상위 부모 오브젝트이다.

2. 빈 게임오브젝트의 자식으로 체인 오브젝트를 만들어준 뒤 체인 오브젝트의 위쪽을 부모 오브젝트의 중심에 맞춰준다.

3. 체인 오브젝트의 자식으로 철퇴 오브젝트를 만들어준다.

 

이것으로 게임오브젝트 세팅이 완료되었다. 설명이 따로 필요없을정도로 간단하다.

이제 최상위 부모 오브젝트를 좌우로 회전시켜주기만 하면 진자운동을 하는 철퇴 장애물을 만들 수 있는것이다!

회전 시켜줄 게임 오브젝트에 연결해줄 코드를 살펴보자

 

 

 

코드

using UnityEngine;

public class Pendulum : MonoBehaviour
{
    public float angle = 0;
    
    private float lerpTime = 0;
    private float speed = 2f;
    
    private void Update()
    {
        lerpTime += Time.deltaTime * speed;
        transform.rotation = CalculateMovementOfPendulum();
    }
	
    Quaternion CalculateMovementOfPendulum()
    {
        return Quaternion.Lerp(Quaternion.Euler(Vector3.forward * angle), 
        	Quaternion.Euler(Vector3.back * angle), GetLerpTParam());
    }
	
    float GetLerpTParam()
    {
        return (Mathf.Sin(lerpTime) + 1) * 0.5f;
    }
}

  ※ angle값은 public으로 선언했으므로, 인스펙터 창에서 입맛대로 바꿔주면 된다.

  ※ 예시에서는 Mathf.Sin()을 사용했지만, Mathf.Cos()도 사용 가능하다. 포스팅 상단의 그림에서 봤듯이 Lerp()의 t인자값을 0.5(Sin)부터 시작할 것이냐 1(Cos)부터 시작할 것이냐의 차이다.

 

 

 

결과

 

반응형
반응형

 

참조자 (Reference)

- 할당된 어떤 하나의 메모리 공간에 다른 이름을 부여하는 것이다.

  ※ 별명이라고 생각해도 좋다.

- 참조자는 변수 앞에 &를 붙여줌으로써 선언할 수 있다.

  ※ 이미 선언된 변수 앞에 &를 붙이면 주소값을 반환하지만, 새로 선언되는 변수 앞에 &를 붙이면 참조자 선언을 뜻한다.

 

 

 

활용

- 다음과 같이 사용하게되면 num2는 num1의 참조자가 되며 두 변수는 같은 메모리 공간을 가리키게 된다.

int num1 = 10;
//참조자 num2 선언
int& num2 = num1;

 

- 즉, 같은 메모리 공간을 가리키므로 num2에 100을 대입해주면 num1, num2의 값이 100으로 변경된다.

num2 = 100;
//결과 : num1 : 100, num2 = 100

 

 

- 참조자의 수에는 제한이 없으며 참조자를 대상으로도 참조자 선언이 가능하다.

int num1 = 10;
int& num2 = num1;
int& num3 = num1;

//---------------

int num1 = 10;
int& num2 = num1;
int& num3 = num2;

  ※ 위 코드와 아래 코드 모두 동일하게 num1의 메모리 공간을 가리킨다.

  ※ 하지만, 필요 이상으로 참조자를 선언하는것은 바람직하지도 않고, 필요하지도 않다.

 

- 참조자의 선언 가능 범위

  • 참조자는 변수에 대해서만 선언 가능.
int& ref = 20;	//(X)
  • 참조자는 변수에 별명을 붙이는 것이기에 미리 선언했다가 나중에 다른 변수를 참조하는 것이 불가능하다.
int& ref;	//(X)
  • 참조자는 상수에 대해 참조가 허용되지 않는다.
const int num = 10;
int& ref = num;		//(X)
  • 참조자는 NULL로 초기화하는것이 불가능하다.
int& ref = NULL;	//(X)
  • 배열의 요소와 포인터도 변수로 간주되어 참조자의 선언이 가능하다.
//Array reference
int arr[1] = {1};
int& arrRef = arr[0];	//1

//--------------------

//Pointer reference
int num = 1;
int* ptr = &num;
int& nRef = num;	//1
int* (&pRef) = ptr;	//1

 

 

 

Call-by-value & Call-by-reference

- 참조자의 활용에는 함수가 큰 지분을 차지한다.

  • Call-by-value : 값을 인자로 전달하는 함수의 호출방식
  • Call-by-reference : 주소 값을 인자로 전달하는 함수의 호출방식

- C에서의 Call-by-reference는 주소값을 전달받아 함수 외부에 선언된 변수에 접근한다.

- C++에서의 Call-by-reference는 두가지로 구분할 수 있다.

  • 주소값을 이용한 Call-by-reference (C의 개념과 동일)
  • 참조자를 이용한 Call-by-reference

 

 

참조자를 이용한 Call-by-reference

- 다음 코드를 통해 참조자를 활용해도 Call-by-reference가 가능하다는것을 알 수 있다.

void Swap(int& n1, int& n2)
{
    int tmp = n1;
    n1 = n2;
    n2 = tmp;
}

void main()
{
    int n1 = 10;
    int n2 = 20;
    
    Swap(n1, n2);
    
    //결과 n1 : 20, n2 : 10
}

  ※ 매개변수의 경우 함수가 호출되어야 초기화가 되기때문에 별도의 에러를 발생시키지 않는다.

 

 

 

참조자를 이용한 Call-by-reference의 단점

int n = 20;
TempFunc(n);
cout << n << endl;

- 위의 코드를 기준으로 봤을때, C의 개념이면 무조건 20이 출력되지만, C++에서의 출력값은 예상할 수 없다.

  ※ TempFunc(int)의 매개변수가 참조자일 가능성이 있기 때문.

- 따라서, n의 값을 예상하기 위해서는 TempFunc(int)의 함수 원형을 일일이 확인해야하는 불편함이 생긴다.

- 이 단점은 매개변수에 const를 붙여 상수화 시켜서 매개변수의 값 변경을 막을수있다.

- 이런 불명확함 때문에 C++ 프로그래머들은 참조자를 잘 사용하지 않는다.(고 한다.)

 

 

 

상수 참조하기

- 다음과 같은 방법으로 상수의 참조가 가능하다.

const int num = 10;
const int& ref = num;

- Why?

  • 이것은 '임시객체'를 참조하기 위한 방법이다.
  • 리터럴 상수는 임시적으로 존재하는 값. 즉, 다음 행으로 넘어가면 존재하지 않는 상수다.
  • 그래서 C++은 const 참조자를 이용해서 상수를 참조할 때 '임시변수'를 만들고 이 장소에 상수를 저장해 참조하게 끔 한다.
반응형

'Stack > C++' 카테고리의 다른 글

C++ 파일 입출력 ofstream, ifstream  (0) 2021.10.16
C++ 생성자, 복사생성자, 소멸자 (+ const)  (0) 2021.10.15
C++ 동적할당 new, delete  (0) 2021.10.13
C++ 클래스, 객체, 인스턴스  (0) 2021.09.29
C++ 객체지향  (0) 2021.09.28
반응형

 

클래스 (Class)

- 여러 자료형의 변수와 함수를 묶는 사용자 정의 자료형이다.

- 사물의 특성과 행동을 소프트웨어적으로 모델링하여 데이터화한다.

- 구조체와는 다르게 접근제어 지시자를 선언하지 않을시 private로 선언된다.

#include <iostream>
using namespace std;

struct Struct
{
    int i;
};

class Class
{
    int i;
};

void main()
{
    Struct s;
    s.i = 0;
	
    Class c;
    c.i = 0; //에러가 발생한다.
}

 

 

 

접근제어 지시자

- C++에서의 접근제어 지시자는 세가지가 존재한다.

  • private : 클래스 내에서만 접근허용
  • public : 어디서든 접근허용
  • protected : 클래스 안이거나, 상속관계에 있을때 접근허용

 

 

 

클래스 (Class) / 객체 (Object) / 인스턴스 (Instance)

- Class : 객체를 설계할 때 필요한 설계도

class TempClass
{
private:
    int n;
public:
    TempClass(int n)
    {
        this->n = n;
    };
    int GetNum()
    {
        return n;
    };
};

- Object : Class가 만들어진 결과물

void main()
{
    TempClass tmpClass;
}

- Instance : 만들어진 Object에 개별적인 정보를 부여하여 만들어진 사용 가능한 상태의 정보.

void main()
{
    TempClass tempClass(10);
}

  ※ 좀 더 정확히는 메모리상에 구현된 객체를 인스턴스라고 한다. (객체가 인스턴스를 포함한다.)

  ※ 위와 같은 상태에서는 tmpClass가 객체이고, (10)이 인스턴스가 된다.

  ※ 즉, 객체는 클래스 타입으로 선언되었을 때를 의미하고, 인스턴스는 인자를 받아 메모리에 할당되어 실제 사용 가능한 상태를 말한다.

반응형

'Stack > C++' 카테고리의 다른 글

C++ 파일 입출력 ofstream, ifstream  (0) 2021.10.16
C++ 생성자, 복사생성자, 소멸자 (+ const)  (0) 2021.10.15
C++ 동적할당 new, delete  (0) 2021.10.13
C++ 참조자(Reference)  (0) 2021.09.29
C++ 객체지향  (0) 2021.09.28

+ Recent posts