본문 바로가기
Unreal Engine 5/devlog: 카툰액션게임

언리얼 카툰 액션 게임 Devlog 2: 캐릭터 및 게임모드 설정 및 캐릭터 모델 허가 요청(블루아카이브)

by 니키티스 2025. 4. 16.

요약

개발 기간: 2월 6일, 3월 11일 + a

해당 내용은 캐릭터 모델에 대한 저작권 검토 문제를 포함하고 있습니다.

  • 게임의 기초가 되는 캐릭터, 게임모드, 플레이어 컨트롤러에 대한 C++ 클래스 선언하기
  • 나중에 해야 할 일로 캐릭터 변경, 애니메이션 문제 해결, GAS 시스템 도입을 고려함
  • 추가 도입할 캐릭터 ‘미야코(블루아카이브)’에 대한 저작권 관련 검토하기

1. 초기 설정

1.1 기본 상속 구조

일단 프로젝트의 이름은 애니메이션 스타일의 그래픽을 보여주는 액션 게임이라는 뜻에서, StylizedActionGame이라고 명명했다.

해당 프로젝트의 이름 StylizedActionGame을 따 SA를 모든 커스텀 클래스의 접두사로 붙일 예정이다(ex: actor는 ASA…의 꼴로 시작).

우선, 캐릭터가 게임의 기초가 되므로 이를 C++ 클래스로 선언한다. 거기에 게임모드, 캐릭터 컨트롤러도 추가하고자 한다.

상속 구조는 다음과 같다.

  • Character/SACharacterBase
    • SACharacterPlayer
    • SACharacterNonPlayer
  • Game/SAGameMode
  • Controller/SAPlayerController

캐릭터 클래스는 기본적인 모든 캐릭터 종류를 관리하는 SACharacterBase를 선언한다.

그리고 SACharacterBase를 상속받아서, 플레이어를 표현하는 SACharacterPlayer 클래스, NPC를 표현하는 SACharacterNonPlayer 클래스를 만들도록 한다.

SAGameMode는 GameModeBase를 상속받아 만든다.

SAPlayerController는 PlayerController를 상속받아 만든다.

이렇게 바탕을 만든 후, 작업은 해당 C++ 클래스를 기반으로 블루프린트로 확장하여 구현한다. 다만, 필요하다면 C++ 구현을 바탕으로 구현하고자 한다.

이때 클래스 이름을 바꿀 때 문제가 발생했는데, 이름을 바꾸고 클래스 이름을 바꾼 다음 source를 제외한 코드 관련 파일을 제거한 후 Generate Visual Studio로 생성, 재빌드하는 과정을 여러 번 거쳐야 했다. 가능하면 클래스 이름은 바꾸지 않는 걸로 하려고 한다…

1.2 빌드 설정 문제: StylizedActionGame.Build.cs

...\\Source\\StylizedActionGame\\Character\\SACharacterBase.cpp(4): fatal error C1083: Cannot open include file: 'Character/SACharacterBase.h': No such file or directory

자꾸 자기 폴더에 있는 헤더를 못 읽는다고 해서 왜 그런지 원인을 찾아보았다.

살펴보니 .Build.cs에 자기 프로젝트 경로명이 안 들어가서 문제였다.

분명 예전에도 비슷한 문제가 있었던 거 같은데 못 찾겠고, 어쨌거나 빌드에 다음 한 줄을 추가하니 해결되었다.

PublicIncludePaths.AddRange(new string[] { "StylizedActionGame" });

‘StylizedActionGame’이라는 경로를 include path에 넣겠다는 건데, 이러면 매번 StylizedActionGame을 치지 않아도 된다.

1.3 에디터 설정 문제

에디터에 보니 자꾸 콘텐츠 브라우저가 따로 띄워진다. 레이아웃에 고정되지 않아서 그런 것으로 보인다.

실행할 때마다 이상하게 Content Browser가 따로 띄워진다.

https://forums.unrealengine.com/t/content-browser-undocked/1230986/10

 

Content Browser Undocked

