함수에서 포인터를 사용하는 경우는 보통 다음과 같은 세가지 경우가 있다고 한다.

1. 매개 변수가 포인터
출력을 매개변수에 저장해서 보내는 것이 아닐까 추측하면 대부분 맞음.

void Add(int a, int b, int *c) {
	*c = a + b;
}

2. 반환 값을 여러 개 받고 싶은 경우
C++에서는 보통 반환값을 하나 밖에 받지 못한다. (ex: return X;)
함수를 실행 시켰을때 반환 값을 여러개 받(는 것처럼 하)고 싶다면,

void Add(int a, int b, int *c, int *d) {
	*c = a + b;
	*d = a - b;
}

와 같이 활용할 수 있다.

3. 크기가 엄청 큰 배열을 함수로 넘겨줄 때

bool IsEqual(const char str1[], const char str2[])
{
    int i=0;
    while(i<kMaxStr) {
        for(int j=0; j<kMaxStr;j++) {
            
            if(str1[i]!=str2[i])
                return false;
            else
                return true;
            i++;
        }
    }
    return true;
}

int main()
{
    const char str1[kMaxStr] = "stop";
    while (1)
    {
        char str2[kMaxStr];
        cin >> str2;

        if(IsEqual(str1, str2)) 
        {
            cout << "종료합니다.\n";
            break;            
        } else
            cout<<"계속합니다.\n";
    }

    return 0;
}

위의 IsEqual함수의 매개변수는 사실 배열이 아니라 포인터이다. 배열이 시작하는 곳의 주소.
sizeof(str1), sizeof(str2)를 해보면 둘다 포인터기 때문에 8바이트가 나온다. (크기가 100인 배열이면 100바이트가 나와야함) 문자의 배열 두개를 넘겨주는 것처럼 호출을 하고 있으나 내부적으로는 포인터이고, 아예

bool IsEqual(const char *str1, const char *str2)


 처럼 만드는 것도 괜찮다.

 

3번이 잘 이해가 안가서 wrtn.ai에게 물어보았고 답변 결과는 다음과 같았다.

C++에서 배열을 함수의 매개변수로 사용할 때, 실제로는 포인터가 사용됩니다. 이를 이해하기 위해선 배열과 포인터의 관계, 그리고 C++에서의 배열 인자 처리 방식에 대해 자세히 살펴볼 필요가 있습니다.
1. 배열과 포인터의 관계
C++에서 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터로 사용될 수 있습니다. 예를 들어, int arr[10];이라는 배열이 있다면, arr은 &arr[0]을 의미하는 포인터로 해석될 수 있습니다. 배열의 이름 자체가 배열의 첫 번째 원소를 가리키는 주소로 변환됩니다.
2. 함수에서의 배열 인자
함수에 배열을 인자로 넘길 때, 배열의 크기 정보는 전달되지 않습니다. 대신, 배열의 이름(즉, 배열의 첫 번째 요소를 가리키는 포인터)만이 함수에 전달됩니다. 따라서, IsEqual(const char str1[], const char str2[]) 함수 선언에서 str1과 str2는 사실상 const char* str1, const char* str2와 동일하게 처리됩니다. 여기서 const 키워드는 포인터가 가리키는 데이터를 변경할 수 없음을 의미합니다.
3. 함수 내 배열 접근
함수 내에서 이 포인터(즉, 배열 이름)를 사용하여 배열의 각 요소에 접근할 수 있습니다. 포인터 산술을 사용하거나 배열 인덱싱 문법을 사용하여 이를 수행할 수 있으며, 이는 내부적으로 포인터 산술로 처리됩니다.
4. 결론
따라서, IsEqual 함수에서 const char str1[], const char str2[]를 매개변수로 사용할 때, 이들은 실제로는 const char* 타입의 포인터로 처리되며, 이 포인터들은 각각 문자열 str1과 str2의 첫 번째 문자를 가리키게 됩니다. 이를 통해 함수 내에서 문자열의 각 문자에 접근하여 비교할 수 있는 것입니다.
간단히 말해서, const char str1[]와 같은 매개변수는 포인터이며, 이는 함수에 전달될 때 배열의 크기 정보 없이 배열의 시작 주소만을 전달하기 때문입니다. 이런 방식으로 배열을 함수에 전달하는 것은 C++에서 일반적인 배열 처리 방법입니다.

'게임 개발 > C++언어' 카테고리의 다른 글

Ch03. 클래스의 기본  (0) 2020.12.23
C++언어 포스팅 계획  (0) 2020.12.23

Parameter에는 세가지 대분류가 있다.

1. Creating Parameters
2. Watching Expressions
3. Clearing the Parameter List

