게임을 만들기위한 선택으로서 Unity3D의 장단점은 무엇입니까? [닫은]


64

우리는 작년에 시바를 사용했기 때문에 Unity3d로 학교 프로젝트를 수행하고 있습니다 (나에게 끔찍한 것 같습니다).

장점 :

  • 멀티 플랫폼, 심지어 구글이 크롬에서 그것을 구현할 것이라고 들었습니다.
  • 필요한 모든 것이 여기 있습니다
  • 스크립팅 언어는 프로그래밍 전문가가 아닌 사람들에게 좋은 선택입니다.

단점 :

  • 멀티 플레이어?
  • 독점, 당신은 단합과 그 한계에 전적으로 의존하고 그것을 확장 할 수 없습니다
  • 덜 "처음부터 게임 만들기"
  • C ++은 멋진 것이었을 것입니다

정말 이런 종류의 도구가 흥미 롭다고 생각하지만, 3 명 이상의 프로그래밍 담당자가 참여하는 프로젝트에 학교에서 사용할 가치가 있습니까? 이런 종류의 도구를 사용하여 프로그래밍 측면에서 실제로 무엇을 배울 수 있습니까? (파이썬과 js에는 괜찮지 만 C #이 싫어요)? 1 월부터 직접 x를 배우더라도 Ogre를 대신 사용할 수있었습니다 ...


또 다른 단점은 3D 모델링 / 디자인에 익숙해야 할 필요가 있지만 사이트를 다시 한 번 살펴보면 그렇지 않은 것 같습니다. 2D 게임이 가능하므로
Johnny Quest

1
@Johnny Quest 실제로 의도 한 것이 아니라면 사용하기 어색 할 수 있습니다.
Spooks

7
'C ++은 멋진 것이었을 것입니다.'-진지하게, 무엇? C ++로 작성하는 것이 이제 '쿨'입니까? 개인적으로 나는 언어 (모든 타이핑, 파이썬 : p)를 싫어하지만 확실히 훌륭한 언어 기능과 라이브러리입니다.
공산주의 오리

1
유니티는 놀라운 엔진이지만 ... 알아 두어야 할 몇 가지 단점 : 1) 유니티는 다소 메모리 호그 인 경향이 있습니다. 생각보다 많은 메모리가 필요합니다. 텍스처와 같은 것을 캐싱하기 때문일 수 있습니다. 이로 인해 모바일 장치에서 디버깅 및 OOM 오류가 발생할 수 있습니다. 2) 블랙 박스 (소스 코드 없음)를 처리하므로 성능 문제를 찾아서 해결하고 해결하기가 어려울 수 있습니다. 셰이더를 면밀히 조사하고 장면을 관리하는 방법을보십시오.
milkplus

2
@ milkplus : 그래서 나는 화합이 학생이 배워야하는 것이 아니라고 생각합니다. 예 : 저는 학생들에게 프로그래밍에 대해 가르치고 처음에는 파이썬을 가르치는 것이 좋습니다. 그러나 어느 시점에서나 레벨 수준의 작동 방식, 기본 사항에 대해서도 가르쳐야합니다. 사람들은 그 도구가하는 일에 대한 모든 것을 알고있을 때 도구를 사용해야합니다. 그렇지 않은 경우, 재난이 일어나기를 기다리는 것입니다. Knuth의 인용문을 통일성과 같은 복잡한 것으로 항상 정당화 할 수는 없습니다.
jokoon

답변:


66

Uinty3D의 주요 "프로"는 그것이 빠르다는 것입니다. 나는 여기서 성능이 아니라 개발 속도에 대해 이야기하고 있습니다. 당신은 :

  • 통합 자산 파이프 라인. 리소스 하위 시스템에 시간을 소비 할 필요가없고, 쓰기 및 수정을위한 버그가있는 가져 오기 루틴이 없습니다. 파일을 폴더에 놓기 만하면 작동합니다.
  • 통합 레벨 편집기. 레벨 툴에 시간을 소비 할 필요가 없습니다. 바로 비즈니스에 집중하십시오.
  • 훌륭한 조정 및 디버깅 지원 : 모든 게임 플레이 변수는 재생하는 즉시 표시되며 즉시 변경할 수 있습니다.이 모든 것은 한 줄의 코드를 작성하지 않고도 가능합니다. 언제든지 게임을 일시 중지하거나 한 번에 한 문장 씩 코드를 단계별로 실행하십시오.
  • 기성품 구성 요소의 포괄적 인 라이브러리. 렌더링, 사운드, 물리, 컨트롤-많은 "boilerplate"코드가 이미 작성되었습니다.
  • 스크립트 호스트로서의 모노. 언어로서 C #의 장점에 대해 논쟁 할 수는 있지만 Mono의 기본 클래스 라이브러리는 다양한 기능을 제공합니다. 컬렉션, I / O, 멀티 스레딩 및 미묘하게 표현적인 LINQ는 모두 개발 속도를 상당히 높여줍니다.