Removing the whole lines about starterContent in the .ini worked, no need to delete the StarterContent itself [StartupActions] bAddPacks=true InsertPack=(PackSource=“StarterContent.upack”,PackName=“StarterContent”) It also fixed another annoying is

forums.unrealengine.com

위 링크는 이때 도움이 되었던 자료인데, Start Contents 팩을 추가하려고 하는 시도 때문에 그런 것이라고 한다.

DefaultGame.ini에서 InsertPack=(PackSource="StarterContent.upack",PackName="StarterContent")의 위에 있는 bAddPacks=True를 bAddPacks=False로 바꾸자.

2. 캐릭터 클래스/게임모드 생성 및 설정

2.1 캐릭터 클래스 선언

이제 캐릭터 클래스를 선언해보자.

  • Character/SACharacterBase
    • SACharacterPlayer
    • SACharacterNonPlayer

이번에는 캐릭터를 위한 클래스 SACharacterPlayer를 만드는 것이 목표이다.

우선, 그 바탕이 되는 SACharacterBase 클래스를 만들자. 지금은 간단하게 공격을 수행하는 ProcessAttack 함수 하나만 생성할 것이다.

대부분의 설정은 프로젝트 생성 시 제공되는 기본 액터 AStylizedActionGameCharacter의 설정을 그대로 사용하였다.

다만 기본 캐릭터 모델은 InfinityBladeWarriors를 활용하도록 하였다(다만, 언리얼 엔진 마켓플레이스가 Fabs로 바뀌면서 라이브러리 링크를 찾을 수 없어 링크를 못 걸었습니다).

// SACharacterBase.h
class STYLIZEDACTIONGAME_API ASACharacterBase : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	ASACharacterBase();

public:
	void ProcessAttack();
};

// SACharacterBase.cpp
// Sets default values
ASACharacterBase::ASACharacterBase()
{
	// Pawn
	bUseControllerRotationPitch = false;
	bUseControllerRotationYaw = false;
	bUseControllerRotationRoll = false;

	// Capsule
	GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
	GetCapsuleComponent()->SetCollisionProfileName(CPROFILE_SACAPSULE);

	// Movement
	GetCharacterMovement()->bOrientRotationToMovement = true;
	GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f);
	GetCharacterMovement()->JumpZVelocity = 700.f;
	GetCharacterMovement()->AirControl = 0.35f;
	GetCharacterMovement()->MaxWalkSpeed = 500.f;
	GetCharacterMovement()->MinAnalogWalkSpeed = 20.f;
	GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;

	// Mesh
	GetMesh()->SetupAttachment(GetCapsuleComponent());
	GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -100.0f), FRotator(0.0f, -90.0f, 0.0f));
	GetMesh()->SetAnimationMode(EAnimationMode::AnimationBlueprint);
	GetMesh()->SetCollisionProfileName(TEXT("NoCollision"));

	// 기본 캐릭터는 에셋 InfinityBladeWarriors의 캐릭터를 활용한다.
	static ConstructorHelpers::FObjectFinder<USkeletalMesh> CharacterMeshRef(TEXT("/Script/Engine.SkeletalMesh'/Game/InfinityBladeWarriors/Character/CompleteCharacters/SK_CharM_Robo.SK_CharM_Robo'"));
	if (CharacterMeshRef.Object)
	{
		GetMesh()->SetSkeletalMesh(CharacterMeshRef.Object);
	}

	static ConstructorHelpers::FClassFinder<UAnimInstance> AnimInstanceClassRef(TEXT("/Game/Characters/Mannequins/Animations/ABP_Quinn.ABP_Quinn_C"));
	if (AnimInstanceClassRef.Class)
	{
		GetMesh()->SetAnimInstanceClass(AnimInstanceClassRef.Class);
	}
}

void ASACharacterBase::ProcessAttack()
{
	UE_LOG(LogTemp, Warning, TEXT("ASACharacterBase::ProcessAttack"));
}

그리고 이를 상속받아 플레이어 캐릭터 클래스 SACharacterPlayer를 생성하자.

3D 3인칭 형태의 카메라로 구현할 것이기 때문에, 이것도 기본 캐릭터 클래스 StylizedActionGameCharacter를 참고하여 제작하였다.

