Unity에서 C #이 다른가요?


18

Unity는 다른 버전의 C #을 사용합니까, 아니면 모두 동일합니까? 일반적인 C #과 다르게 보이지만 거기에는 일정한 C # 요소가 있습니다.


4
어떤 차이점이 있습니까?
— Anko

나는 당신이 말하는 변경 사항이 C # 언어가 아닌 프레임 워크 차이점이라고 생각합니다. Unity3d에서는 C # 언어와 함께 .Net 프레임 워크 (Via Mono) 및 Unity 특정 프레임 워크 요소를 사용하고 있습니다.
— Mike B

아주 오래된 버전 일뿐입니다. 최신 버전의 C # 및 Mono를 원하고 사전 제작 된 엔진을 스크립팅하는 대신 프로그래밍하려는 경우 monogame.net
— Den

예를 들어 Unity에는 Math 클래스 대신 Math 함수에 Mathf 클래스가 있습니다. 다른 차이점이 있으면주의를 기울이지 않았지만 그 점이 눈에 띄었습니다.
— Alex

@Alex System.Math 는 여전히 사용 가능하며 실제로 UnityEngine.Mathf 보다 빠릅니다 . 따라서 Unity 버전을 사용하는 유일한 이유는 성능 저하로 많은 (float) 캐스트를 피하기 위해서입니다.
— FlintZA

답변:


9

다른 답변에서 언급했듯이 Unity 4.x는 Mono 2.6 기반 의 수정 된 버전의 Mono를 사용합니다.

Mono 2.6 관련 호환성 목록을 추적하지는 못했지만 대부분 .Net 2.0 과 호환됩니다.

일반적인 C #과 다르게 보이지만 거기에는 일정한 C # 요소가 있습니다.

귀하의 질문에 대한 의견 중 하나에서 언급했듯이 이는 언어 자체가 아닌 Unity의 특정 스크립팅 API 때문일 수 있습니다.

예를 들어, 일반적인 Unity 프로젝트의 많은 코드가 MonoBehavior라는 클래스의 하위 클래스에 포함되어 있습니다. Unity 에디터 환경에서 게임 오브젝트에 드롭되는 컴포넌트입니다. 이 아키텍처는 여러 가지 방법으로 일반적인 C # 코드와 다르게 보이는 C # 코드로 이어집니다.

  • Unity 4가 출시 될 때까지 이러한 오브젝트는 네임 스페이스에 포함될 수 없었으므로 항상 글로벌 네임 스페이스에 있습니다.
  • 공개 필드를 만들거나 SerializeField 속성을 사용하여 필드를 편집기 환경에 노출합니다. 그러나이 필드를 사용하는 사람은 거의 없습니다.
  • 유니티의 프라이버시와 케이스 컨벤션은 마이크로 소프트를 따르지 않으므로 "전통적인"C # 개발자에게는 이상하게 보일 수 있습니다.
  • 시작 및 업데이트와 같은 이러한 구성 요소에서 일반적으로 예상되는대로 재정의되지는 않지만 대신 리플렉션을 통해 액세스되는 여러 가지 특수 방법을 사용합니다.

실제로 Unity의 현재 C # 버전에서 놓친 가장 큰 C # 언어 기능은 비동기 및 관련 키워드 및 기능에 대한 지원입니다 . Unity의 비슷한 개념은 코 루틴 입니다. 이것들은 메인 스레드에서 실행되므로 진정한 비동기는 아니지만 오래 실행되는 코드가 여러 프레임에서 분리되도록합니다. 하위 레벨 멀티 스레딩은 여전히 ​​지원됩니다.


2
명확히하기 위해 asyncC #에서는 멀티 스레드와 마찬가지로 비동기가 아닙니다. 메인 스레드에서도 실행됩니다. 사용 관점에서 코 루틴과 비동기의 가장 큰 차이점은 코드가 실행되는 시간입니다.
— rhughes

감사. 예, async! = 멀티 스레드 방식이지만 비동기식을 사용하여 멀티 스레드 작업을 숨기거나 상호 작용하는 것이 코 루틴과 동일하게 수행하는 것보다 훨씬 일반적입니다. 나는 매우 유사한 수준의 유연성을 얻는 스레드 풀에서 델리게이트 작업을 시작하는 래퍼 코 루틴을 작성했지만 여전히 "적절한"비동기 지원이 마음에 들지 않습니다. 물론 괜찮은 현대식 GC가 더 나을 것입니다.)
— FlintZA

