유니티:코딩기초: 두 판 사이의 차이
보이기
| (같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
| 1번째 줄: | 1번째 줄: | ||
{{유니티}} | {{유니티}} | ||
== 개요 == | ==개요== | ||
* 기본적인 동작은 C#이나 자바 코드로 동작한다.(객체 지향 언어를 사용한다. 추상적 공통 속성을 클래스로 지정하고 객체를 만들어 이들끼리 상호작용 하는 것이 주 방식) | |||
* | |||
=== 구조 === | ===주의=== | ||
처음 만들면 다음과 같은 것들이 생긴다. | |||
* 코드는 저장 해야 유니티에 반영된다. | |||
* 스크립트 파일을 만들면 자동으로 클래스명이 만들어지는데, 나중에 파일의 이름을 바꿔도 클래스명이 자동으로 바뀌진 않는다. 이름을 바꿀 땐 클래스명도 함께 바꾸어주어야 함에 유의.(파일명과 클래스명이 다르면 제대로 작동하지 않는다.) | |||
===구조=== | |||
처음 만들면 다음과 같은 것들이 생긴다.<syntaxhighlight lang="c#"> | |||
using UnityEngine; // 네임 스페이스 | |||
public class Coding : MonoBehaviour | |||
{ | |||
void Start() | |||
{} | |||
void Update() | |||
} | |||
</syntaxhighlight> | |||
{| class="wikitable" | {| class="wikitable" | ||
! | !요소 | ||
!설명 | !설명 | ||
|- | |- | ||
|using | |using | ||
|사용할 라이브러리를 지정하여 가져온다. | |사용할 라이브러리를 지정하여 가져온다. using 뒤의 값은 네임스페이스로, 해당 네임스페이스에 존재하는 코드들을 가져와 사용한다. | ||
|- | |||
|public | |||
|모두가 공유하는 무언가로 사용하겠다는 것. | |||
{| class="wikitable" | |||
!접근제한 | |||
!설명 | |||
|- | |||
|public | |||
|모두에게 공개 | |||
|- | |||
|private | |||
|비공개 | |||
|- | |||
|protected | |||
|자식 클래스에만 공개 | |||
|} | |||
|- | |||
|class | |||
| | |||
* 클래스를 정의하겠다는 것. 뒤에 따라오는 Coding은 클래스의 이름이다.(보통 첫 문자를 대문자로 표기) | |||
* 객체의 공통적인 특징을 지정하기 위해 사용.(이름, 나이, 키 등의 속성이 무엇이 있나 지정하는 것. 플레이어의 클래스, 몬스터의 클래스를 지정해 놓고 실제 객체를 만들 땐 값만 부여한다.) | |||
|- | |||
|MonoBehaviour | |||
|MonoBehaviour는 상위 클래스 이름. 상위 클래스에서 미리 정의된 기능을 사용하겠다는 의미. | |||
|- | |||
|void | |||
|함수의 결과값이 없다는 것.(이것저것 실행만 하고 결과를 따로 반환하지는 않는다.) | |||
|- | |- | ||
|Start() | |Start() | ||
|게임이 시작될 때 한 번 실행되는 메서드. | |게임이 시작될 때 한 번 실행되는 메서드. | ||
|- | |||
|Update() | |||
|매 프레임마다 실행되는 메서드. | |||
|} | |} | ||
==코딩팁== | ==코딩팁== | ||
Debug.Log("내용") 형태로 각각의 길에서 잘 실행이 되고 있는지 체크할 수 있다. | <code>Debug.Log("내용");</code> 형태로 각각의 길에서 잘 실행이 되고 있는지 체크할 수 있다. 이 메시지는 콘솔창에서 볼 수 있다. | ||
==클래스== | ==클래스== | ||
===클래스 만들기=== | ===클래스 만들기=== | ||
2026년 8월 30일 (일) 14:15 기준 최신판
- 유니티:개요
- 유니티:기본 조작
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:플레이어
- 유니티:카메라
- 유니티:UI
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
- 기본적인 동작은 C#이나 자바 코드로 동작한다.(객체 지향 언어를 사용한다. 추상적 공통 속성을 클래스로 지정하고 객체를 만들어 이들끼리 상호작용 하는 것이 주 방식)
- 코드는 저장 해야 유니티에 반영된다.
- 스크립트 파일을 만들면 자동으로 클래스명이 만들어지는데, 나중에 파일의 이름을 바꿔도 클래스명이 자동으로 바뀌진 않는다. 이름을 바꿀 땐 클래스명도 함께 바꾸어주어야 함에 유의.(파일명과 클래스명이 다르면 제대로 작동하지 않는다.)
처음 만들면 다음과 같은 것들이 생긴다.
using UnityEngine; // 네임 스페이스
public class Coding : MonoBehaviour
{
void Start()
{}
void Update()
}
| 요소 | 설명 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| using | 사용할 라이브러리를 지정하여 가져온다. using 뒤의 값은 네임스페이스로, 해당 네임스페이스에 존재하는 코드들을 가져와 사용한다. | ||||||||
| public | 모두가 공유하는 무언가로 사용하겠다는 것.
| ||||||||
| class |
| ||||||||
| MonoBehaviour | MonoBehaviour는 상위 클래스 이름. 상위 클래스에서 미리 정의된 기능을 사용하겠다는 의미. | ||||||||
| void | 함수의 결과값이 없다는 것.(이것저것 실행만 하고 결과를 따로 반환하지는 않는다.) | ||||||||
| Start() | 게임이 시작될 때 한 번 실행되는 메서드. | ||||||||
| Update() | 매 프레임마다 실행되는 메서드. |
Debug.Log("내용"); 형태로 각각의 길에서 잘 실행이 되고 있는지 체크할 수 있다. 이 메시지는 콘솔창에서 볼 수 있다.
프로젝트 창에서 우클릭, 스크립트 파일을 만든다. 유니티에선 기본적으로 하나의 클래스는 하나의 파일에 담긴다.
유니티에선.. Monobehavior 클래스를 상속받아서 만든다.
타입은 void 함수이다.
| 활용 | |||
|---|---|---|---|
| 활성화 | OnEnble() | 게임 오브젝트가 활성화 되었을 때. | 로그인 했음을 알린다. |
| 초기화영역 | Awake() | 게임 오브젝트가 최초로 생성될 때 실행되는 함수. 장면에 들어갈 때 발생한다. | 리젠되었음을 알린다. |
| Start() | 업데이트 영역으로 들어가기 전에 최초실행. | 리젠이 준비됨을 알린다. | |
| 물리연산영역 | FixedUpdate() | 물리연산을 하기 전에 실행되는 업데이트 함수. 1초에 50번 작동한다.(CPU많이 사용) | |
| 게임로직영역 | Update() | 게임로직을 프레임에 따라 업데이트한다. 환경에 따라 실행주기가 떨어질 수 있음. | 동작발생을 보여준다. |
| LateUpdate() | 모든 업데이트가 끝난 후 실행된다. 업데이트와 동일주기로 실행됨. | 로직의 후처리(경험치 획득) | |
| 비활성화 | OnDeisable() | 게임 오브젝트가 비활성화, 삭제될 때.(스크립트가 꺼질 때.) | 로그아웃 했음을 알린다. |
| 해체 | OnDestroy() | 게임 오브젝트가 지워질 때 실행되는 함수. | 데이터 삭제 메시지 |
코딩의 기본은 재사용에 있다. 혹은 다른 이들의 코드를 복붙하거나.
기본적으로 몬스터의 행동을 제어할 때, 몬스터 전체에 대한 코드를 만들고, 종족에 따라 다른 행동을 하게끔 상속된 코드를 만들고, 특수한 몬스터의 경우 또 위의 코드를 상속받아 만드는 방식으로 진행해야 편하다.
자세한 것은 C sharp:클래스 에서.
다음과 같은 상속이 가능하겠다.
| 클래스 | 설명 |
|---|---|
| 사람 | 렌더기능, 물리, 애니메이션, 체력 등 모두가 공유하는 속성. |
| 플레이어 | 조작, 스킬 등을 추가. |
| 몬스터 | 인공지능 등 추가.(사람의 애니메이션을 빼고, 다른 종류의 애니메이션 추가.) |
오히려 상속에 지나치게 의지해 수정이 어려워지는 경우도 있다. 때문에 유니티에선 필요한 기능을 컴포넌트에 가져가 붙이는 방식을 사용한다.
이러한 방식은 재사용 뿐 아니라 수정에 있어서도 발생할 오류에 대한 걱정을 덜 수 있다.(덩어리가 작으니까.)