또한 Unity3d는 여러 플랫폼에서 정말 좋습니다. 물론 Windows .exe 게임을 만든 다음 iPhone에서 마술처럼 "작동"할 수는 없습니다. 그러나 유니티는 그와 매우 가까워집니다. 필요한 것은 "포팅"이상의 "트위 킹"입니다.

물론 어떤 경우에는 Unity3D가 이상적이지 않습니다. 일부 LAN 피어 투 피어 재생에는 Unity에 통합 된 네트워크 멀티 플레이어가 적합하지만 중앙 서버가 필요한 것은 거의 모든 네트워크 코드를 처음부터 작성해야합니다. 유니티의 GUI 시스템은 매우 기발하고 느리기 때문에 게임 내에서 복잡한 GUI를 만드는 것은 쉽지 않습니다. 그러나 내가 본 다른 모든 게임 GUI 시스템도 고통스럽기 때문에 Unity의 시스템은 전반적으로 그렇게 나쁘지 않습니다.

물론 Unity3D는 라이브러리 / 소스 코드 만 제공하는 OGRE와 같은 "게임 엔진"보다 유연성이 떨어집니다. 그 성능은 정확히 최고가 아니며 스크립팅 샌드 박스 만 있기 때문에 영리한 저수준 핵을 사용하여 개선 할 수는 없습니다. 예를 들어 Unity의 빌트인 트리 렌더러가 어떤 이유로 든 만족하지 못하면 직접 작성할 수 없습니다 (글쎄, 가능하지만 스크립트를 통해 작동하고 아마도 너무 느리고 번거로울 것입니다) ). 그럼에도 불구하고 약간의 성능 저하를 염려하지 않는 한 Unity로 무엇이든 할 수 있습니다.

그러나 Unity3D의 가장 큰 "콘"은 소스 제어입니다. 이미 언급했듯이 Unity의 자체 애셋 서버 비용은 꽤 비쌉니다. 정말 힘들어요. 심지어 분기가 없습니다. Unity3D는 이론적으로 타사 SCM 시스템을 지원하지만,이를 사용하는 것도 위험합니다. SVN 커밋 후 가져 오기 설정이 "마 법적으로"변경되거나 Perforce를 사용한 후 모든 객체의 매개 변수가 사라졌습니다. 이 모든 것을 해결할 수는 있지만 어쨌든 Unity3D + 소스 제어 = 고통입니다.

따라서 실제로 귀하의 질문에 대답하십시오. 나는 Unity3D는 최고 중 하나, 그렇지 않으면이라고 생각 가장하는 "작은"게임에 대한 게임 엔진의 선택. 특히 프로토 타입 단계에서.

즉, 우리가 교육 프로젝트에 대해 이야기하고 있다면 반대하는 것이 좋습니다. 게임의 작동 방식을 배우려면 가능한 한 낮은 수준에서 게임을 작성하는 것이 좋습니다. 게임 엔진은 훌륭한 도구입니다. 그러나 최대 이익을 위해 그것을 사용하려면 그들이 어떻게 작동 하는지 , 그렇게 작동 하는지 이해해야합니다 . 그리고 이것을 배우는 가장 좋은 방법은 결국 자신의 게임 엔진을 작성하는 것입니다.


3
"통합 자산 파이프 라인. 리소스 서브 시스템에 시간을 소비 할 필요가없고, 작성 및 수정을위한 버그가있는 가져 오기 루틴이 없습니다 : 파일을 폴더에 놓기 만하면 작동합니다."
nkint

7
"Unity3D의 가장 큰 단점은 소스 컨트롤입니다."
nkint

2
"우리가 교육 프로젝트에 대해 이야기하고 있다면 반대하는 것이 좋습니다."
nkint

"tree gen"문제에 대해 필자는 C #에서 C ++ 트리 생성기를 작성하여 .dll에 넣고 관리되는 C ++로 처리 할 수 ​​있다고 생각합니다. 따라서 이론적으로 자신의 "엔진 픽스"에 통일 할 수 있습니다.
daemonfire300

