유니티:충돌 이벤트: 두 판 사이의 차이
잔글 (→충돌 이벤트) |
잔글 (→공간) |
||
1번째 줄: | 1번째 줄: | ||
{{유니티}} | {{유니티}} | ||
== 개요 == | |||
물체들끼리 부딪혔을 때 스코어가 올라간다든가, 어떤 범위 내에 진입했을 때 특정 효과를 부여한다든가.. 이러한 조건들에 대한 기능이 유니티에선 이미 구현되어 있다. | |||
=충돌 이벤트= | =충돌 이벤트= | ||
44번째 줄: | 47번째 줄: | ||
=공간= | =공간= | ||
물리적 물체처럼 반응하진 않지만, 내부에 들어오면 반응한다. | 물리적 물체처럼 반응하진 않지만, 내부에 들어오면 반응한다. | ||
양쪽 다 트리거일 필요 없이, 한쪽만 트리거여도 양쪽 모두 트리거 이벤트가 실행된다. | |||
Collider 컴포넌트 안에서 is Treeger를 체크한다.<syntaxhighlight lang="c#"> | Collider 컴포넌트 안에서 is Treeger를 체크한다.<syntaxhighlight lang="c#"> | ||
void | void OnTriggerEnter(Collider other) { // 충돌한 물체의 정보가 other변수에 담긴다. | ||
if(other.name == "player") { | |||
Rigidbody rigid = other.GetComponent<Rigidbody>(); // 접촉한 물체의 컴포넌트를 가져올 수도 있다. | |||
} | |||
{ | if(other.tag == "player") { // 태그를 검사할 수도 있다. | ||
if(other.name==" | } | ||
rigid. | |||
</syntaxhighlight>온콜리더 함수와 동일한 형태이다. Enter, Stay, Exit가 있다. | </syntaxhighlight>온콜리더 함수와 동일한 형태이다. Enter, Stay, Exit가 있다. | ||
{| class="wikitable" | |||
!충돌관련함수 | |||
!설명 | |||
|- | |||
|OnTriggerEnter | |||
|충돌이 일어날 때 | |||
|- | |||
|OnTriggerStay | |||
|충돌중 | |||
|- | |||
|OnTriggerExit | |||
|충돌이 끝났을 때 | |||
|} | |||
65번째 줄: | 82번째 줄: | ||
<br /> | <br /> | ||
=== 이거 어따두지;;? === | ===이거 어따두지;;?=== | ||
Color(R, G, B, 투명도); 형태이다. 투명도는 제외 가능.(디폴트 1) | Color(R, G, B, 투명도); 형태이다. 투명도는 제외 가능.(디폴트 1) |
2021년 8월 10일 (화) 10:00 판
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
물체들끼리 부딪혔을 때 스코어가 올라간다든가, 어떤 범위 내에 진입했을 때 특정 효과를 부여한다든가.. 이러한 조건들에 대한 기능이 유니티에선 이미 구현되어 있다.
충돌 이벤트
스크립트를 만든 후,
MeshRenderer mesh; //오브젝트의 재질에 접근.
Material mat;
void Start() {
mash = GetComponent<MeshRenderer>();
mat.mesh.material //필요한 속성을 가져온다.
}
private void OnCollisionEnter(Collision collision) //Collision =충돌 정보 클래스. 콜리더를 매개변수로 받아온다.
{
if(collision.gameObject.name=="My Ball"){ //어떤 오브젝트와 충돌할 것인가??
mat.color=new Color(1,1,1); //충돌이 일어나면 색을 바꾼다.
}
}
On만 입력해도 다양한 함수의 선택지가 나온다.
충돌관련함수 | 설명 |
---|---|
OnCollisionEnter | 충돌이 일어날 때 |
OnCollisionStay | 충돌중 |
OnCollisionExit | 충돌이 끝났을 때 |
Collision 충돌 정보 클래스.
전염병 전파 시뮬레이션을 만드는 데에도 좋겠다.
if(collision.gameObject..tag=='태그명'){} //이 형태로 레이어에 따라 다르게 반응하게 할 수도 있다.
충돌여백
분명 물체끼리 충돌을 하는데, 약간의 공백이 있는 경우가 있다. 빠르게 충돌하는 경우라면 모를까, 캐릭터와 땅이 맞닿아 있는 상황이라면 위화감이 생긴다. 이런 경우엔 Project Settings의 Physics에서 Default Contact Offset을 0으로 조절해준다.(0은 허락되지 않지만.. 0.0001로 맞춰진다.)
공간
물리적 물체처럼 반응하진 않지만, 내부에 들어오면 반응한다.
양쪽 다 트리거일 필요 없이, 한쪽만 트리거여도 양쪽 모두 트리거 이벤트가 실행된다.
Collider 컴포넌트 안에서 is Treeger를 체크한다.
void OnTriggerEnter(Collider other) { // 충돌한 물체의 정보가 other변수에 담긴다.
if(other.name == "player") {
Rigidbody rigid = other.GetComponent<Rigidbody>(); // 접촉한 물체의 컴포넌트를 가져올 수도 있다.
}
if(other.tag == "player") { // 태그를 검사할 수도 있다.
}
온콜리더 함수와 동일한 형태이다. Enter, Stay, Exit가 있다.
충돌관련함수 | 설명 |
---|---|
OnTriggerEnter | 충돌이 일어날 때 |
OnTriggerStay | 충돌중 |
OnTriggerExit | 충돌이 끝났을 때 |
충돌예외
물리충돌하지 않게 많들기.
ProjectSettings의 Physics에서 레이어별로 충돌하지, 하지 않을지 체크할 수 있다.
gameObject.layer //게임오브젝트의 레이어값을 가져온다. 레이어번호로 레이어를 설정한다.
이거 어따두지;;?
Color(R, G, B, 투명도); 형태이다. 투명도는 제외 가능.(디폴트 1)