21

Unity 4 는 C # 언어를 포함하여 .NET 프레임 워크의 전체 구현 인 Mono 2.6을 사용 합니다.

어떻게 다른지 잘 모르겠지만 Unity는 여러 언어를 지원하며 모든 언어가 동일한 Mono 런타임에서 작동한다는 점을 명심하십시오. C #과 UnityScript를 혼동 할 수 있습니까?


10
또한 Mono 2.6은 언어 기능면에서 C # 3.0과 같습니다. Mono 2.6.1은 C # 4.0 기능을 추가하기 시작했습니다.
— Cooper

다음은 v4.1.2부터 Unity의 모노 호환성에 대한 개요입니다.
— Kelly Thomas

: 그것은 단지 작은하지만 주요 버전 증가하지 지연 mono-project.com/Release_Notes_Mono_3.4
— 덴

3

Unity는 일반 C #을 사용합니다.

그런 다음 Unity에서 C #을 작성할 때 많은 라이브러리를 사용하지만, 아는 한 C #에서 가능한 모든 것은 아래 나열된 차이점을 제외하고 Unity에서 가능합니다.

  • Windows Forms 및 ASP와 관련된 .Net의보다 구체적인 영역은 Unity를 통해 제한되지 않습니다.

  • 편집 및 컴파일 타임 오류에 Visual Studio를 사용할 수 있지만 Unity IDE에서 빌드하고 실행해야합니다.

  • Unity는 .Net의 오픈 소스 구현 인 Mono를 사용하므로 약간의 차이가 있습니다.


두 번째 글 머리 기호를 확장하려면 UnityVS 를 사용하여 Visual Studio 내에서 디버깅 할 수도 있습니다 . Microsoft는 최근 개발자를 인수하여 가까운 시일 내에 플러그인을 무료로 출시 할 예정입니다.
— mrohlf

죄송하지만 일반 C # 근처에는 없습니다.
— Alper

0

Unity에서 사용하는 C # 버전이 "일반"C #과 다른지 여부에 대한 질문은 다른 게시물에 의해 답변되었습니다. 명시 적으로 유니티의 특정 (높은 비주얼 스튜디오 2010, 즉 C # 4.0) 내가 직장에서 C # I 사용을 비교할 때 내가 발견하는 유일한 작은 차이를 공유하는 등 일반 버전과 다를 수 있습니다 요소와 C #을 요구하고 있기 때문에 어떤 함수 정의에서 매개 변수에 기본값을 사용할 수 없다는 것입니다. 최신 버전의 C #을 사용하려면 프로젝트를보다 신중하게 설정해야합니다. 자세한 설명 은 이 링크를 참조하십시오 .

편집 : 나는 이것이 많은 사람들에게 오해라는 것을 알고 있기 때문에이 대답을 남깁니다.


이 기능은 버전 4.0에서 C #에만 추가되었으며 이전에는 없었으므로 "C #"과 "차이"라고 할 수는 없습니다.
— 또는 매퍼

1
C # 버전 4는 2010 년에 출시되었습니다. 많은 사람들이이 프로그램을 사용하고 있고 Unity에서 프로그래밍 할 때의 부재 감을 느낍니다.
— Nessuno

기본값을 사용할 수 없습니까? 나는 확신하고있다.
— NPSF3000

글쎄, 시도하고 기본값을 사용할 수 없다는 메시지가 컴파일되지 않습니다. 특별한 버전의 Unity를 사용하고 있습니까? 프로 버전처럼?
— Nessuno

1
기본값을 절대적으로 사용할 수 있으며 pro 또는 not-pro와는 아무런 관련이 없습니다. Unity와 MonoDevelop는 이상한 관계입니다. MonoDevelop에서 자동 생성 된 프로젝트는 종종 기본값을 지원하지 않는 이전 버전의 C #으로 설정됩니다. 그러나 프로젝트에서 해당 설정을 변경하면 제대로 작동합니다. MonoDevelop에서 컴파일을 무시하고 Unity로 돌아 가면 Unity가 기본 파라미터에 대해 불평하지 않습니다.
— MrCranky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.