이때, 나중에 공격 기능을 추가할 것이기 때문에 기본 제공되는 액션 세 개에 AttackAction을 추가하였다.

  • JumpAction: 점프 입력
  • MoveAction: WASD 이동
  • LookAction: 마우스 카메라 조작
  • AttackAction: 좌클릭으로 공격
// SACharacterPlayer.h
UCLASS()
class STYLIZEDACTIONGAME_API ASACharacterPlayer : public ASACharacterBase
{
	GENERATED_BODY()

public:
	ASACharacterPlayer();

public:
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
	
// Camera Section
protected:
	/** Camera boom positioning the camera behind the character */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class USpringArmComponent> CameraBoom;

	/** Follow camera */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UCameraComponent> FollowCamera;

// Input Section
protected:
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UInputMappingContext> DefaultMappingContext;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UInputAction> JumpAction;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UInputAction> MoveAction;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UInputAction> LookAction;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UInputAction> AttackAction;

	void Move(const FInputActionValue& Value);
	void Look(const FInputActionValue& Value);
};

구현도 StylizedActionGameCharacter를 그대로 가져올 것이기 때문에, 여기에서는 생략하도록 한다.

2.2 캐릭터 입력 액션/매핑 설정

언리얼 엔진에서 입력은 InputAction으로 입력의 형식을 지정하고, Input Mapping Context을 통해 InputAction을 특정 키(ex: WASD)에 매핑한다.

위에서 만든 캐릭터 클래스에서는 InputAction과 Input Mapping Context를 필요로 한다.

우선, InputAction은 네 가지가 필요하다. Jump, Move, Look, Attack에 대한 액션 IA_Jump, IA_Move, IA_Look, IA_Move, IA_Attack 네 개를 생성했다. 이것도 기본 제공되는 액션을 활용하였다.

그리고 Input Mapping Context도 간단하게 설정해 주었다.

  • 점프 Jump: Space Bar
  • 이동 Move: WASD
  • 카메라 Look: 마우스 XY 축
  • 공격 Attack: 마우스 좌클릭

 

2.3 캐릭터 블루프린트 생성

이후 이를 설정해 주기 위해 캐릭터 블루프린트를 생성해 준다.

SACharacterPlayer를 상속받은 BP_SACharacterPlayer를 생성해 주었다.

그리고 InputAction과 Input Mapping Context를 할당해 준다.

이렇게 하면 기본적인 캐릭터 및 조작 설정은 끝이다.

2.4 게임모드 및 프로젝트 설정

이외에도 게임모드를 위해 SAGameMode를 만들었다.

// SAGameMode.h
UCLASS(minimalapi)
class ASAGameMode : public AGameModeBase
{
	GENERATED_BODY()

public:
	ASAGameMode();
};

// SAGameMode.cpp
ASAGameMode::ASAGameMode()
{
	// set default pawn class to our Blueprinted character
	static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter"));
	if (PlayerPawnBPClass.Class != NULL)
	{
		DefaultPawnClass = PlayerPawnBPClass.Class;
	}
}

그리고 이를 상속받아 블루프린트 BP_SAGameMode를 만들었다. 기본적으로 C++ 클래스는 값 수정이 어렵기 때문에 블루프린트로 다시 객체를 만들었다.

기본 캐릭터 설정을 위해 Default Pawn Class를 BP_SACharacterPlayer로 바꾼다.

게임모드 설정이 끝나면, 이 게임모드를 Project Settings에서 설정을 해주어야 한다.

Project > Maps & Mods > Default GameMode를 BP_SAGameMode로 설정해준다.

이렇게 하면 기본적인 프로젝트 설정은 끝이다.

3. 나중에 추가하면 좋을 것?

다만 지금은 아직 부족한 점이 있다.

  • 애니메이션 스타일의 캐릭터가 필요한데, 현재에는 임시 캐릭터를 사용하고 있다.
  • 이동은 잘 되는데 애니메이션이 정상적으로 나오지 않는다.

