게임 엔진 또는 컨텐츠 제작 도구.
유니티는 눈에 보이는대로 사물을 배치하고, 필요한 컴포넌트를 추가함으로써 객체를 확장할 수 있다. 에디터의 기본 기능 뿐 아니라, 사용자들이 만든 플러그인으로 에디터 기능을 확장할 수 있다.
게임 엔진이므로 게임의 필수적인 부분을 제공한다.
게임의 시간을 제어한다거나, 렌더링 정책을 결정하거나, 물리연산을 제공한다.
스크립트를 통해 Unity가 제공하는 API를 이용하면 된다.
C# extension 설치 전에는 code highlighting 조차 동작하지 않지만, 설치 후 code highlighting 동작은 하나.. intellisense 동작은 하지 않는다. (이미 plugin 이슈로 등록됨)
위 스펙 기준 최신 버전(4.4SR1 - 4.4.2.11)의 Mono Framework 설치하면 해결.
물체의 가속도
Rigidbody의 질량(mass)에 영향을 받지 않음
유니티 메뉴얼에서는 가속도을 수정하는 것은 현실적이지 않은 결과가 나올 수 있으므로 직접 변경하지 말 것을 권고하고 있다.
In most cases you should not modify the velocity directly, as this can result in unrealistic behaviour
ref. https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html
물체에 힘 만큼 밀어내는 기능을 함
Rigidbody의 mass에 영향을 받음
사용자로부터 입력값을 얻음
Method | Desc |
---|---|
Input.GetAxis("Horizontal") | 키보드 화살표 왼쪽, 오른쪽 키 |
Input.GetAxis("Vertical") | 키보드 위, 아래 키 |
Input.GetButtonDown("Fire1") | 마우스 왼쪽 버튼 |
Input.GetButtonDown("Jump") | 키보드 스페이스 바 |
Scene 내에 존재하는 물체들을 획득하는데 사용
Method | Desc |
---|---|
Find(string) | 오브젝트 이름으로 게임 오브젝트를 획득 |
충돌 시 발생하는 이벤트 함수
다음을 만족해야 충돌 이벤트가 발생한다:
충돌 시 발생하는 이벤트 함수 Is Trigger 허용시 충돌하더라도 물리연산이 일어나지 않는다.
다음을 만족해야 충돌 이벤트가 발생한다:
오브젝트가 많아지는 경우 물리연산이 모두 발생하면 연산이 많아지므로 주로 충돌 여부만 체크할 수 있도록 하기 위해서 사용한다.
Sprite Packer?
영상을 따라 Atlas를 생성하려고 하였으나 pack 버튼을 눌러도 아무 반응이 없음.
Assets/Resources 폴더 내에 있는 이미지들은 Atals를 생성할 수 없음. 이는 의도 된 것으로
Resources 폴더 내에 있는 리소스들은 빌드 시 유니티가 자동으로 가져오므로 Atlas를 생성하는 경우 두 번 불러오는 것이므로 의도적으로 막아 놓은 것
ref.
안드로이드 빌드를 기준으로 함
/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -executeMethod AndroidBuilder.PerformBuild -logFile /dev/stdout
/Applications/Unity/Unity.app/Contents/MacOS/Unity
: Mac에서 유니티 설치 시 어플리케이션 위치.
-batchmode
로 실행하지 않으면 GUI 모드로 실행 됨.
-quit -batchmode
: GUI 모드로 실행하지 않고 터미널에서 작업 함. 완료 시 종료. (-quit
)
-executeMethod
: 유니티가 지원하는 값이 아닌, 실행 할 스크립트 메소드.
위에서는 AndroidBuilder
클래스의 PerformBuild()
메소드를 실행 시켰다.
즉, 유니티에서 사용하는 스크립트 언어로 빌드 정보를 직접 작성해야 한다.
아래는 빌드 스크립트 예시 - C# :
using UnityEditor;
/// <summary>
/// 안드로이드 빌더
/// </summary>
class AndroidBuilder {
/// <summary>
/// 파라미터 파싱, 인자에 부여 된 값을 반환
/// </summary>
/// <param name="name">인자 이름</param>
/// <returns>인자의 값, 없는 인자라면 null</returns>
private static string GetArg(string name) {
var args = System.Environment.GetCommandLineArgs();
for (int i = 0; i < args.Length; i++) {
if (args[i] == name && args.Length > i + 1) {
return args[i + 1];
}
}
return null;
}
/// <summary>
/// 빌드 실행
/// </summary>
static void PerformBuild () {
string output = GetArg("-o");
output = "./" + (output == null ? "out.apk" : output);
string[] scenes = {"Assets/Scenes/SceneStart.unity", "Assets/Scenes/SceneGame.unity"};
BuildPipeline.BuildPlayer(scenes, output, BuildTarget.Android, BuildOptions.None);
}
}
-logFile
: 로그 파일 위치. 지정 시 생성됨. 위에서는 standard out으로 설정함. 즉 터미널에서 출력 된다.