Creating Parameters에는 총 6가지 기능이 존재한다. (https://codea.io/reference/)
parameter.number, parameter.integer, parameter.color, parameter.boolean, parameter.text, parameter.action
이 프로젝트에서는 number와 integer만 쓰였다.

Creating Parameters

1. parameter.number

이 함수는 뷰어 안에 코드에서 전역 변수로 사용할 수 있는 시각적 슬라이더를 만들어줍니다.

마치 유니티 인스펙터에 Range 코드를 통해 슬라이더를 만드는 것과 비슷한 것 같다.

Syntax
parameter.number( name )
parameter.number( name, min, max )
parameter.number( name, min, max, initial )
parameter.number( name, min, max, initial, callback )

-- name: string. 파라미터 함수는 name으로 전역 변수를 생성합니다.
-- min: int 또는 float. 매개변수가 가질 수 있는 최솟값을 지정합니다.
-- max: int 또는 float. 매개변수가 가질 수 있는 최댓값을 지정합니다.
-- initial: int 또는 float. 매개변수의 초깃값(시작값)을 지정합니다.
-- callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.

일반적으로 setup() 함수 내에서 parameter.number() 함수를 호출합니다.
위와 같이 사용하며 name 문자열은 버튼에 지정되는 레이블이며 전역변수로 노출됩니다.
callback 인수는 버튼을 눌렀을 때 호출할 콜백 함수를 지정하는데 사용하며, 유일한 인수로는 버튼의 name이 전달됩니다.
name에 지정한 문자열은 코드에서 사용할 수 있는 전역 변수로 표시됩니다. 뷰어에서 슬라이더를 조정하면 변수가 적절하게 설정됩니다. min, max, initial을 통해 최솟값, 최댓값, 초깃값을 각각 설정할 수 있습니다. 초깃값이 지정되지 않은 경우, 파라미터는 최솟값으로 설정됩니다. 최솟값이나 최댓값이 지정되지 않은 경우 [0, 10] 범위를 디폴트값으로 가집니다.
optional callback 인수는 파라미터 슬라이더가 변경될 때 호출할 콜백 함수를 지정합니다. 이 콜백 함수는 파라미터의 값을 단일 인수로 받습니다.

2. parameter.integer


이 함수는 뷰어 안에 코드에서 전역 변수로 사용할 수 있는 시각적 슬라이더를 만들어줍니다.
Syntax
parameter.integer( name )
parameter.integer( name, min, max )
parameter.integer( name, min, max, initial )
parameter.integer( name, min, max, initial, callback )

-- name: string. parameter.integer 함수는 name으로 전역 변수를 생성합니다.
-- min: int 또는 float. 매개변수가 가질 수 있는 최솟값을 지정합니다.
-- max: int 또는 float. 매개변수가 가질 수 있는 최댓값을 지정합니다.
-- initial: int 또는 float. 매개변수의 초깃값(시작값)을 지정합니다.
-- callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.

일반적으로 setup() 함수 내에서 parameter.integer() 함수를 호출합니다.
위와 비슷하나, 이 함수는 name으로 선언된 변수를 항상 정수값으로 설정합니다. 따라서, 최솟값, 최댓값, 초기값이 정수여야합니다.
name에 지정한 문자열은 코드에서 사용할 수 있는 전역 변수로 표시됩니다. 뷰어에서 슬라이더를 조정하면 변수가 적절하게 설정됩니다. min, max, initial을 통해 최솟값, 최댓값, 초깃값을 각각 설정할 수 있습니다. 초깃값이 지정되지 않은 경우, 파라미터는 최솟값으로 설정됩니다. 최솟값이나 최댓값이 지정되지 않은 경우 [0, 10] 범위를 디폴트값으로 가집니다.
optional callback 인수는 파라미터 슬라이더가 변경될 때 호출할 콜백 함수를 지정합니다. 이 콜백 함수는 파라미터의 값을 단일 인수로 받습니다.

3. parameter.color

이 기능은 코드의 전역 색상 변수를 조정하는 데 사용할 수 있는 시각적 색상 샘플을 뷰어에 만듭니다.
Syntax
parameter.color( name )
parameter.color( name, color )
parameter.color( name, color, callback )

parameter.color( name )
parameter.color( name, red, green, blue )
parameter.color( name, red, green, blue, callback )

parameter.color( name )
parameter.color( name, red, green, blue, alpha )
parameter.color( name, red, green, blue, alpha, callback )

parameter.color( name )
parameter.color( name, gray )
parameter.color( name, gray, callback )

parameter.color( name )
parameter.color( name, gray, alpha )
parameter.color( name, gray, alpha, callback )

-- name: 문자열, 이 매개변수 함수는 이 이름으로 전역 색상 변수를 생성합니다.
-- red: 정수, 색상의 빨간 구성 요소의 초기 값을 지정합니다.
-- green: 정수, 색상의 녹색 구성 요소의 초기 값을 지정합니다.
-- blue: 정수, 색상의 파란 구성 요소의 초기 값을 지정합니다.
-- gray: 정수, 색상의 회색 값 지정
-- alpha: 정수, 색상의 알파 구성 요소의 초기 값 지정
-- callback: 함수, 매개변수가 변경될 때 호출되는 함수로, 이 함수는 색상 값이 변경될 때의 값을 인수로 받습니다.

일반적으로 setup() 함수 내에서 parameter.color() 함수를 호출합니다. name으로 지정한 문자열은 색상 형식의 전역 변수로 노출됩니다.
이것은 코드 내에서 사용할 수 있습니다. 뷰어에서 컬러 샘플을 탭하면 interactive color picker가 표시되어 코드가 실행되는 동안 변수를 실시간으로 조정할 수 있습니다. 또한 color object, 그레이 스케일 값 또는 RGB triplet(알파 값을 포함할 수도 있음)로 색상의 초기 값을 설정할 수 있습니다.
optional callback 인수는 색상 값이 변경될 때 호출될 콜백 함수를 지정합니다. 이 콜백 함수는 색상 형식의 새 값이 포함된 단일 인수를 받습니다.

4. parameter.boolean

이 기능은 코드의 부울 변수를 조정하는 데 사용할 수 있는 시각적 스위치를 뷰어에 만듭니다.
Syntax
parameter.boolean( name )
parameter.boolean( name, initial )
parameter.boolean( name, initial, callback )
parameter.boolean( name, callback )

-- name: 문자열, 이 매개변수 함수는 이 이름으로 전역 변수를 생성합니다.
-- initial: boolean. boolean 매개변수의 초깃값(시작값)을 지정합니다.
-- callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.

일반적으로 setup() 함수 내에서 parameter.boolean() 함수를 호출합니다.
name으로 지정한 문자열은 코드 내에서 사용될 수 있는 전역 변수로 노출됩니다.
뷰어에서 스위치를 조절하면 변수가 적절히 설정됩니다. 또한 스위치의 초기 값을 지정할 수 있습니다. true로 설정하면 스위치가 ON 상태로 설정되고, false로 설정하면 OFF 상태로 설정됩니다.
optional callback 인수는 매개변수 스위치가 변경될 때 호출될 콜백 함수를 지정합니다. 이 콜백 함수는 매개변수의 값을 단일 인수로 받습니다.

5. parameter.text

이 기능은 뷰어에 시각적인 텍스트 상자를 만듭니다. 이 컨트롤에 입력하여 이름으로 정의된 해당 문자열 값의 내용을 조정할 수 있습니다.
Syntax
parameter.text( name )
parameter.text( name, initial )
parameter.text( name, initial, callback )
parameter.text( name, callback )

-- name: string. 이 매개변수 함수는 이 이름으로 전역 변수를 생성합니다.
-- initial: string. 매개변수의 초깃값을 지정합니다.
-- callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.

일반적으로 setup() 함수 내에서 parameter.text() 함수를 호출합니다. name으로 지정한 문자열은 코드 내에서 사용할 수 있는 전역 변수로 노출됩니다.
parameter.text 컨트롤에 텍스트를 입력하면 name으로 정의된 변수가 적절히 설정됩니다. 또한 initial을 문자열로 설정하여 텍스트 변수의 초기 내용을 지정할 수 있습니다.
optional callback 인수는 매개변수 텍스트가 변경될 때 호출될 콜백 함수를 지정합니다. 이 콜백 함수는 매개변수의 값을 단일 인수로 받습니다.

6. parameter.action

이 기능은 뷰어 사이드바에 시각적 버튼을 만듭니다. 버튼을 누르면 콜백으로 정의된 기능을 호출합니다. name 인수는 버튼의 레이블을 설정합니다.
Syntax
parameter.action( name, callback )

-- name: string. 이 매개변수 함수는 이 이름으로 전역 변수를 생성합니다.
-- callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.

name 인수는 버튼의 라벨을 설정합니다.
일반적으로 setup() 함수 내에서 parameter.action() 함수를 호출합니다. name으로 지정한 문자열은 뷰어에 나타나는 버튼의 라벨로 사용됩니다. 전역 변수로 노출되지 않습니다.
callback 인수는 버튼이 눌렸을 때 호출될 콜백 함수를 지정합니다. 이 함수는 버튼의 이름을 유일한 인수로 받습니다.

Watching Expressions

1. parameter.watch(expression)

Syntax
parameter.watch( expression )

-- expression: 문자열, 모니터링할 전역 변수 또는 표현식

이 함수는 뷰어 내에서 Lua 표현식의 값을 모니터링할 수 있게 해줍니다. 일반적으로 메인 파일의 setup() 함수에서 parameter.watch() 함수를 호출합니다.

Clearing the Parameter List

1. parameter.clear()

Syntax
parameter.clear()

 이 함수는 모든 parameter widgets 및 watch values의 parameter list를 지웁니다. 그런 다음 함수들의 parameter group을 사용하여 파라미터를 다시 추가할 수 있습니다.

2. output.clear()

Syntax
output.clear()
이 함수는 print() 함수의 출력 버퍼를 지웁니다.

Codea 에서 기본적으로 제공해주는 예제인 Lines이다.

function setup()
    -- Expose parameters to control our line

    -- The start point
    parameter.number("x1",0,WIDTH,100)
    parameter.number("y1",0,HEIGHT,100)

    -- The end point
    parameter.number("x2",0,WIDTH,WIDTH-100)
    parameter.number("y2",0,HEIGHT,HEIGHT-100)

    -- The stroke width
    parameter.number("width",1,100,10)
    
    -- The line cap type
    parameter.integer("lineCap",0,2,0)
end

function draw()
    background(10,10,20)

    -- Set stroke and fill color to white
    fill(255,0,0)
    stroke(255)

    -- Update stroke width
    strokeWidth(width)

    if width < 3 then
        -- Disable smoothing for low widths
        noSmooth()
    else
        smooth()
    end

    -- Set the line cap mode
    lineCapMode(lineCap)

    -- Draw the line
    line(x1,y1,x2,y2)
end

SQL 문법처럼 대시 두개가 주석의 역할을 하는 것 같다.

background를 주석처리 해봤더니 이전의 선들이 안지워진다. 프레임 워크 자체 버그인지 백그라운드가 저 선들을 가려주는 건지는 아직 모르겠다.  관련 커뮤니티에 질문을 남겨봤다. 백그라운드 함수 자체가 이전 화면을 클리어시켜주고, 그 이후에 백그라운드 색을 채색시키는 함수였다. 그래서 이전의 선들이 그대로 남아있던 것이다.

setup 함수에 파라미터들을 넣어주고 선을 자유롭게 변경할 수 있도록 되어있다.
parameter로 만들수 있게끔 해주는 자체 기능인것 같다.

Codea의 Parameter에 대해서는 다음 글에 포스팅을 해 두었다.

베테랑 개발자이자 프로그래밍 조언자인 John Gibson이 세상을 떠났습니다.


Time Extension에 따르면 Gibson은 80년대 초 이매진 소프트웨어에서 싱클레어 ZX 스펙트럼을 위한 게임을 만들기 시작했습니다.

이매진이 폐업한 후 Gibson은 리버풀에 기반을 둔 스튜디오 Denton Designs를 공동 설립하고 Cosmic Wartoad과 Gift from the Gods 같은 프로젝트를 수행했습니다.

Gibson은 몇 년 후 Denton을 떠나 Pygnosis에 합류하여 회사의 Advanced Technology Group의 핵심 멤버가 되었고 CD-ROM 타이틀 Microcosm에 중요한 기여를 했습니다.

Moby Games에 따르면 Gibson은 Sony에 인수되었을 때 사이그노시스에 남아 있었지만 결국 1998년 워토그로 이전했습니다.

Gibson은 Sony로 돌아갈 길을 찾았지만, 노련한 개발자가 이후 플레이스테이션 제조업체 2007에 인수된 Evolution Studio에 합류했습니다.

Sony에서 Gibson은 모터스톰, 모터스톰: 퍼시픽 리프트, 모터스톰: 아포칼립스 및 드라이브 클럽을 포함한 제목으로 작업했습니다. 그는 회사에서 20년을 보냈습니다.

Gibson에 대한 헌사가 소셜 미디어에 쏟아지고 있는데, 이전 동료인 Paul Hughes는 Gibson을 "게임 개발의 전설"이라고 묘사하고 다른 사람들은 영국 게임 산업의 "개척자" 중 한 명으로서의 그의 지위를 강조하고 있습니다.

 

원본 기사 링크: https://www.gamedeveloper.com/culture/obituary-sony-veteran-and-denton-designs-co-founder-john-gibson-has-passed-away#close-modal

 

Obituary: Psygnosis and Sony veteran John Gibson has passed away

Gibson has been hailed as a "pioneer" of the UK game industry.

www.gamedeveloper.com

 

Summary

모든 크리에이터는 지적 재산 소유자입니다. 실시간 3D 제작자는 종종 다른 사람의 지적 재산을 사용합니다. 여러분은 아마도 다른 사람의 작업을 재사용할 것이고, 여러분의 작업도 재사용될 수 있습니다. 어느 경우든, 여러분이 지적 재산권을 알고 존중하는 것이 중요합니다.
이 튜토리얼을 완료하면 다음을 수행할 수 있습니다:

  • 지적 재산권(IP) 정의
  • 저작권 정의
  • 저작권에 대한 예외 식별
  • IP 사용을 위한 라이센스 계약의 내용과 사용에 대해 설명할 수 있습니다.
  • 프로젝트에서 에셋을 재사용할 때 잠재적인 저작권 문제 식별
  • Unity Asset Store에 사용된 표준 라이센스 계약 조건 설명
  • 사용자 IP에 대한 라이센스 계약 선택

 

크리에이터들을 위한 저작권

1. 개요

실시간 3D 프로젝트는 보통 경험의 창조자뿐만 아니라 많은 다른 사람들에 의해 창조된 많은 다른 에셋을 포함합니다. 이러한 에셋은 물체와 캐릭터, 오디오 클립, 질감과 재료, 그리고 대본의 모델을 포함할 수 있습니다.

사용하는 각 항목은 프로젝트에서 변경하더라도 원래 생성자의 지적 재산입니다. 지적 재산은 가치를 가지며, 소유자는 법적 권리를 갖습니다. 다른 사람의 작업과 자신의 창작물을 위해 그 재산에 부착된 가치와 권리를 이해하는 것이 중요합니다.

중요: 이 튜토리얼에 제공된 정보는 법률 자문을 구성하지 않으며 이를 의도하지 않습니다. 이 튜토리얼은 일반 정보 목적만을 위한 것입니다. 특정 법률 문제에 대한 지침은 변호사와 상담하십시오.

2. 지적 재산권이 무엇인가요?

지적 재산(IP)은 인간의 지적 능력으로부터 생성되는 무형 재산입니다. 다른 사람의 무단 사용으로부터 법적 보호를 받습니다. 개인 소유물이 자신의 소유인 유형 재산인 것처럼, 자신의 원본 디지털 창작물 및 기타 아이디어 표현은 유사한 소유권을 가진 지적 재산입니다. IP에는 저작권, 상표, 특허 및 영업 비밀이 포함됩니다.

일방 당사자(개인 또는 회사)가 다른 당사자에 속하는 지적재산을 이용하기 위해서는 IP소유자가 정한 조건을 준수하고 허가를 받아야 하는데, 이러한 규정을 위반하는 것을 IP소유자의 권리 침해라고 합니다.

3. 저작권이 무엇인가요?

저작권은 복사할 권리를 포함한 권리의 묶음입니다. 여러분은 종이, 컴퓨터 메모리, 또는 여러분의 창의성을 표현하는 물리적인 창조물에 대해 거의 모든 저작권을 소유합니다. 프로그램 코드조차도, 응용 프로그램의 전반적인 설계와 구조를 포함하여, 저작권이 있습니다.

보호 가능한 저작물을 작성하면 저작권은 해당 저작물에 대한 복제, 배포, 공연, 공개 전시 및 창작 파생 저작물에 대한 독점적인 권리를 포함하여 해당 저작물에 대한 독점적인 권리 묶음을 부여합니다. 귀하는 다른 사람이 귀하의 저작물을 무단으로 복제하는 것을 막을 권리가 있습니다. 여기에는 저작물을 자신의 저작물에 재사용하거나 인터넷에 게시하고 원본 형태로 사용하든 다른 사람에게 배포하는 것이 포함됩니다.

일반적으로 말하면, 당신의 저작권은 아이디어 그 자체보다는 아이디어의 표현에 적용됩니다. 이것은 아이디어-표현 구별이라고 알려져 있습니다. 이것은 특정 장르나 매체의 공통된 관습이 많은 다른 창작자들에 의해 사용될 수 있지만 특정 묘사는 저작권에 의해 보호된다는 것을 의미합니다.

예를 들어, 많은 공상 과학 책과 영화에는 다른 행성에서 온 캐릭터가 있습니다. 이것은 장르의 규칙입니다. 만약 여러분이 쓰고 있는 이야기에 외계 캐릭터를 사용한다면, 여러분은 그 누구의 저작권도 침해하지 않는 것입니다. 그러나 만약 여러분의 캐릭터가 불칸 행성에서 왔고 뾰족한 귀를 가지고 있다면, 여러분은 저작권이 있는 작품과 유사한 것을 만든 것이므로, 따라서 여러분은 잠재적으로 스타트랙의 저작권을 침해할 수 있습니다.

저작물이 저작권이 있는지 어떻게 알 수 있습니까?

모든 저작물이 저작권 보호를 받고 있다고 가정하자. 저작권 기호(©)는 소유자가 자신의 저작권을 알리고 있음을 나타내지만, 저작권을 주장하기 위해 기호를 표시할 필요는 없습니다. 기호를 표시하는 데에는 몇 가지 이점이 있지만, 저작권 소유자는 종종 저작물이 보호받고 있음을 분명히 하기 위해 기호를 표시하고, 소유자가 자신의 권리를 주장할 것임을 알립니다.
저작권 기호는 본인의 저작물에 사용할 수 있으며, 발행연도, 본인의 성명 또는 회사명을 첨부할 수 있습니다.

저작권 소유자는 누구입니까?

디지털 저작물을 만들 때 물리적 세계에서 만드는 다른 모든 것을 소유하는 것처럼 디지털 저작물과 저작권을 소유합니다. 단:

  • 다른 사람과 공동으로 작업을 만든 경우 둘 다 저작권을 공유합니다.
  • 미국을 포함한 일부 관할권(지정학적 지역)에서, 만약 당신이 그 일을 만들기 위해 고용되었다면, 당신이 다른 법적 준비를 하지 않는 한, 고용주는 일반적으로 지적 재산을 소유합니다.

저작권은 얼마나 지속됩니까?

당신이 어떤 것을 만들 때, 저작권은 그 것에 자동적으로 붙습니다. 당신은 당신 자신의 작품에 대한 저작권을 얻기 위해 어떤 일도 할 필요가 없습니다. 저작권 보호는 일반적으로 저작자의 수명에 50년에서 70년까지 지속됩니다.

저작권은 만료되며 소유자(들)에 의해 포기될 수도 있습니다. 이러한 저작물은 공공 영역에 있다고 하는데, 이는 공공이 IP를 소유한다는 것을 의미합니다. 이러한 저작물은 누구나 복사하여 다른 저작물에 적응할 수 있습니다.

메리 셸리의 프랑켄슈타인과 루이자 메이 올콧의 리틀 우먼과 같은 많은 고전 책들은 공공 영역에 있습니다. 창작자들이 비용이나 벌금 없이 그것들을 재사용하고 수정할 수 있기 때문에 이 책들을 바탕으로 한 많은 영화, 책, 그리고 다른 작품들이 있습니다.

저작권에 예외가 있습니까?

미국의 '공정이용' 교리는 저작권의 예외로 잘 알려져 있으며, 공정이용은 뉴스 보도, 비평, 교육, 패러디, 풍자 등의 목적으로 저작권 보호를 받는 저작물을 자유롭게 이용할 수 있도록 하고 있지만, 이는 복잡한 법 영역에 해당합니다. 대부분의 다른 나라에서는 받아들여지지 않는 미국의 기준이며, 공정이용을 결정하는 명확한 규정이 없어 저작권자가 이용에 대해 이의를 제기할 경우 법원에서 판결하는 경우가 많습니다.

다른 작품의 짧은 인용문이나 클립이 아무리 짧더라도 공정한 사용으로 간주될 것이라고 가정할 수는 없습니다. 작품 사용이 공정한 사용인지 확신할 수 없다면 자격을 갖춘 법률 전문가와 상담하거나 작품 사용을 아예 피하는 것이 좋습니다.

중요: 이 튜토리얼에 제공된 정보는 법률 자문을 구성하지 않으며 이를 의도하지 않습니다. 이 튜토리얼은 일반 정보 목적만을 위한 것입니다. 특정 법률 문제에 대한 지침은 변호사와 상담하십시오.

4. 라이센스가 무엇인가요?

프로젝트에 다른 사용자의 작업을 사용하기 전에 해당 작업을 재사용할 수 있는 권한이 있는지 확인하고 원래 작성자가 의도한 대로 재사용하는 것이 중요합니다.

저작권으로 보호되는 저작물을 재사용할 수 있는 라이센스는 저작물을 사용할 수 있는 권한입니다. 소유자로부터 저작물 사용을 라이센스하면 소유자는 소유권을 보유하지만 사용자에게 저작물 사용 권한을 부여합니다. 최종 사용자 라이센스 계약 또는 EULA를 포함한 라이센스 계약에는 저작물을 사용하기 위해 보유해야 하는 권한과 그 대가로 충족해야 하는 조건이 명시되어 있습니다.

계약의 권한으로 다음 중 하나를 수행할 수 있습니다:

  • 원하는 경우 원본 작업을 기반으로 리믹스, 편집, 조정 및 빌드
  • 특정 방법 또는 특정 조건에서 원본 작업을 기반으로 리믹스, 편집, 조정 및 빌드(예: Unity Asset Store에서 프로젝트에 에셋을 재사용해야 함)
  • 변경되지 않은 작업 복사 및 배포


라이센스 계약 조건은 사용자가 권한을 대가로 동의하는 조건으로, 다음 중 하나 또는 그 이상을 포함할 수 있습니다:

  • 배포된 각 복사본에 대해 실행 로열티(소유자에게 수수료) 지불
  • 일회성 요금 지불
  • 특정 단어 또는 하이퍼링크를 포함할 수 있는 특정 형식으로 작성자에게 속성(신용)을 부여합니다
  • 비상업적 목적으로만 작업 사용
  • 라이센싱자와 동일한 조건으로 작업 라이센스 부여

모든 사용이 허용되고 조건이 없는 경우 작업은 공용 도메인에 있습니다.
예를 들어, 라이센스가 "로열티 프리"일 수 있다고 해서 저작권 및 라이센스 제한이 없는 것은 아닙니다. 종종 이는 저작물 사용에 대해 반복적인 수수료를 지불할 필요가 없음을 의미할 뿐입니다. 라이센스는 일시금 지급과 같은 다른 보상 및 제한적일 수 있는 다른 조건을 여전히 요구할 수 있습니다.

라이센스에 대해 배울 수 있는 훌륭한 자료는 Creative Commons로, 주로 저작물과 예술적인 저작물을 라이센스하기 위해 표준화된 라이센스 계약을 제공하는 비영리 단체입니통다(소프트웨어에는 권장되지 않습니다). Creative Commons 라이센스 계약은 위의 권한과 조건을 공통적으로 조합하여 사용합니다.

5. 라이센스 계약을 어겼을때 어떤 일이 일어나나요?

원작자의 저작권과 관계없이 라이센스 계약을 파기하거나 인터넷의 에셋을 사용하는 것은 매우 쉽고 때로는 유혹적이기까지 합니다. 그러나 그것이 쉽다고 해서 올바르게 되는 것은 아닙니다. 마치 고장난 영화나 소프트웨어를 복사하는 것처럼 라이센스 계약을 준수하지 않고 이미지 파일, 3D 에셋 또는 스크립트를 사용하는 것은 도둑질입니다. 프로젝트의 목적이나 역할에 관계없이 재사용하는 저작물의 라이센스 계약 조건을 읽고 이해하고 따라야 합니다.

학생이거나 전문가가 되고자 하는 경우 라이센스 계약을 준수하면 미래의 고용주에게 디지털 시민권을 제공하고 포트폴리오를 게시하고 경력을 시작할 때 보호할 수 있습니다.

프리랜서, 인디 개발자, 회사 직원, 회사 소유주 또는 창작자가 창작하여 수익을 창출하는 경우 라이센스 계약을 준수하면 사용자와 비즈니스가 보호됩니다.

전반적으로, 자신의 작업에 자신의 시간과 열정을 쏟는 창작자들의 자리에 자신을 앉히세요 - 만약 누군가가 자신의 자격증 조건을 따르지 않고 자신의 재능을 이용한다면 어떨까요? 모든 사람의 IP를 존중하는 것은 공동체의 노력이고, 다른 사람들을 존중하는 것처럼 다른 사람들을 존중하는 것은 보답될 것입니다.


중요: 이 튜토리얼에 제공된 정보는 법률 자문을 구성하지 않으며 이를 의도하지 않습니다. 이 튜토리얼은 일반 정보 목적만을 위한 것입니다. 특정 법률 문제에 대한 지침은 변호사와 상담하십시오.

6. 책임감있는 에셋 재사용이 무엇인가요?

다른 창작자의 권리를 알고 있는 한 에셋을 책임감 있게 재사용하는 것은 쉽습니다. 다음은 쉽게 준수할 수 있는 라이센스가 있는 에셋의 일부 출처입니다.

Unity Asset Store

Unity Asset Store는 대부분의 라이센스 문제를 처리하기 때문에 다른 제작자의 에셋을 프로젝트에 쉽게 재사용할 수 있습니다. 이러한 에셋의 대부분은 상업적 용도로도 프로젝트에 사용할 수 있습니다. 그러나 이러한 에셋을 프로젝트와 별도로 재판매하거나 재배포할 수 없습니다.

에셋 스토어는 창작자가 자신의 작품을 다른 창작자에게 라이선스할 수 있는 마켓플레이스입니다. Unity Asset Store에 있는 대부분의 에셋은 두 가지 예외를 제외하고 Standard Unity Asset Store EULA의 적용을 받습니다. 첫째, 제한된 에셋은 별도의 계약에서 제공되는 보다 제한적인 라이센스 조건을 가지고 있습니다. 에셋이 제한된 경우 해당 제품 페이지에 제한된 에셋 및 도구로 라벨이 표시됩니다. 둘째, 사용자 정의 계약에 따라 배포되는 에셋 및 도구의 수가 제한됩니다. 이러한 내용은 제품 페이지에도 라벨이 표시됩니다.

Unity Asset Store 에셋에는 에셋을 구매하고 관리해야 하는지 또는 좌석당 관리해야 하는지를 나타내는 라이센스 유형도 있습니다. Per seat는 에셋을 사용하는 각 사람에게 적용되는 라이센스와 모든 수수료를 의미합니다. 잠재적으로 많은 사람이 에셋을 사용해야 한다면 수수료가 부과되는 Per seat 라이센스는 회사에 매우 비싸질 수 있습니다. Entity 라이센스는 회사 전체에 적용되며 수수료는 에셋을 사용하는 개인의 수와 관계없이 한 번만 지불됩니다. 기업의 독립 계약자는 에셋을 사용할 수 있지만 라이센스를 구입한 기업의 통제와 지시에 따라 프로젝트에 필요한 범위에서만 사용할 수 있습니다. 더 큰 회사는 계열사와 자회사도 포함하는 다중 Entity 라이센스를 선택할 수 있습니다.

프리랜서 또는 회사의 직원인 경우 이러한 조건이 중요할 수 있습니다. 예를 들어 회사를 대신하여 에셋을 구입하고 해당 에셋이 Per seat 라이센스를 가지고 있다면 프로젝트에 참여하는 회사의 모든 크리에이터에 대한 수수료를 회사가 지불해야 합니다.
각 에셋의 라이센스 계약 및 라이센스 유형은 Unity Asset Store의 페이지에 나열됩니다.

Unity Asset Store의 에셋 라이센스에 대한 질문이 있는 경우, 자세한 내용은 에셋스토어 서비스 약관 및 EULA에셋스토어 서비스 약관 및 EULA FAQ를 참조하거나 법률 전문가에게 문의하십시오.
 

인터넷 주변


2D 이미지 및 3D 에셋의 다른 관리되는 공급자는 Unity Asset Store와 유사한 자체 라이센스 조건을 가질 것입니다. 다른 공급자가 라이센스 조건을 사용할 수 있도록 하지 않으면 주의하고 피할 수 있습니다. 어떤 맥락에서든 라이센스 공급자가 누구인지 이해하는 것이 중요합니다. 예를 들어, Unity Asset Stroe는 에셋의 공급자를 위한 시장입니다. 유니티는 기본 라이센스를 제공할 수 있지만 공급자는 에셋의 라이센스 공급자이며 유니티는 창작자가 작업을 보호하도록 돕기 위해 이러한 라이센스를 관리, 추적 또는 강제하지 않습니다.

창작자에게 에셋을 제공하기 위한 것이 아닌 일반 웹 사이트에서 에셋 근처 또는 사이트의 바닥글에서 저작권 주장 또는 사용권 계약에 대한 언급을 찾습니다. 전문 예술가와 사진작가에게 비용을 지불하는 뉴스 및 정보 웹 사이트는 에셋의 재사용을 허용하지 않을 가능성이 높다는 것을 기억하십시오. 저작권 또는 사용권에 대한 언급이 보이지 않는 경우 에셋이 공공 영역에 있다고 가정하지 마십시오. 소유자 또는 게시자에게 연락하거나 다른 에셋을 찾으십시오.

중요: 이 튜토리얼에 제공된 정보는 법률 자문을 구성하지 않으며 이를 의도하지 않습니다. 이 튜토리얼은 일반 정보 목적만을 위한 것입니다. 특정 법률 문제에 대한 지침은 변호사와 상담하십시오.
 

무료 에셋 소스

 
다음은 무료 에셋을 찾고 라이센스 계약에 쉽게 액세스하고 준수할 수 있는 일부 웹 사이트입니다:
  • Pexels는 2D 이미지와 비디오를 무료로 제공합니다. 이 사이트의 모든 에셋은 동일한 라이센스 계약을 가지고 있습니다. 무료로 사용할 수 있으며 지불 및 귀속은 선택 사항입니다.
  • Creative Commons 검색 엔진을 사용하면 Creative Common 라이센스 및 원본에 따라 검색을 필터링할 수 있습니다. 이 사이트는 이미지, 오디오 및 비디오 파일을 인덱싱합니다.
  • 오픈 게임 아트는 2D 및 3D 아트, 텍스처, 음악 및 사운드 효과를 제공합니다. 모든 에셋은 무료이지만 여러 라이센스 유형이 있으므로 에셋별로 크리에이터에 크레딧을 부여해야 하는지 여부를 확인하십시오.

7. 다른 사람들의 작품에 크레딧을 주는 법

그것이 라이센스 계약에 의해 요구되는지 아니면 선택적으로 요구되는지, 크레딧을 주는 것은 항상 좋은 생각입니다. 크레딧은 일반적으로 제목, 창작자의 이름, 출처 및 작품에 대한 기타 정보를 나열하는 짧은 블러 텍스트인 속성에 기록됩니다.

경우에 따라 정확한 속성 텍스트가 제공되어 작업에 복사할 수 있습니다. 다른 경우에는 명확하지 않습니다. 적절한 속성을 구성하는 데 유용한 리소스는 크리에이티브 커먼즈 위키 페이지의 Best practices for attribution에 있습니다.

실시간 3D 프로젝트에서 속성은 일반적으로 응용 프로그램 또는 게임의 메인 메뉴에서 링크된 페이지에 나열되거나 영화 또는 디지털 스토리의 클로징 크레딧에 나열됩니다. 여기 프로젝트에 크레딧을 추가하는 방법에 대한 몇 가지 제안을 포함하는 포럼 게시물이 있습니다.


에셋 목록 유지


실시간 3D 프로젝트는 크고 복잡해질 수 있습니다. 자신이 아닌 다른 크리에이터로부터 프로젝트에 첫 번째 에셋을 가져오는 즉시 에셋 목록을 시작할 수 있는 좋은 기회입니다. 이 로그는 다음 정보가 포함된 간단한 로그가 될 수 있습니다:

  • 에셋의 이름
  • 에셋이 호스팅되는 URL
  • 에셋의 작성자
  • 에셋의 라이센스
  • 프로젝트에 추가할 속성(있는 경우)

이러한 정보를 저장하고 쉽게 접근할 수 있도록 함으로써 미래의 많은 골칫거리를 줄일 수 있고 예술가들이 올바르게 인정받도록 보장할 수 있습니다.

리뷰 및 소셜 미디어에서 다른 사람을 돕습니다

Unity Asset Store 및 기타 여러 사이트에서 사용하는 에셋에 대한 리뷰를 남길 수 있습니다. 다른 크리에이터의 작업에 대한 게시물이 속성의 대체물은 아니지만, 리뷰를 남기는 것은 동료 크리에이터를 도울 수 있는 훌륭한 방법입니다.


또한 소셜 미디어에서의 샤라웃은 아티스트가 팔로잉을 얻는 데 도움이 됩니다. 펙셀 웹사이트는 소셜 미디어 게시물을 쉽게 만듭니다.

8. 당신의 IP(지적 재산권)을 케이크처럼 쉽게 지키는 법

창작자 자신이 저작권을 소유하는 것입니다! 무료로 공유하든 판매하든 간에 자신의 저작물을 세상과 공유할 준비가 되었다면, 자신의 지적 재산권을 알고 이해하며 자신의 희망을 표현하는 사용권 계약을 사용하는 것이 중요합니다.
고려해야 할 문제는 다음과 같습니다:

  • 다른 사용자가 자신의 작업을 재사용하도록 의도된 것입니까, 아니면 그대로 사용하도록 의도된 것입니까? 다른 사용자가 작업을 변경하지 않도록 하려면 파생 작업이 허용되지 않도록 지정해야 합니다.
  • 당신은 당신 자신의 명성이나 브랜드를 만들고 있고, 당신에게 중요한 일에 대해 인정을 받고 있습니까? 만약 그렇다면, 당신은 귀속을 요구하고 아마도 당신의 웹사이트나 온라인 스토어로의 링크를 요구하기를 원할 것입니다.
  • 아무도 당신의 일로 돈을 벌지 않는다는 것이 당신에게 중요합니까? 그렇다면, 당신은 그것을 비상업적인 목적으로만 사용하도록 규정할 수 있습니다.

예를 들어, Unity Asset Store의 표준 EULA는 특정 조건에 따라 파생 작품 및 상업적 사용을 허용합니다. 이 라이센스 계약은 다른 크리에이터에게 리소스를 제공하는 크리에이터에게 이상적입니다. 다른 곳에서 작품을 라이센스할 계획이라면 Creative Commons 라이센스 계약을 검토하고 필요에 맞는 라이센스 계약을 사용할 수 있습니다.

중요: 이 튜토리얼에 제공된 정보는 법률 자문을 구성하지 않으며 이를 의도하지 않습니다. 이 튜토리얼은 일반 정보 목적만을 위한 것입니다. 특정 법률 문제에 대한 지침은 변호사와 상담하십시오.

9. 다음 단계에서는 무엇을 배울까요?

여기 유니티 러닝에서 능력을 확장하면 더 복잡하기 때문에 다양한 출처의 에셋이 필요한 프로젝트를 만들 수 있습니다. 이제 작업을 사용하는 사람의 지적 재산권을 보존하고 존중하는 것의 중요성과 작업을 공유할 때 자신의 권리를 보호하는 방법을 알게 되었습니다.

원본 문서 링크: Unity Learn, Copyrights for creators

 

Copyright for creators - Unity Learn

Every creator is an intellectual property owner. Real-time 3D creators often use the intellectual property of others. You will probably reuse the work of others, and your work might also be reused. In either case, it’s important for you to know and respe

learn.unity.com

'게임 개발 > Unity' 카테고리의 다른 글

Get started on your guided project  (0) 2023.07.25
Select your guided project  (0) 2023.07.23
Meet the Creators  (1) 2023.07.23
Welcome to the Creative Core Pathway  (1) 2023.07.22
Unity - Creative Core를 같이 공부해봅시다!  (0) 2023.07.22

+ Recent posts