Unity Summary note
1. 그룹형 변수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
string[ ] 변수명 = { "A" , "B", "C" };
Debug.Log("맵F에 존재하는 몬스터");
Debug.Log( 변수명[0] ); // "A"출력
Debug.Log( 변수명[1] ); // "B" 출력
Debug.Log( 변수명[2] ); // "C" 출력
int[ ] 변수명 = new int[3]; // 3은 배열의 크기(길이)
monsterLevel[0] = 1;
monsterLevel[1] = 6;
monsterLevel[2] = 20;
Debug.Log("맵에 존재하는 몬스터의 레벨");
Debug.Log( 변수명[0] ); // 1출력
Debug.Log( 변수명[1] ); // 6출력
Debug.Log( 변수명[2] ); // 20출력
' ' '
- 1차원 리스트
List<자료형타입> 변수이름 = new List<자료형타입>();
- 2차원 리스트(2중 리스트)
List<List<자료형타입>> 변수이름 = new List<List<자료형타입>>();
' ' '
List<string> items = new List<string>(); // 리스트
items.Add("생명물약30");
items.Add("마나물약30");
items.Insert(idx, string) // index위치의 string값을 추가
items.Insert(idx, List) // index위치의 List값을 추가
Debug.Log("가지고있는 아이템");
Debug.Log(items[0]); // 생명물약30 출력
Debug.Log(items[1]); // 마나물약30 출력
items.RemoveAt(index); // index위치의 값을 제거
제목 | 내용 | 설명 |
---|---|---|
테스트1 | 테스트2 | 테스트3 |
테스트1 | 테스트2 | 테스트3 |
테스트1 | 테스트2 | 테스트3 |
2. 연산자와 비교연산자
(비교)연산자 | 설명 |
---|---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
% | 나머지 |
&& | and |
! | 부정 연산자 |
l l | or |
A > B | A가 B보다 큰 |
A >= B | A가 B보다 크거나 같은 |
A < B | A가 B보다 작은 |
A <= B | A가 B보다 작거나 같은 |
A? B : C | A값이 true면 B실행 아니라면 C실행 |
3. 비교 연산자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int fullLevel = 99;
int level = 90;
isFullLevel = level == fullLevel;
Debug.Log("용사는 만렙입니까?" + isFullLevel); //False출력
bool isEndTutorial = level > 10;
Debug.Log("튜토리얼이 끝난 용사입니까? " + isFullLevel); // False출력
int health = 30;
int mana = 25;
bool isBadCondition = health <= 50 || mana <= 20;
Debug.Log("용사의 상태가 나쁩니까? " + isBadCondition); // True출력
bool isBadCondition = health <= 50 && mana <= 20; // False출력
Debug.Log("용사의 상태가 나쁩니까? " + isBadCondition); // False 출력
string condition = isBadCondition ? "나쁨" : "좋음" // isBadCondition이 True이기때문에 나쁨출력
4. 조건문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
if (condition == "나쁨") {
Debug.Log("플레이어 상태가 나쁘니 아이템을 사용하세요 ");
}
else {
Debug.Log("플레이어 상태가 좋습니다.");
}
if (isBadCondition && items[0] == "생명물약30") { // isBadCondition이 나쁨이고 아이템의 index의 0이 생명물약30이면
items.RemoveAt(0);
health += 30;
Debug.Log("생명포션30을 사용하였습니다.");
}
if (isBadCondition && items[0] == "마나물약30") { // isBadCondition이 나쁨이고 아이템의 index의 0이 마나물약30이면
items.RemoveAt(0);
mana += 30;
Debug.Log("마나포션30을 사용하였습니다.")
}
switch (monsters[0]) {
case "슬라임"
case "사막뱀" // 사막뱀 슬라임 둘다 소형몬스터에 분류
Debug.Log("소형 몬스터가 출현!.");
break;
case "슬라임"
Debug.Log("소형 몬스터가 출현!.");
break;
case "슬라임"
Debug.Log("소형 몬스터가 출현!.");
break;
default: // 모든 case문을 통과후 실행
Debug.Log("??? 몬스터가 출현!.");
break;
}
5. 반복문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
' ' '
for (연산될 변수 ; 조건 ; 연산) {
로직
}
' ' '
// 1
for (int count = 0 ; count < 10 ; count++) {
health++
Debug.Log("붕대로 치료 중... " + health);
}
// 2
for (int index = 0; index < monsters.Length; index++) {
Debug.Log("이 지역에 있는 몬스터" + monsters[index]);
}
// 3
foreach (string monster in monsters) { // for x in a 랑 같은로직
}
6. 함수
전역변수 : 함수 바깥에 선언된 변수 지역 변수 : 함수 안에서 선언된 변수
1
2
3
' ' '
자료형타입 함수명(자료형타입 변수명)
' ' '
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 1
int Heal(int currentHealth){
Debug.Log("힐을 받았습니다. " + currentHealth);
return currentHealth;
}
// 2
void Heal(){
health += 10;
Debug.Log("힐을 받았습니다. " + health);
}
// 전투결과를 알려주는 함수
string Battle(int monsterLevel){
string result;
if (level >= monsterLevel)
result = "이겼습니다.";
else
result = "졌습니다.";
return result;
}
for (int index = 0; index < monsters.length; index ++) {
Debug.Log("용사는" + monsters[index] + "에게" +
Battle(monsterLevel[index]));
}
7. 클래스
class명 변수명 = new class명(); private : 외부 클래스에 비공개로 설정하는 접근자 public : 외부 클래스에 공개로 설정하는 접근자
8. Navigation
- Object
- Scene Filter
- All : 모든 오브젝트를 보여줍니다
- Mesh Renderers : Mesh Rendere 컴포넌트를 가지고있는 오브젝트만 보여줍니다
- Terrains : Terrain 오브젝트만 보여줍니다.
Object Name(Mesh Renderers Terrain) - Navigation Static = 네비게이션에 영향을받는 오브젝트로 설정
- Generate OffMeshLinks : ?
- Navigation Area : 선택된 오브젝트의 Area를 설정
- Bake
Agent Radius : NavMesh 위에서 움직일 대상(Agent)의 반지름값
Agent Height : Agent의 키
Max Slope 값 : NavMesh에 이동할 수 있는 길로 포함될 수 있는 경사로의 최대 각도
Step height : Agent가 올라갈 수 있는 오브젝트의 높이
Areas
Walkable과 비용 1인 Area와 Jump와 비용이 2인 각각의 다리가있을때 Agent는 가급적 비용이 적은 Walkable로 이동
2. Nav Mesh Agent
- Nave Mesh Agent
- Base Offset : 캐릭터와 Agent의 위치를 맞추기위한 값
- Steering
- Speed : Agent가 움직이는 속도 값
- Angular Speed : Agent가 회전하는 속도 값
- Acceleration : 가속도 값
- Stopping Distance : 목표와 어느정도 거리를 두고 멈출지 정하는 값
- Auto Braking : 목표의 도착하기전에 감속을 할것인지 정하는 값
- Obstacle Avoidance
- Radius : 오브젝트의 Radius 충돌값을 조절
- Height : 오브젝트의 Height 충돌값을 조절
- Quality : 장애물 회피 품질
- Priority : Agent간의 우선순위 (0 > 99)
- Fath Finding
-
- Auto Repath : Navigation Mesh에 변동이 생겼을때 다시 길을 찾을것인지 설정하는 값
- Area Mask : Area Mask
3. Nav Mesh Obstacle
- Shape : 장애물의 형태를 결정하는 옵션
- Center : 장애물의 크기를 설정하는 옵션
- Size : 장애물의 크기를 설정하는 옵션
- Carve : 실시간으로 장애물의 지나갈수없는 영역을 설정
- Move Threshold : 최소이동거리 (이 값보다 적게 이동하면 Carve를 새로 생성하지않음)
- Time To Stationary : 오브젝트가 멈췄다고 판정하고 새로운 Carve를 새로 개선할지 판정하는 정지 시간
- Carve Only Stationary : 정지한 상태에서만 Carve실행시킬건지 결정하는 값 – – – – – – – – – –
’ ‘ ‘ if (Input.함수명()) ‘ ‘ ‘
anyKeyDown : 아무 입력을 최초로 받을 때 True GetKeyDown : 지정된 키보드를 눌렀을때 GetKeyUp : 지정된 키보드에서 손을땟을때 GetKey : 지정된 키보드를 눌르고있을때
GetMouse : 마우스 버튼 입력을 받으면 True
GetMouseButtonDown(0) : 좌클릭을 했을때 // 0은 좌 1은 우 버튼 GetMouseButton(0) : 좌클릭을 눌르고있을때 GetMouseButtonUp(0) : 좌클릭을 땟을때
GetAxis : 수평, 수직 버튼 입력을 받으면 float x축 horizontal y축 vertical
GetButtonDown(“버튼명”) : (“버튼명”)을 눌렀을때 GetButtonUp(“버튼명”) : (“버튼명”)에서 손을땟을때 GetButton(“버튼명”) : (“버튼명”)을 눌르고있을때
Vector3함수들
단순 등속 이동 MoveTowards(현재위치,목표위치,속도) : 현재위치에서 목표위치로 정해진속도로 일정하게 이동
미끄러지듯이 감속 이동 SmoothDamp(현재위치, 목표위치, 참조 속도, 속도) : 현재위치에서 목표위치로 정해진속도로 부드럽게 이동 // 속도에 반비례하여 증가
- 선형 보간 이동 Lerp(현재위치,목표위치,속도) : smoothdamp보다 감속시간이 김 // 속도에 비례하여 증가 (최댓값 1)
- 구면 선형 보간 이동 SLerp (현재위치,목표위치,속도) : 포물선으로 이동
좌표
- TransformDirection // Local -> World
- InverseTransformDirection // World -> Local
Rotation
지정된 오브젝트를 회전시키는 방법 _yAngle += Time.deltaTime * _speed 1-1 // 절대 회전값 transform.eulerAngles = new Vecotr3(0.0f, _yAngle, 0.0f)
1-2 // +- delta transform.Rotate(new Vector3(00f, Time.deltaTime * 100.0f, 0.0f));
2 transform.rotation = Quaternion.Euler(new Vecotr(0.03, _yAngle, 0.0f));
3 transform.rotation = Quaternion.LookRotation(Vector3.[forward, back, right, left]);
4 transform.rotation = Quaternion.Slerp(transform..rotation[시작값], Quaternion.LookRotation(Vector3.forward), 1.0[0.1f~1.0f[speed]);
Quaternion
1
Quaternion.Euler(Vector3) // Quaternion을 Euler angle로 바꾸어주는 함수 <br/>
1
2
transform.rotation = new Vector3(0,10,0); == error
transform.rotation = Quaternion.Euler(0, 10, 0); == play
1
2
3
Quaternion.LookRotation(Vector3)
// Vector3의 방향으로 바라보는 좌표로 만들어준다
( 즉 Vector3의 방향으로 바라본다)
Object Componant
RigidBody : 중력의 영향을 받는다
- Mass : 값이 커질수록 충돌이 무거워진다
- Drag : 충돌 시 공기 저항의 크기
- Angular Drag : 토크로 회전할 때 공기 저항의 크기 (0이면 공기 저항 없음)
Is Kinematic : 외부 물리 효과를 무시 ( 체크일 경우)
- Interpolate
- None : 아무것도 적용 안 함
- Interpolate : 이전 프레임의 이동에 맞게 움직임을 부드럽게 처리함
- Extrapolate : 다음 프레임을 추정해 움직임을 부드럽게 처리함
- Collider : 물리효과를 받기 위한 컴포넌트
PlayerControls
- 정의 : 유저 input을 이용하여 플레이어 캐릭터를 제어하는 스크립트. (Input 시스템을 사용하여 키보드, 마우스등의 입력을 감지하고, 이를 이용하여 캐릭터를 움직이거나 상호작용할 수 있도록 도와줌)
- 활용: NavMeshAgent컴포넌트와 함께 사용하여 플레이어 캐릭터의 이동을 내비게이션 매쉬 위에서 자동으로 처리하거나 Animator 컴포넌트와 함께 사용하여 캐릭터의 에니메이션을 제어하는등 다른 컴포넌트들과 함께 사용하여 더욱 다양한 기능을 구현할 수있음
| 메서드 | 설명 | | —– | ——- | | Enable() | InputAction을 활성화 | | Disable() | InputAction을 비활성화 | | OnMoveInput() | 플레이어의 이동 입력을 처리하는 메서드 (이동 방향에 대한 벡터 값을 받아와 처리) | | OnJumpInput() | 플레이어의 점프 입력을 처리하는 메서드 | | OnInteractInput() | 플레이어의 상호작용 입력을 처리하는 메서드 | | OnLookInput() | 플레이어의 시점 변환 입력을 처리하는 메서드(마우스나 조이스틱의 값을 받아와 시점을 변환) | ————————————————————————————————————————–
Rigidbody rigid ;
- velocity : 현제 이동 속도
- AddForce(Vec) : Vec의 방향과 크기로 힘을 줌
- AddTorque(Vec) : Vec 방향을 축으로 회전력이 생김
- ForceMode : 힘을 주는 방식 (가속, 무게 반영)
오브젝트 재질 접근
1
2
3
4
5
6
MeshRenderer mesh ; # MeshRenderer의 mesh라는 변수를 생성
Material mat ; # material의 mat이라는 변수를 생성
mesh = GetComponent<MeshRenderer>();
mat = mesh.material;
mat.color = new Color(숫자); # 재질의 색상변경
물리충돌 이벤트
1
Collision : 충돌 정보 클래스 // 실제 물리적인 충돌로 발생하는 이벤트 - collision.gameobject.name == "object name" ; - OnCollisionEnter(Collision collision) : 물리적 충돌이 시작됬을 때 호출되는 함수 - OnCollisionStay(Collision collision) : 물리적 충돌이 지속될 때 호출되는 함수 - OnCollisionExit(Collision collision) : 물리적 충돌이 끝났을 때 호출되는 함수
// 지속적인 충돌로 발생하는 이벤트
- other.name == “object name” ;
- OnTriggerStay(Collider other) : collider에 계속 충돌할 때 호출되는 함수(즉 머물고 있을 때)
Ray
- RayCast : 오브젝트 검색을 위해 Ray를 쏘는 방식 (처음 닿는 한오브젝트)
- RayCastAll: 오브젝트 검색을 위해 Ray를 쏘는 방식 (모든 오브젝트)
- DrawRay() : 에디터 상에서만 Ray를 그려주는 함수
- RayCastHit : Ray에 닿은 오브젝트
- LayerMast : 물리 효과를 구분하는 정수 값
- distance : Ray에 닿았을 때의 거리
Camera
1
Camera.main : 메인카메라
- Camera.main.ScreenToWorldPoint(Vector3 position) : Vector3 position의 스크린 좌표를 월드좌표로 바꿔준다
- Camera.main.ScreendPointToRay(Vector3 position) : Vector3 position의 스크린 좌표를 Ray로 바꿔준다
- Camera.main.nearClipPlane : Clipping Planes의 Near값
UI
- EventSystem
- IBegineDragHandler : 이 스크립트가 붙은 오브젝트에다가 마우스 드래그를 시작 했을 때 호출
- IDragHandler : 이 스크립트가 붙은 오브젝트에다가 마우스 드래그 중인 동안 계속 호출
- IPointClickHandler : 마우스를 클릭했을때 호출
- Input Field
- Input Field Setting
- Font Asset, Point Size : InputField에 보여지는 폰트 에셋, 폰트 크기
- Input Field Setting
CharacterLimit : InputField에 입력할 수 있는 문자 개수 제한 (0 = 무제한)
Content Type : InputField의 속성 설정으로 용도에 맞게 모바일 가상 키보 드 종류, 입력할 수 있는 문자 종류 등을 제한할 수 있다.
- Line Type : InputField의 행 타입을 설정
single Line : 줄 바꿈이 없고, 엔터 키를 누르면 입력을 마친다.
Multi Line Submit : InputField의 가로 끝까지 문자열을 입력하며 줄 바꿈이되고 엔터키를 누르면 입력을 마친다.
Multi Line Newline : InputField의 가로 끝까지 문자열을 입력하면 줄 바꿈이 되고 엔터 키를 누르면 입력을 마친다.
Input Type : (Content Type이 Custom일 때 설정 가능) 입력 타입을 설정.
Keyboard Type : 모바일 기기에서 InputField를 사용할 때 표시되는 가상 키 보드 속성
- Character Validation : InputField에 입력할 수 있는 문자 종류 제한
None : 입력할 수 있는 문제 제한 없음
Digit : 정수 표현 가능 (‘-‘ 기호 사용 불가)
Integer : 정수 표현 가능 (첫 칸에 ‘-‘기호 사용 가능)
Decimal : 소수점이 있는 숫자 표현 가능
Alphanumeric : 알파벳과 숫자 입력 가능
Name : 한글/영어 이름 입력 가능 (문자열의 첫 번째가 아니라면 공백 입력 가능, 알파벳의 경우 첫 문자와 공백 이후 첫 문자만 대 문자로 설정되고 낲머지는 모두 소문자로 설정된다.)
Regex : 정규식을 이용해 문자 유효성을 검사
Email Address : 이메일 입력(영어, 숫자, 일부 특수기호)
Custom Validator : TMP_InputValidator를 설정해 문자 제한
Placeholder : Text에 입력된 내용이 없을 때 출력되는 가이드 텍스트
Caret Blink Rate : Hide Mobile ㅡInput이 true일때 입력 필드에 표시되는 커서의 점멸 횟수
Selection Color : InputField에 작성된 문자열을 드래그 했을 때 선택된 문자열의 배경 색상
- Control Setting
- Hide Mobile Input : true로 설정되면 모바일 장치에서 InputField에 텍스트를 입력할 때 모바일에서 제공되는 보조 Input Field가 표시되지않는다.
- InputField Component Event Method
On Value Changed (string) : InputField의 데이터에 변화가 있을 때
On End Edit(string) : (Line Type이 Single Line일 때) InputField에 데이터를 입력하고 엔터를 눌렀을 때
On Select(string) : InputField를 마우스 커서로 클릭해 활성화 했을 때
On Deselect(string) : 다른 곳을 클릭해 InputField를 비활성화 했을 때
- Content Type
- UI 텍스트 코드로 변환시키기
- TextMeshPro일 경우 : TextMeshProUGUI 변수명; 변수명.text = 변환하고싶은 텍스트값;
- Text일 경우 : Text 변수명; 변수명.text = 변환하고싶은 텍스트값;
- Reck Transform
Stack
- Push : 삽입
- Pop : 가장 최근에 들어온 애를 꺼낸다
- Peek : 가장 최근에 들어온 애를 리턴한다
gameObject.SetActive(falses) : 오브젝트 숨기기 transform.Rotate(Vector3.up * 속도 * time.deltatime, Space.World : 월드좌표를 기준으로 회전 transform.position = new Vector3(x, y, z); : x, y, z좌표로 순간이동
Scene
1
2
3
4
5
using UnityEngine.SceneManagement;
Scene scene = SceneManager.GetActiveScene();
int CurrentScene = scene.buildIndex; : 현제씬의 인덱스 번호 저장
int NextScene = CurrentScene + 1; : 현제씬 인덱스에 1추가(즉 다음씬)
Invoke
1
*주의* Update문에는 쓰지말것
Invoke(“함수명”, 지연시간(float)); : 지연시간후 함수실행
InvokeRepeating(함수명, 지연시간(float), 반복간격(float) : 지연시간 후 반복간격(즉 1초라면 1초간격으로)으로 계속 반복
CancelInvoke(“함수명”); : 함수의 실행을 종료
public 변수들
Transform 변수명 : 지정된 스크립트의 좌표값을 가져옴
GameObject 변수명 : 오브젝트를 지정
[SerializeField] 스크립트이름 변수명 : 스크립트를 지정
Vector3 변수명 : 좌표값을 지정
[Range(최솟값 ~ 최댓값)] public(private) float 변수명 : 슬라이스형태로 값을 바꿀수있음
LayerMask
LayerMask.GetMask(“Layer명”) : “ “의 레이어의 정보 가져온다 ex) LayerMask mask(변수명) = LayerMask.GetMask(“Monster(Layer명)”) = Monster의 레이어 정보를 mask의 저장
(1 « Layer의 순서) : 1에서 Layer순서값 만큼 bit shift(밀어준다)를 해준다 즉 Layer순서의 값
Layer
- Default
- TransparentFX
- Ignore Raycast 3.
- Water
- UI 6. 7. 8 Monster
9 Wall
ex) int mask(변수명) = (1 « 8) 1에서 8만큼 밀어준 8의레이어 Monster를 mast에 저장한다
(https://www.inflearn.com/course/mmorpg-%EC%9C%A0%EB%8B%88%ED%8B%B0/unit/35047?tab=curriculum 6분12초)
static (Script’s Name) Instance // 유일성이 보장된다 static (Script’s Name) GetInstance() { return Instance; } // 유일한 ( )를 가져온다
StringBuilder
string Address = “서울특별시” + “ 중구” + “ 세종대로”
StringBuilder sb = new StringBuilder(); sbAddress.Append(“서울특별시”); sbAddress.Append(“ 중구”); sbAddress.Append(“ 세종대로”); == 서울특별시중구세종대로
- sb.AppendLine(“서울특별시”); sb.AppendLine(“중구”); sb.AppendLine(“세종대로”); == 서울특별시 중구 세종대로
설명 블로그 url : t.ly/T0-L
PlayerControls
정의 : 유저 input을 이용하여 플레이어 캐릭터를 제어하는 스크립트. (Input 시스템을 사용하여 키보드, 마우스등의 입력을 감지하고, 이를 이용하여 캐릭터를 움직이거나 상호작용할 수 있도록 도와줌)
활용: NavMeshAgent컴포넌트와 함께 사용하여 플레이어 캐릭터의 이동을 내비게이션 매쉬 위에서 자동으로 처리하거나 Animator 컴포넌트와 함께 사용하여 캐릭터의 에니메이션을 제어하는등 다른 컴포넌트들과 함께 사용하여 더욱 다양한 기능을 구현할 수있음
메소드 | 리턴 값 | 설명 |
---|---|---|
Add | void | Param에 데이터를 추가합니다. |
Animation
Input.touchCount : 터치 이벤트가 발생한 터치의 개수를 반환
Input.GetTouch(0) : 현제 화면에서 첫 번째 손가락의 터치 입력에 대한 정보를 반환
Input.GetTouch(0).position : 첫 번째로 인식된 터치의 위치를 반환합니다.
- Input.GetTouch(0).deltaPosition : 현재 프레임에서 이전 프레임의 터치 위치와의 차이를 나타내는 벡터
- Input.GetTouch(0).phase : 현제 터치 상태를 나타내는 TouchPhase 열거형값 중 하나를 반환
- TouchPhase | Method | 설명 | | —– | ——- | | Began(시작) | 손가락이 화면을 터치하는 그 순간 | | Moved(이동) | 손가락이 화면 위에서 터치한 상태로 이동하고 있는 상태 | | Stationary(대기) | 손가락이 화면을 터치했지만, 마지막 프레임에서 변화가 없는 상태 | | Ended(종료) | 손가락이 화면 위를 벗어나 떨어지게 되는 그 순간(터치가 끝난 상태) | | Canceled(취소) | 5개 이상의 터치 입력이 동시에 발생해서 시스템이 터치의 추적을 취소한 상태 | ————————————————————————————————————————–
State 패턴
선언
enum State명
{
}
2.