Unity GUI 2.0 시스템은 "텍스트로 rect를 렌더링"하는 것 외에는 다른 것이 아니라는 점을 인정하지만 확장이 매우 쉽습니다. 매우 가벼운 오픈 소스 인 @AffinityUI 또는 기타 Unity UI 프로젝트를보고 UI 시스템을 가치있게 만드십시오.
daemonfire300

28

나는 당신의 목록에 댓글로 시작합니다 :

  • 스크립팅은 프로그래머가 아닌 사람에게만 이익이 아닙니다. (좋은) 프로그래머가되는 것은 언어를 아는 것 이상으로 문제를 해체하고 특정한 방식으로 생각하는 방법을 아는 것입니다. 스크립팅 언어를 사용하면 프로그래머가 높은 수준의 비판적 사고 기술을 활용하여 동등한 결과를 생성하는 데 필요한 시간보다 짧은 시간에 더 강력하고 흥미로운 결과를 생성 할 수 있으며 일부 언어 (C ++ 그림에 힘을 실어줍니다.

  • 멀티 플레이어 지원 (또는 부족)은 프로젝트에 필요한 경우에만 문제가 될 수 있습니다.

  • 나는 "독점적"이 사기라는 것을 알지 못한다. 이것이 학교 프로젝트라면 아마도 당신이 사용하는 프레임 워크의 소스 또는 다른 것에 해킹하는 데 시간을 소비하고 싶지 않을 것입니다. 게다가 DirectX도 독점적입니다.

  • 더 높은 수준의 프레임 워크 나 Unity와 같은 도구를 사용하는 데 아무런 문제가 없습니다. "처음부터 게임을 만드는 것"은 성과가 아닙니다. "처음부터 무엇을 생각하십니까?" 여전히 다른 사람의 그래픽 API를 사용하게됩니다. 다른 사람의 런타임 (C조차도 런타임 라이브러리가 필요합니다). "게임 만들기"는 "유용한 도구를 사용하지 않고 게임을 만드는 것"이 ​​아니라 존중을 얻는 것입니다.

  • "쿨한"C ++은 약간 주관적입니다. 이 언어는 업계 전문가가 자주 사용하지만 생각할만한 이유가 아닐 수도 있습니다. 언어로서, 그것은 나이를 나타 내기 시작했으며 더 현대적인 옵션에 비해 매우 번거로울 수 있습니다. 어쨌든 언어는 도구 일 뿐이며 훌륭한 프로그래머는 비교적 쉽게 새로운 언어를 선택할 수 있어야합니다.

학교 프로젝트에 Unity를 사용하면 얻을 수있는 가장 큰 장점은 이미 많은 인프라 작업이 포함 된 높은 수준의 프레임 워크라는 것 입니다. 이렇게하면 기초를 세우지 않고 게임 에 집중할 수 있습니다 . 아마도이 게임을 제작할 수있는 창이 상대적으로 제한적이므로 기존 도구를 더 많이 활용할수록 게임과 관련된 논리 나 자산을 생산하는 데 더 많은 시간이 걸리고 게임의 모양과 느낌을 갖게됩니다 더 완벽한-Unity에는 학습 곡선이 있지만 훨씬 더 빨리 처리 할 수 ​​있습니다.

단점은 특히 Unity의 워크 플로와 환경이 자신에게 적합하지 않고 다시 사용하지 않기로 결정한 경우 양도 할 없는 지식이 포함 된 특정 도구를 배우는 데 시간을 허비 할 수 있다는 것입니다. . 또한 Unity에는 가장 명확한 2D 워크 플로우 가 없습니다 . 3D 게임에 중점을두고 있습니다. 3D 게임은 아트 애셋의 모든 오버 헤드와 관련이 있습니다. 하지만 저는 여러분이 묘사 한 학교 프로젝트의 경우 Unity가 좋은 선택이라고 생각합니다.


13
"게임 만들기"는 "유용한 도구를 사용하지 않고 게임을 만드는 것"이 ​​아니라 존경을받는 것입니다.
nkint

2
"Unity와 같은 고급 프레임 워크 또는 도구를 사용하는 데에는 절대로 아무 문제가 없습니다."처음부터 게임을 만드는 것은 "성과가 아닙니다."처음부터는 무엇을 생각하십니까? " 예를 들어, Uncharted 2는 심지어 사내에서 수정 된 그래픽 API를 사용하는 등 새로운 기술을 만드는 사람들이 가능한 한 낮은 수준으로 가고 있음을
기억하십시오

1
컴퓨터 그래픽의 최첨단에 서기를 원하는 개발자는 가장 낮은 수준에 초점을 맞추고 게임으로 자체 엔진을 만들어야합니다. 그러나 이것은 모든 게임 개발자의 약 1 %입니다. 회사가 Uncharted 1만큼 진보 된 게임을했다면 Uncharted 3가 나올 당시에 기존 프레임 워크를 사용했을 수도 있습니다 (단일 Unity 일 필요는 없음). 질문은 : 당신은 미지의 4를 만들고 있습니까?
Katana314

9

Unity의 주요 문제 중 하나는 소스 컨트롤입니다. 팀에서 일하고 있지 않다면 이것이 중요하지는 않지만 (아마도) 그럴 수는 없습니다.

Unity Asset Server를 사용할 수 있지만 1) Unity Pro ($ 1500) 및 2) 좌석 당 Asset Server 라이센스 ($ 500)가 필요합니다. 나는 당신이 어떤 종류의 교육 할인을받을 수 있다고 가정하지만 무료는 아닙니다.

