찾기
내용으로 건너뛰기
추적
문서의 이전 판을 선택했습니다!
저장하면 이 자료로 새 판을 만듭니다.
미디어 파일
======스크립트들 사용하기 Using Scripts====== 이 페이지는 한 프로젝트에서 어떻게 스크립트들을 생성하고 활용하는지에 관한 짧은 소개입니다. 더 자세한 스크립팅 API에 관한 정보는 Scripting Reference를 참조하시길 바랍니다. 스크립팅을 통한 게임 플레이 생성에 관해 더 자세한 정보는 이 매뉴얼의 [[unity3d:Creating Gameplay]] 페이지를 참조하십시오. 유니티 내에서의 스크립팅은 ''JavaScript'', ''C#'', 또는 ''Boo''. 에서 간단한 행동 스크립트(behavior script)를 작성함으로써 이루어 집니다. 한 프로젝트에서 하나 또는 여러 개의 스크립팅 언어들을 같이 사용할 수 있고, 하나 이상을 사용한다고 해서 문제점이 생기지 않습니다. 특별히 언급되지 않는 한, 여기에 사용된 모든 스크립팅의 예들은 자바 스크립트로 사용됩니다. =====새로운 스크립트들 생성하기 Creating new scripts===== 메쉬들이나 텍스쳐들과 같은 다른 에셋 들과는 달리, 스크립트 파일들은 유니티 내부에서 생성될 수 있습니다. 새로운 스크립트를 생성하기 위해서는 메인 메뉴로부터 **Assets->Create->JavaScript**를 엽니다 (또는**Assets->Create->C Sharp Script** 또는 **Assets->Create->Boo Script**). 이는 //NewBehaviourScript// 라고 불리는 새로운 스크립트를 생성하고 ''프로젝트 뷰Project View'' 내의 선택된 폴더로 이 스크립트를 위치시킵니다. 프로젝트 뷰에서 아무 폴더도 선택되지 않으면, 스크립트는 루트 레벨 (root level) 에서 생성됩니다. {{:unity3d:Scripting-1.png}} 사용자는 프로젝트 뷰에서 스크립트를 더블클릭 해서 수정할 수 있습니다. 이는 유니티의 환경설정 (Preferences)에서 디폴트로 선택된 에디터를 실행시킬 것입니다. 사용자는 스크립팅을 유니티 안에서 직접 하는 것이 아니라, 어떤 외부 텍스트 에디터에서 하게 됩니다. 디폴트 스크립트 에디터를 설정하기 위해서는, **Unity->Preferences->External Script editor**에서 드롭다운 (drop-down) 아이템을 변경하십시오. 다음은 새롭게 생성된 비어있는 행동 스크립트(behavior script)의 콘텐츠들입니다: <file csharp>function Update () { } </file> 새로운 빈 스크립트는 혼자서는 할 수 있는 것이 많지 않습니다. 그러므로 몇몇 기능들을 추가해 보겠습니다. 스크립트들이 다음을 읽도록 변경합니다: <file csharp>function Update () { print("Hello World"); } </file> 실행 시에, 이 코드는 콘솔에 "Hello World"를 출력 print 할 것입니다. 그러나, 코드를 실행시키는 것은 아직 없습니다. 사용자는 스크립트를 실행 하기 위해 스트립트를 ''씬 Scene''에서 활성화된 ''게임 오브젝트GameObject''에 야 (attach) 합니다. =====스크립트를 객체에 붙이기 Attaching scripts to objects===== 위의 스크립트를 저장하고 **GameObject->Create Other->Cube**를 선택해서 씬에서 새로운 객체를 만드세요. 이것은 "Cube"라는 새로운 게임오브젝트를 생성하게 될 것입니다. {{:unity3d:Scripting-2.png}} 이제 스크립트를 프로젝트 뷰에서 큐브(씬이나 ''계층 뷰 Hierarchy View''나 상관 없음)로 드래그하세요. 사용자는 또한 큐브를 선택하고 **Component->Scripts->New Behaviour Script**를 고를 수도 있습니다. 이들 중 어떤 방법이든 스크립트를 큐브에 붙일 (attach) 수 있습니다. 사용자가 생성한 모든 스크립트는 **Component->Scripts** 메뉴에 보일 것 입니다. 만약 사용자가 해당 스크립트의 이름을 바꿨다면, 그 새 이름이 보일 것입니다. 만약 사용자가 큐브를 선택하고 ''인스펙터 Inspector''를 본다면, 사용자는 스크립트를 이제 볼 수 있음을 알 수 있습니다. 이는 스크립트가 붙여졌음을 의미합니다. {{:unity3d:Scripting-3.png}} 만약, 큐브를 선택하고 ''Inspector''를 본다면, 스크립트가 이제 보여짐을 알 수 있습니다. 이는, 스크립트가 부착되었음을 의미합니다. {{:unity3d:Scripting-4.png}} 만든 것을 테스트 하려면, ''Play''를 누르세요. Play/Pause/Stop 버튼들 옆에 "Hello World" 텍스트가 보이는 것을 알 수 있습니다. 그게 보이면 플레이모드에서 나오세요. {{:unity3d:Scripting-5.png}} =====게임오브젝트 다루기 Manipulating the Game Object===== //print()//스테이트먼트 statement 는 사용자의 스크립트를 디버깅할 때 매우 유용합니다. 하지만 자신이 붙어있는 게임오브젝트를 조정하지는 않습니다. 몇몇 기능을 추가하기 위해서 이 스크립트를 변경해 봅시다: <file csharp>function Update () { transform.Rotate(0, 5*Time.deltaTime, 0); } </file> 사용자가 스크립팅이 처음이라면, 혼란스러울 수도 있습니다. 다음은 꼭 이해해야 할 중요한 개념들입니다: - //function Update () {}// 는 유니티가 초 당 여러번 (프레임당 한번) 실행시키는 코드의 컨테이너 container 입니다). - //transform//은 게임오브젝트의 트랜스폼 컴포넌트 [[class-Transform|Transform Component]]로의 참조입니다. - //Rotate()//는 트랜스폼 ''컴포넌트 Component'' 안에 포함되어 있는 함수입니다. - 콤마 사이의 숫자들은 3D 공간에서 각 축(X, Y, Z) 주위의 회전 정도를 나타냅니다. - //Time.deltaTime//는 1초동안의 움직임을 균등하게 나누는 시간(Time) 클래스의 멤버로, 사용자의 컴퓨터가 얼마나 많은 초당 프레임 (frames per second) 들을 렌더링 하는지에 관계없이 항상 같은 속도로 회전할 것입니다. 그러므로, //5 * Time.deltaTime//는 초당 5 도를 의미 합니다. 그렇다면 이것의 의미는 이렇게 해석됩니다: “모든 프레임에서 이 게임오브젝트의 트랜스폼 컴포넌트를 초 당 Y축으로 5도가 움직여지도록 조금씩 회전시킨다” 사용자는 방금 //transform//에 접근했었던 것처럼 많은 다른 종류의 컴포넌트들에도 접근 access 할 수 있습니다. 사용자는 **컴포넌트 Component** 메뉴를 사용해서 게임 오브젝트에 컴포넌트들을 추가해야 합니다. 사용자가 쉽게 접근할 수 있는 모든 컴포넌트들은 GameObject Scripting Reference Page 의 ''변수들 Variables'' 항목에 리스트가 나열되 있습니다. 게임오브젝트들과, 스크립트들, 그리고 컴포넌트들 사이의 관계에 대한 더 많은 정보를 원하신다면 앞으로 건너 띄어 이 매뉴얼의 [[GameObjects]] 페이지나 [[unity3d:Using Components]] 페이지를 참조하시기 바랍니다. =====변수들의 파워 The Power of Variables===== 사용자가 방금 만든 스크립트는 항상 큐브를 초 당 5도씩 회전시킬 것입니다. 하지만 사용자는 초 당 다른 도수의 회전을 원할 수도 있습니다. 해당 수를 바꿔서 저장할 수도 있는데, 그러면 스크립트가 재컴파일 recompile 하도록 기다려야 하며, 결과들을 보기 위해 플레이 모드로 들어가야 합니다. 이것을 위해 훨씬 더 빠른 방법이 있습니다. 플레이 모드 동안 회전 속도를 실시간으로 실험해 볼 수 있는 매우 쉬운 방법이 있습니다. //Rotate()// 함수에 //5//를 타이핑 하는 대신에, //speed// 변수를 선언하고, 해당 함수에서 사용합니다. 스크립트를 다음과 같이 수정하고 저장하세요: <file csharp>var speed = 5.0; function Update () { transform.Rotate(0, speed*Time.deltaTime, 0); }</file> 이제 큐브를 선택하고, 인스펙트를 살펴보세요. 사용자의 //speed// 변수가 어떻게 보이는지 주목하세요. {{:unity3d:Scripting-6.png}} 이 변수는 이제 파일 익스플로러에서 파일을 이름 바꾸기 rename 하는 것처럼 쉽게 인스펙터에서 직접 변경이 가능합니다. 해당 변수를 선택하고 **리턴 Return**을 누른 후 값을 변경합니다. 사용자는 해당 값 위에 마우스 우클릭이나 옵션클릭(option-click)을 할 수 있고, 마우스를 위아래로 드래그 할 수도 있습니다. 해당 변수는 어느 때나 수정 가능합니다. 설사 게임이 실행 중이라도 가능합니다. Play 를 누르고, //speed// 값을 조정해 보세요. 큐브의 회전 속도는 즉시 변경될 것입니다. 하지만 플레이 모드를 나온 순간, 변경 사항들이 플레이모드로 들어가기 이전의 값으로 되돌아간 걸 확인 할 수 있습니다. 이 방식을 통해 사용자는 원하는 값을 찾기 위해 여러가지 값을 충분히 실험해 본 후 그 값을 완전히 적용시킬 수 있습니다. 인스펙터내에서 변수의 값을 변경하는 이같은 방법은 사용자가 하나의 스크립트를 많은 오브젝트들에 각각 다른 변수 값으로 재사용할 수 있음을 의미합니다. 만약 사용자가 스크립트를 여러 개의 큐브들에 붙인 후 각 큐브의 //speed//를 바꾸면, 이 큐브들이 비록 같은 스크립트를 사용함에도 각각 다른 속도로 회전할 것입니다. =====다른 컴포넌트들 접근하기 Aceessing Other Components===== 스크립트 컴포넌트를 작성할 때, 그 스크립트 안의 게임오브젝트 상의 다른 컴포넌트들에 접근할 수 있습니다. ====게임오브젝트 멤버들 사용하기 Using the GameObject members==== 사용자는 //게임오브젝트// 클래스의 어떤 멤버에도 직접 접근할 수 있습니다. 모든 //게임 오브젝트// 클래스 맴버들의 리스트는 여기서 (here) 보실 수 있습니다. 만약 지정된 클래스들중 어떤 하나가 컴포넌트로써 게임오브젝트에 붙게 (attach) 되면, 그 컴포넌트의 멤버 이름을 타이핑해서 직접 스크립트를 통해 해당 컴포넌트에 접근할 수 있습니다. 예를 들어, //transform//을 타이핑하는 것은//gameObject.transform//에 상응합니다. 사용자가 따로 다른 게임오브젝트를 특별히 참조 reference 하지 않는 이상, 컴파일러는 자동으로//gameObject//로 인식을 하게 됩니다. //this//를 타이핑하는 것은 사용자가 현재 작성하는 스크립트 컴포넌트에 접근하는 것입니다. //this.gameObject// 를 타이핑하는 것은 그 스크립트가 붙어 있는 게임 오브젝트를 말하는 것입니다. 사용자는 간단히 //gameObject//를 타이핑해서 같은 게임오브젝트에 접근할 수 있습니다. 논리적으로 //this.transform//라고 타이핑하는 것은 //transform//을 타이핑 하는 것과 같습니다. 게임오브젝트 멤버로서 포함되지 않은 컴포넌트로의 접근을 원하면, 다음 페이지에 설명된 //gameObject.GetComponent()//를 사용하셔야 합니다. 유니티에는 어떤 스크립트에서도 직접 접근할 수 있는 수많은 컴포넌트들이 있습니다. 예를 들어 사용자가 트랜스폼 컴포넌트의 //이동 Translate// 함수에 접근하려면, 단지 //transform.Translate()// 혹은 //gameObject.transform.Translate()//를 쓰면 됩니다. 이것은 모든 스크립트들이 게임오브젝트에 붙게 되므로 가능한 일입니다. 그래서 사용자가 //transform// 을 쓸 때, 사용자는 암묵적으로 스크립트 된 게임오브젝트의 트랜스폼 컴포넌트로 접근을 하게 되는 것입니다. 이것을 외부적으로 나타내고 싶다면, //gameObject.transform// 이라고 적으시면 됩니다. 어느 한 방법이 다른 방법보다 더 나은 것은 아니고, 이것은 스크립트를 짜는 사용자의 성향에 달려 있습니다. 암묵적으로 (implicitly) 접근 할 수 있는 모든 컴포넌트들의 리스트를 살펴보시려면 [[http://unity3d.com/support/documentation/ScriptReference/index.html|스크립팅레퍼런스(영문)]] 내의 [[unity3d:GameObject]] 페이지를 참조하시기 바랍니다. ====//GetComponent()//사용하기==== 컴포넌트들 중에는 //GameObject// 클래스의 멤버들로서 직접 참조되지 않는 컴포넌트들이 많이 있습니다. 그래서 암묵적으로(implicitly) 접근 할 수 없고, 외부적으로 명확히 (explicitly) 접근해야 합니다. 사용자는 //GetComponent("component name")// 를 호출하고 레퍼런스를 결과물에 저장함으로써 이것을 할 수 있습니다. 이는 사용자가 해당 게임오브젝트에 부착된 또 다른 스크립트에 참조 reference 를 만들고자 할 때, 가장 보편적으로 사용되는 방법입니다. 사용자가 //Script B// 를 작성하고 같은 게임오브젝트에 부착된 //Script A//에 레퍼런스를 만든다고 가정해 보십시오. 사용자는 해당 레퍼런스를 만들기 위해서 //GetComponent()//를 사용해야만 할 것입니다. 스크립트 B에서는 사용자는 간단히 다음과 같이 작성할 것입니다: //scriptA = GetComponent("ScriptA");// 그러면 스크립트 B내에서//scriptA.variableName//를 작성함으로 인해서 스크립트 A 변수들의 어떤 것들에도 접근을 할 수 있게 됩니다. //GetComponent()//의 사용에 관련해 더 많은 도움을 원하시면 [[unity3d:GetComponent() Script Reference page]] 를 참조해 주시길 바랍니다. =====이 시점으로부터 나아갈 방향은===== 에디터내에서 스크립트들을 사용하는 짧은 개요들을 살펴보았습니다. 더 많은 예들은, 유니티와 함께 소개된 [[unity:Tutorials]]을 참조하십시오. 또한, 스크립트 레퍼런스 내에 [[Path:../ScriptReference/index.html|Scripting Overview]] 페이지를 읽으십시오. 해당 페이지는 유니티를 사용한 스크립팅에 대한 더 많은 소개가 있고, 더 깊은 정보를 위한 참조들 혹은 참조 포인터들(pointers into the reference itself)을 포함합니다. 만약, 난관에 봉착하게 되면 [[http://answers.unity3d.com|Unity Answers]]나 [[http://forum.unity3d.com|Unity Forums]]를 방문하셔서 질문하시길 바랍니다. 누군가는 항상 기꺼이 도와 주려 할 것입니다 {{tag>유니티 unity}} * 출처: [[http://unitykoreawiki.com/index.php?n=KrMain.Scripting|유니티코리아위키]] (CC BY-NC-SA 2.0)
2+1?
이 필드는 비어 있도록 유지하세요:
저장
미리 보기
취소
편집 요약
참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 배포하는 데 동의하는 것으로 간주합니다:
CC Attribution-Noncommercial-Share Alike 4.0 International
연결문서
에셋 불러오기와 만들기(Asset Import and Creation)
게임플레이 제작 Creating Gameplay
유니티3D ( Unity3D )
인터페이스 배우기
The Component-Script Relationship
문서 도구
문서 보기
이전 판
연결문서
맨 위로
다크 모드로 보기
☀️
Toggle Menu
유니티3D ( Unity3D )
너두 고쳐두 됩니다.
사이트 도구
최근 바뀜
미디어 관리자
사이트맵
사용자 도구
등록
로긴
최근 수정된 문서
misuse_topical5
노박
unique_items
dinner_bell
deputy_beagle
ratslayer
one_for_my_baby
alerio
power_fist
제거됨
fixer
climb_ev_ry_mountain
companion
[장비 분실]
crashed_vertibird
brotherhood_t-51b_power_armor
marco
i_forgot_to_remember_to_forget
cateye