이후 바꿔볼 내용은 다음과 같다.

  • 캐릭터 변경: Fabs에서 무료로 제공되는 ‘블루아카이브 - Miyako’ 모델을 활용한다(https://www.fab.com/listings/e9dfe6b0-71f7-4c31-80f8-28eb0755cd9b).
  • 애니메이션 문제 해결: 애니메이션 몽타주를 만들어서 Blueprint Anim Graph로 애니메이션을 제대로 제어하기
  • GAS 시스템 도입하기: 앞으로 Game Ability System을 기반으로 시스템 구현해 보기

3.1. 캐릭터 변경

Fabs에서 블루아카이브의 미야코 캐릭터 모델을 발견하여, 이를 활용해보려 한다.

모델 링크: https://www.fab.com/listings/e9dfe6b0-71f7-4c31-80f8-28eb0755cd9b

다만, 캐릭터가 괜찮다고 해서 바로 활용하기에는, 해당 캐릭터는 넥슨의 상용게임 ‘블루아카이브’의 캐릭터 ‘미야코’를 바탕으로 만들어져서 약간의 위험성이 있었다. 그래서 추가 검증이 필요했다.

이 부분은 4번 항목에서 다루도록 하였다.

3.2. 애니메이션 문제 해결

현재에는 애니메이션이 이상한 문제가 있다.

잘 보면, 걸어 다닐 때 상체는 움직이는데 다리는 움직이지 않는다.

현재 애니메이션은 임시로 InfiniteBladeWarriors의 캐릭터에다가 마네퀸(Quinn)을 넣어놨다 보니, 그로 인해 생기는 문제로 보인다.

모델을 바꾼 후에 Blueprint Anim Graph를 통해 좀 더 제대로 지정해서 개선해보고자 한다.

3.3. GAS 프레임워크 도입하기

마지막으로 GAS 프레임워크를 도입하는 방안을 생각해 보았다.

GAS 프레임워크란 언리얼 엔진에서 제공하는 게임 어빌리티 시스템(Game Ability System) 프레임워크를 의미한다.

게임플레이 어빌리티 시스템(Gameplay Ability System) 은 RPG나 MOBA 타이틀에서 볼 수 있는 어빌리티 및 어트리뷰트 유형을 구축하기 위한 고도로 유연한 프레임워크입니다. 게임 내 캐릭터가 사용할 액션이나 패시브 어빌리티, 이러한 액션의 결과로 다양한 어트리뷰트를 높이거나 낮추는 상태 이펙트를 만들 수 있고, '재사용 대기 시간' 타이머나 자원 비용을 구현하여 액션의 사용 빈도를 조절하거나, 어빌리티의 레벨과 레벨에 따른 이펙트를 변경하거나, 파티클 및 사운드 이펙트를 활성화하는 등의 작업이 가능합니다. 게임플레이 어빌리티 시스템을 사용하면 점프처럼 단순한 것부터 최신 RPG나 MOBA 타이틀 내 인기 캐릭터의 기술 모음처럼 복잡한 것까지 다양한 인게임 어빌리티를 설계 및 구현하고 효과적으로 연결할 수 있습니다.

-언리얼 엔진 공식 문서

위 내용은 다음 공식 문서를 참고하였다.

공식 문서https://dev.epicgames.com/documentation/ko-kr/unreal-engine/gameplay-ability-system-for-unreal-engine?application_version=5.4

게임플레이 어빌리티 시스템, 줄여서 GAS는 어빌리티와 어트리뷰트로 다양한 기능을 구현하는 프레임워크이다. 공식 문서에 따르면 RPG, MOBA에서 사용된다고 하였으나, 실제로는 정말 다양한 곳에 적용할 수 있어 게임에서의 스킬 등을 구현하는 유연한 방법으로 볼 수 있다.

요약하면 액터가 소유하고 발동할 수 있는 어빌리티가 있고, 이를 통해 액터 간의 상호작용을 제공하는 프레임워크라 할 수 있다.

범용적인 설계로 인해 굉장히 유연하고 확장성이 높으며, 의존성을 최소화시키는 모듈러 시스템, 네트워크 지원 가능, 데이터 기반 설계라는 장점이 있다. 하지만 기본적으로 배우는 학습 비용이 크고 복잡성이 높아 큰 규모의 프로젝트에나 유용하다.

해당 프로젝트는 스킬이 많이 등장하거나 볼륨이 큰 게임은 아니다. 특히나 GAS 프레임워크는 네트워크 게임에서 활용하기 좋은 면이 있기 때문에, GAS 프레임워크를 사용하여 얻을 수 있는 이점이 많은 프로젝트는 아니다. 다만 GAS 프레임워크가 액션 RPG 게임에 적합한 형태여서 적용하기 좋은 점도 있고, 이러한 프레임워크는 직접 실습하면서 배우는 게 가장 효과적이므로 학습 목적으로 GAS 프레임워크를 활용해 볼 예정이다.

지금은 공격 기능이나 점프 기능을 GAS 프레임워크로 대체하는 것을 가까운 목표로 삼고자 한다.

4. 캐릭터 사용 문제

미야코 캐릭터는 넥슨에서 제작된 블루아카이브의 캐릭터이기 때문에, 저작권 문제가 있을 수 있다.

그래서 넥슨에서 IP 사용 가이드를 확인해 보았다.

① 게임 IP(Intellectual Property)란 게임의 세계관, 스토리, 캐릭터, 몬스터, 이미지, 배경음악, 영상 등 게임을 구성하는 일체의 저작물을 말합니다.

② UGC는 게임굿즈, 게임영상(게임 플레이 영상, 팬비디오 등), 팬아트, 팬소설 등 창작자 여러분이 넥슨의 게임 IP에 새로운 창작성을 부가하여 제작한 2차 창작물을 말합니다. 넥슨은 게임에 다양한 즐거움을 더해주는 창작자 여러분 및 UGC를 존중합니다. 다만, 게임 IP를 활용하여 게임을 제작하고 배포 및 서비스하는 것은 원칙적으로 허용되지 않습니다.

③ UGC를 공개할 때는 반드시 그 출처(넥슨 및 해당 게임명)를 명시해 주시기 바랍니다. 특히, 게임 음원은 관련 게임의 유튜브 채널(없을 경우 관련 해당 게임명) 또는 네코드뮤직 유튜브 채널을 링크형태로 기재해 주시기 바랍니다.

④ UGC를 영리적인 용도로 사용하는 것은 허용되지 않습니다.

  1. UGC 제작 시 제작에 대한 대가로 제작비, 협찬금 등 타인에게 금전적 보상을 요구하거나 받아서는 안 됩니다.
  2. UGC를 유료로 판매하거나 공개, 배포, 사용허락 등에 대한 대가를 받을 수 없습니다.
  3. 경제적 이익이 제공되거나 UGC가 영리적으로 사용될 수 있는 공모전에 UGC를 출품할 수 없습니다.

⑤ 단, 아래 경우는 예외적으로 허용됩니다

  1. 창작자는 누구나 무료로 볼 수 있는 콘텐츠 플랫폼(유튜브, 치지직, 아프리카TV 등)에 UGC를 게재하여 광고 및 후원금 수익을 얻을 수 있습니다. 단, UGC를 활용하여 광고 및 후원금이 아닌 다른 방식으로 수익을 얻는 행위는 금지됩니다. 이에는 게임 음원을 그대로 사용하여 제작한 UGC도 포함됩니다.
  2. 게임IP를 활용하여 비영리 목적의 디지털 콘텐츠(어플리케이션 등) 제작을 희망할 경우 고객센터(http://help.nexon.com)로 개별 문의주시길 바랍니다.
  3. 네코제, 마비노기 판타지파티, 사이퍼즈 한데이, 던파 플레이마켓 등 넥슨이 공식적으로 개최하는 행사에서는 게임굿즈를 판매할 수 있습니다. 보다 구체적인 내용은 개별 게임 내 행사 참여 홈페이지를 통해 확인하실 수 있습니다.

⑥ 창작자는 UGC 제작 시 저작권법 및 관련 법령을 준수하고 선량한 풍속 기타 사회질서를 위반하지 않아야 합니다.

(이후 내용 생략)

https://member.nexon.com/policy/gameipguide.aspx

확인해 본 결과, 규정이 약간 애매했다.

‘게임 IP를 활용하여 게임을 제작하고 배포 및 서비스하는 것은 원칙적으로 허용되지 않습니다.’라고 되어 있으나, 공부용으로 제작하고 팬게임의 형태로 제공할 예정이기 때문에 경계가 애매했다.

해당 게임은 ‘비영리 목적의 디지털 콘텐츠’에 해당해서, 개별 문의를 달라고 되어 있었다.

그래서 고객센터로 문의해 본 결과 다음과 같은 답변을 받을 수 있었는데, 내용은 다소 두루뭉실했다.

넥슨 고객센터 문의 답변

안녕하세요. 블루 아카이브입니다.

먼저 블루 아카이브에서는 2차 창작이 활발하게 이루어지는

상황에 대해 긍정적으로 보고 있으며, 감사한 마음을 지니고 있습니다.

다만 개별적인 2차 창작물에 대해 제작 가능 여부를

별도로 안내드리기 어려운 점 너른 양해 부탁드리며,

아래에 안내드리는 유의사항을 참고하시어 2차 창작 진행을 부탁드립니다.

블루 아카이브에서는 원작을 훼손하지 않는 범위에서의 자유로운 창작 활동을 권장드립니다.

원작자의 권리 보호를 위해 2차 창작에 대한 검토가 수시로 진행되고 있으며

문제의 소지가 있을 경우 추가 조치가 진행될 수 있는 점 참고 부탁드립니다.

블루 아카이브 IP, 저작물을 훼손하거나 저작권적 문제가 될 수 있는 2차 창작물의 경우

비영리 목적이라 하더라도 원칙적으로 허용하지 않으며,

원작 게임의 세계관이나 성격을 훼손하지 않고

사회적 통념 및 미풍양속을 해치지 않는 범위에서 2차 창작을 진행 및 공개해 주시길 바랍니다.

게임 내ㆍ외의 공식 소재(캐릭터 일러스트, 키비주얼, 배경, 음원 등)와

게임 클라이언트의 분해를 포함하여 비정상적인 방법으로 추출된

원본 리소스를 활용한 2차 창작물 등의 콘텐츠 제작은 허용되지 않습니다.

또한, 2차 창작물 공개 시 수익 창출을 목적으로 하지 않고

블루 아카이브 공식 제작물이 아닌 2차 창작물인 점을 명확하게 안내해 주시길 바랍니다.

  • 인게임 리소스와 유사하게 인식될 수 있는 디자인 요소에 대해서는
  • 창작자의 판단하에 '차별화'가 될 수 있도록 부탁드립니다.

추가적으로 플랫폼 및 스토어를 통한 게임 출시 등

수익 창출을 목적으로 진행되는 2차 창작은 허용되지 않는 점 참고 부탁드립니다.

2차 창작 시 안내드린 내용을 유의해 주시길 부탁드리겠습니다.

관련 문의에 대해서 보다 상세한 안내를 드리기 어려울 수 있는 점 너른 양해 부탁드립니다.

감사합니다.

-넥슨의 고객센터 답변 메일

개별적인 안내보다는 게임 IP 사용 가이드라인을 다시 전달해 주는 느낌에 가까웠다.

일단 메일에서 안내된 내용을 바탕으로 생각해 보면

  • 사용하고자 하는 Fabs 모델 자체가 클라이언트에서 추출한 것보다는 자체 제작한 모델이다.
  • 캐릭터 ‘미야코’의 모델의 캐릭터 비율이 SD 형태의 인게임의 캐릭터와는 다르므로, 리소스와 차별화되었다고 볼 수 있다.
  • 수익 창출을 목적으로 하는 2차 창작이 아니라 팬게임 및 포트폴리오 제작을 위한 목적이다.

위 세 가지를 고려하면, 해당 모델의 사용 자체는 크게 문제가 되지 않을 것 같았다.

다만 게임이 지나치게 폭력적이지 않도록 주의가 필요했다. 이 점을 잘 고려하여 개발을 진행하기로 했다.

댓글