아이템과 장애물
1. 메소드
함수를 만드는것이다
1. 특정 오브젝트간 Distence 구하기
//Target에 오브젝트Name을 문자열로 넣으면 //Find가 오브젝트를 검색한다 void Update(){ TragetDist("Text (TMP)"); } void TargetDistence(string Target){ float thisToTargetDist = Vector3.Distance( GameObject.Find(_Target).transform.position, transform.position ); Debug.Log(_Target + " To " + this.gameObject.ToString() + thisToTargetDist); }
2. 충돌상대를 밀치기
- Collision.gameObject 사용
Debug.Log(Collision.gameObject.name); Debug.Log(Collision.gameObject.transform.postion);
- 다음은 장애물에 들어가는 스크립트이다
void OnCollisionEnter(Collision _collision) { Vector3 direction = _collision.gameObject.transform.position - transform.position; direction = direction.normalized * 1000; _collision.gameObject.GetComponent<Rigidbody>().AddForce(direction); }
- 그런데 Update에 들어가지 않는다.. 왜???
- OnCollisionEnter는 게임엔진에서 호출해주는 메소드이다.
충돌이 발생하면 그 때 유니티 엔진에서 저 메소드를 자동 호출한다.
그래서 우리가 직접 호출할 필요가 없다.
결과
- 공이 장애물에 부딛히면서 튕겨나가는것을 볼 수 있다.
4. Collider에서 일어나는 충돌
- 충돌은 Transform Scale이 아닌 Collider 에서 일어난다.
다음 GIF는 콜라이더 범위(초록색) 범위에 들어가야 실행되는것이 확인된다
Nomalize?
Vector3 direction = direction.normalized;
- 이를 벡터의 정규화라고 한다.
벡터의 방향은 그대로 두고 크기만 1.0으로 맞춰 주는 것입니다.
항상 곱하는 상수 크기를 일정하게 가질 수 있도록 만들어주는것
👿!! GetComponent<> 주의점!!👿
GetComponent<>()이다!!!
GetComponent 사용시 항상 괄호를 붙여라
간혹 뺴놓는경우가 있는데 그러지마라
2. 트리거
- 충돌감지 & 트리거
void OnCollisionEnter(Collider ___) //두 물체간에 충돌이 일어났을때 발생한다. void OnTriggerEnter(Collider ___) //트리거가 작동했을떄 발생
1. 매쉬 랜더러
-
매쉬 랜더러는 오브젝트를 렌더링 욥션을
결정할 수 있고 랜더링을 할지 안할지 결정할 수 있다.랜더링 ON 랜더링 OFF (투명 벽)
2. isTriger
- 물리적 적용을 할지 아니면
그냥 지나갔다는 트리거로 발생시킬지 결정 시킬수 있다
3. 게임 재시작
- Application.LoadLevel("___.unity")
우리가 항상 봐왔던 로딩창과 게임로딩 같은 역활을 하는 명령어다//유니티 파일은 일종의 방 혹은 게임이다. Application.LoadLevel("___.unity")
- 다음은 .unity 파일
결과
- 다음은 여러개의 GIF 반복이 아니라 정말로 새로 시작되는 중이다.
3. 코인먹기
void OnTriggerEnter(Collision ___) 을 이용해서 코인을 먹어보자
void OnTriggerEnter(Collider _col){ if(_col.gameObject.name == "Ball"){ Destroy(gameObject); } }
- 1.복수선택
다음과 같이 드래그하고 인스펙터창에서 값 변경을하면 동일하게 변경가능하다
코인먹기 결과
배열
여러개의 변수를 저장해보자
1. C# 배열 선언
- 배열 C#에서 선언은 다음과 같다
<자료형> [] _ARRAY_ = new <자료형>[_SIZE_];
2. Tag(태그)
- 게임 오브젝트는 태그를 가지고 있다.
- 여러개 종류의 오브젝트를 가르킬때 사용한다.
Default값 : Untagged
1. 태그의 추가
- 1. add tag
- 2. tag 선택 (복수선택 가능)
2. 태그의 적용
- 같은,복사된 다수 오브젝트에 접근이 가능하다.
- 다음 스크립트는 태그이름과 동일한 오브젝트를 전부 넣는다.
//메인 카메라에 들어가는 스크립트다 GameObject[] _TagARR_ = GameObject.FindGameObjectsWithTag("_태그이름_");
3. C# For 반복문
- C와 반복문을 비슷하게 쓸 수 있다 : 수식기반
for(int i = 0 ; i < N; i++) {}
- 이터레이터도 사용할 수도 있다 : 배열기반
foreach(<자료형> E in 배열)
4. 아이템 먹고 장애물 없에기
-
빨간 코인을 먹으면 장애물이 모두 없어지게 하고싶다
-
스크립트는 다음과 같다
//OntriggerEnter으로 접촉했는지 감지 //매개변수 콜라이더 _col은 들이받은 오브젝트를 의미함 void OnTriggerEnter(Collider _col){ //들이받은 오브젝트가 "공"이라면 if(_col.gameObject.name == "Ball"){ //_Obstacle이라는 인자를 받는 함수호출 //인자값의 태그를 지닌 오브젝트 삭제 DestroyObstacle("_Obstacle"); //또한 코인 그 자기자신을 표현하는 gameObject도 삭제 Destroy(gameObject); } } void DestroyObstacle(string _Target){ //GameObject 클래스 배열을 생성한다 -> 매개변수 문자열 태그를 가지는 장애물 삭제 GameObject[] ObstaclesArr = GameObject.FindGameObjectsWithTag(_Target); foreach(GameObject E in ObstaclesArr){ Destroy(E); } }
레드 코인먹기 결과 (장애물 전부 제거)
❓❓❓ 의문점 ❓❓❓
1. 충돌할때마다 소리가 들리게 하자 ❓(다음에 찾아보기)
- 추측 : 다음 트리거 엔터에 소리 들리게끔 하면 되지 않을까?
void OnTriggerEnter(Collider _col){ if(_col.gameObject.name == "Ball"){ 오디오재생(); Destroy(gameObject); } }
1. 미디 파일 연결하기
2. 스프라이트 오브젝트로 표현하는 법 ❓(다음에 찾아보기)
3. 애니메이션 넣는법 ❓(다음에 찾아보기)
4. 오브젝트 인스펙터의 static의 역할 ❓(다음에 찾아보기)
- 여기서 Static의 설정은?
두 설정 비교
1. 자식들 static ON (부모 제외 )
- 자세히 보면 collider만 음직이는것을 볼 수 있다.
2. 부모와 자식 전부 static
- 정상적으로 부모의 음직임을 따라가는것을 알 수 있다.
'게임 > 개발' 카테고리의 다른 글
| 니앙팽이 - 스크립터블 오브젝트 (게임 개발 : Unity) | ScriptableObject (0) | 2023.05.16 |
---|---|
|유니티| 5 | GameManager을 통한 전역 처리 & 점수표 UI & 발사체 & 클래스와 상속 (0) | 2022.02.06 |
|유니티| 3 | 유저 입력 & 오브젝트 말풍선(텍스트) 띄우기 & 카메라와 마주보는 스프라이트 (0) | 2022.02.02 |
|유니티| 2 | 유니티 스크립트 (C# 문법) & 카메라가 오브젝트 따라가게 하기 & 밤낮 표현하기 (Light 회전) (0) | 2022.01.31 |
|유니티| 1 | 유니티 UI & 물리 적용시키기 & Rigid-Body & Bouncy (0) | 2022.01.25 |