또는 SVN과 같은 것을 Unity와 함께 사용할 수 있습니다. 제대로 지원하려면 여전히 Unity Pro가 필요합니다.

SVN에 비프로 버전의 Unity를 실제로 확인하고 완벽하게 작동 할 것으로 기대할 수는 없습니다. GUID를 자산 등에 바인딩하는 메커니즘은 정확히 SCM에 안전하지 않습니다.


솔직히 말하면 멀티 플레이어 기능은 꽤 괜찮습니다. 이론적으로는 네트워크보기를 사물에 연결하고 복제를 올바르게 설정하기 위해 직렬화 할 항목을 알려 주기만하면됩니다. 거기에서 다른 피어에 연결하고 설정하는 UI 작업이 있습니다. 그러나 대부분 피어 투 피어입니다. 헤드리스 모드에서 유니티를 실행하는 클라이언트 / 서버 프로그래밍을 할 수는 있지만 엉망이 아닙니다. 그러나 사람 A가 사람 B의 화면을 돌아 다니는 것은 매우 쉽고 빠릅니다.

또한 C #은 내가 생각 하는 한 긍정적 입니다. LINQ는 매우 표현력이 뛰어납니다. 적절한 예외 처리 및 가비지 수집이 있습니다. C ++보다 델리게이트, 람다, 인터페이스 및 일반적인 지원과 같은 훨씬 더 현대적인 패러다임이 있습니다. ( 편집 : 이것은 분명히 논란의 여지가 있습니다. 제 요점은 C #은 나쁜 언어가 아닙니다. 언어 대 C ++의 장단점에 대해 오랫동안 토론하고 싶지 않습니다.)

그러나 Unity 사용의 가장 큰 장점은 아마도 예술 파이프 라인 일 것입니다. 폴더에 PSD 또는 Max 파일 (3ds Max가 설치되어 있다고 가정)을 가져 와서 가져올 수 있습니다.


3
@DeadMG, 그렇습니다. 예, 부스트, 템플릿 메타 프로그래밍 등에 대해 알고 있지만 C #이 더 현대적인 언어라는 것을 알았습니다.
Tetrad

3
@DeadMG 요점은 C ++이 많이 사용되는 많은 사용 사례에서 C #이 매우 매끄 럽다는 것입니다. C ++이 그런 일을 할 수는 없습니다.
Nate

3
그의 의견에 동의하지 않을 수있는 유일한 것은 'C ++보다 더 일반적인 지원'이었습니다.
Kylotan

1
@Kylotan "for (vector (vector <int >> :: iterator iterator = scores.begin (); iterator! = scores.end (); iterator ++) {"VS "foreach (var scoreset in scores)". .yup, 저는 C #입니다.
Katana314

3
@ Katana314 물론 C ++ 11에서 : for ( auto x : xs ).
Eric

6

업데이트 : Unity는 이제 무료 버전에서도 이러한 모든 기능을 제공하므로 아래 답변을 무시하십시오.


주목할만한 점은 Unity3D의 무료 버전을 사용하는 경우 후 처리 셰이더 (블룸과 같은) 및 훨씬 더 중요한 동적 그림자를 포함한 여러 가지 효과를 사용할 수 없다는 것입니다. 이것들은 분명히 프로젝트의 워크 플로우에 큰 영향을 미치지는 않지만 엔진으로 무료로 얻을 수있는 것에 제약을 둡니다.


1
이는 더 이상 정확하지 않으므로 업데이트하거나 제거해야합니다.
MichaelHouse

@ Byte56 감사합니다. 앞으로는 댓글을 남기지 않고 이전 게시물을 직접 업데이트 할 수 있어야합니다.
Michael Younkin

이 답변을 삭제하기 위해 깃발에 응답하고 더 이상 정확하지 않다고 업데이트하도록 제안하지 않았습니다. 정확한 업데이트 또는 제거를 제안합니다. 이 답변은 현재 Unity 3D의 장단점에 대한 답변으로 선택되지 않습니다. 그래도 저장 방법을 알아낼 수 있다고 확신합니다. (Unity가 제공하는 모든 기능과 무료로 제공되지 않는 기능을 포함하도록 업데이트 할 수 있습니다).
MichaelHouse

3

Nevermind의 대답은 사물을 철저히 다루지 만 소스 제어 측면에서 투쟁하기 만하면 실제로 몇 가지 문제를 찾아내는 것을 배우면 실제로 그렇게 끔찍한 것은 아닙니다.

  • 첫째, 예 애셋 서버는 비싸고 기본 용도를 제외하고는 모두 끔찍합니다. 주요 이점은 Unity에 통합되어 있으며, 사용하기 쉽고 간단한 프로젝트에서 가치가 있지만 더 큰 프로젝트 (일반적으로 AS 예산이있는 프로젝트)의 경우 유연성이 충분하지 않습니다.
  • 외부 버전 관리로 넘어가려면 메타 파일을 다른 자산처럼 취급해야하며 항상 버전 관리에 추가 / 업데이트해야합니다. 이 작업을 수행하지 않으면 Nevermind의 설정 사라짐 시나리오에서 발생한 것일 수 있습니다.
  • 마지막으로, Unity의 모든 버전 제어 시스템 (에셋 서버 포함)과 함께 이진 자산으로 작업 할 때는 팀 커뮤니케이션이 필수가되어 서로의 작업이 엉키지 않도록합니다.

이 점에 대해 더 자세히 알고 싶다면 꽤 큰 Unity 프로젝트에 대한 경험을 바탕으로 Unity에서 git을 사용하는 것에 대해 얼마 전에 게시했습니다 .http : //goo.gl/ivJVR


좋아, 와우, 실례합니다. 방금 2011 년에 이것이 요청 (및 답변)되었음을 알았습니다! 이번 주 stackexchange gamedev 뉴스 레터에 팝업이 추가되어 추가 했습니다 .
FlintZA

SE에서 "네크로"와 같은 것은 없습니다. 사례, 내 의견. : P
Cypher

2

사실은. 멀티 플레이어가 지원됩니다. 단순히 게임을 실행하려는 서버를 선택하는 것입니다.

현재 시장에서 가장 인기있는 제품은 "SmartFox Server"로, 몇 가지 패키지를 제공하며 모두 무료입니다. 각 패키지가 특정 금액의 플레이어를 "무료"로 허용하므로 특정 수량의 플레이어를 보유하려는 경우에만 무료입니다.

업그레이드하기로 선택한 경우 인디 개발자에게는 가격이 매우 가파 릅니다. 따라서 ... 장기적으로 서버에 플레이어가 많은 경우 무료 전체 게임으로 Download.com과 같은 사이트에 게임을 업로드하는 대신 게임 대금을 청구해야합니다. 이는 일부에게는 문제가되지 않지만 대부분의 경우 서버에 2,500 달러의 비용이 들지 않습니다.

예를 들어-SmartFox pro는 20 명의 플레이어를 무료로 허용합니다. 업그레이드하려면 500 유로가 필요합니다. 500 유로는 미국에서 약간 더 많고 약 ​​600-700이며 100 개의 연결이 가능합니다.

다음 업그레이드는 최대 500 명의 플레이어를위한 것이며 1000 유로이지만 1000을 지불 할 필요는 없습니다.

따라서 전체 1000 대신이 아닌 500 유로 만 더 지불해야합니다. 마지막 업그레이드는 2,000 유로의 무제한 연결을 지원합니다. 거의 3,000 달러입니다.

500 개의 연결에서 업그레이드하면 1000 유로를 지불하고 100 개의 연결에서 업그레이드하면 1,5000 유로를 지불하고 물론 2,000 유로는 무료로 업그레이드 할 수 있습니다.

또한이 서버는 Unity로 설정하기가 쉽고 YouTube에서 정확하게 수행하는 방법에 대한 자습서 비디오가 많이 있습니다.


2005 년부터 SmartFox Server와 광범위하게 작업했으며 시간이 많이 걸립니다. 매우 안정적이고 성숙합니다.
PippoApps.com
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.