미디어 콘텐츠 스터디
12. 풍선 터트리기 본문
충돌 감지 및 폭발로 풍선이 터질수 있도록 합니다. 그런 다음 풍선에 던질 수있는 공을 장면에 추가합니다.
공을 던진 후에는 잠시 후 원래 위치로 재설정하여 공을 다시 가져옵니다.
1. 풍선 충돌감지하기
① Project창에서 Assets/Prefabs / 폴더에서 Balloon 프리팹을 두 번 클릭하여 엽니 다.
② Component | Physics | Sphere Collider 선택합니다.
③ Sphere Collider의 크기를 조정하고 위치를 중앙에 맞추려면 해당 컴포넌트에서 Edit Collider 아이콘을 클릭합니다.
④ Radius :0.22(반경 0.22)와 Center (0, 0.36, 0)로 설정합니다.
⑤ 충돌 이벤트를 처리하는 새 C # 스크립트 Poppable.cs를 추가합니다.
⑥ Poppable.cs를 편집을 위해 엽니다.
Poppable.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Poppable : MonoBehaviour
{
public GameObject popEffectPrefab;
void OnCollisionEnter(Collision collision)
{
if (transform.parent == null &&
collision.gameObject.GetComponent<Poppable>() == null)
{
PopBalloon();
}
}
private void PopBalloon()
{
if (popEffectPrefab != null)
{
GameObject effect = Instantiate(popEffectPrefab,
transform.position, transform.rotation);
Destroy(effect, 1f);
}
Destroy(gameObject);
}
}
2. 터지는 폭발 추가하기
Standard Assets의 폭발 입자 효과 프리팹을 재사용합니다(없는 경우 Assets Store에서 다운로드합니다)
① Project 창에서 StandardAssets / ParticleSystems / Prefabs / 폴더로 이동합니다.
② Explosion 프리팹을 선택하고 복제합니다 (Edit | Duplicate).
③ 사본의 이름을 BalloonPopEffect로 변경하고 Project 창의 Assets/ Prefabs / 폴더로 이동합니다.
BalloonPopEffect 프리팹을 두 번 클릭하고 다음 단계를 수행하여 편집합니다.
① BalloonPopEffect에서 Transform컴포넌트의 Scale을 (0.01, 0.01, 0.01)로 설정합니다.
② Explosion Physics Force 컴포넌트를 제거하거나 비활성화합니다 (right-click | Remove Component).
③ Light 구성 요소를 제거하거나 비활성화합니다.
④ Particle System Multiplier의 Multiplier 값을 0.01로 변경합니다.
⑤ Hierarchy 창에서 하위 Fireball 를 삭제하거나 비활성화합니다.
⑥ Hierarchy 창에서 Shockwave 를 삭제하거나 비활성화합니다.
⑦ 프리팹을 저장하고 장면의 Hierarchy창으로 돌아갑니다.
풍선에 효과를 할당합니다.
① Project 창에 Assets|Prefabs폴더에서 Balloon 프리 팹을 두 번 클릭하여 다시 엽니 다.
② BalloonPopEffect 프리 팹을 Poppable의 Pop Effect Prefab 슬롯으로 드래그앤드롭합니다.
③ 프리팹을 저장하고 장면의 Hierarchy창으로 돌아갑니다.
실행하기
3. 손에 들고 있는 동안 물리학 비활성화
① 클래스의 맨 위에 다음과 같이 현재 풍선의 Rigidbody를 담을 변수를 추가합니다.
private Rigidbody rb;
② CreateBalloon 함수에서 풍선의 Rigidbody를 가져와 운동 학적으로 만들기 위해 다음 줄을 추가합니다.
public void CreateBalloon(GameObject parentHand)
{
balloon = Instantiate(balloonPrefab, parentHand.transform);
balloon.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
rb = balloon.GetComponent<Rigidbody>();
rb.isKinematic = true;
}
③ 그런 다음 ReleaseBalloon에서 다음과 같이 물리를 복원합니다.
public void ReleaseBalloon()
{
rb.isKinematic = false;
balloon.transform.parent = null;
rb.AddForce(Vector3.up * floatStrength);
GameObject.Destroy(balloon, 10f);
balloon = null;
}
4. 공 던지기
마지막 단계는 Collider가 있는 장면에 공을 추가하여 풍선에 던질 수 있도록 합니다.
① Hierarchy 창에서 Sphere를 만들고 (+ | 3D Object | Sphere로 이동) 이름을 Ball로 변경합니다.
② Ball의 Scale(0.1, 0.1, 0.1)로 설정하고 Position (-0.125, 0.55, 0)로 설정하여 Pedestal 위에 놓습니다.
③ 새 재료를 추가하거나 Materials / 폴더의 Red Material을 사용하여 빨간색으로 만듭니다 (재료를 Ball로 드래그).
④ Grab Interactable 컴포넌트 (Component | XR | XR Grab Interactable)를 추가합니다.
⑤ Rigidbody 컴포넌트에서 Collision Detection을 Continuous로 변경합니다.
⑥ XR Grab Interactable 컴포넌트에서 Throw Velocity Scale을 2로 변경합니다.
실행하기
5. 볼 위치 재설정하기
① 공을 던진 후 공의 위치를 다시 받침대로 재설정하기 위해 스크립트를 하나 더 만듭니다. ResetAfterDelay라는 새 C # 스크립트를 만들고 Ball에 연결합니다.
ResetAfterDelay.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ResetAfterDelay : MonoBehaviour
{
public float delaySeconds = 5f;
private Vector3 startPosition;
private void Start()
{
startPosition = transform.position;
}
public void Reset()
{
StartCoroutine(AfterDelay());
}
IEnumerator AfterDelay()
{
yield return new WaitForSeconds(delaySeconds);
transform.position = startPosition;
Rigidbody rb = GetComponent<Rigidbody>();
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
}
}
② Inspector 창에서 XR Grab Interactable 컴포넌트의 Interactable Events 목록을 펼칩니다.
③ Select Exit 이벤트에서 + 버튼 (오른쪽 하단 모서리에 있음)을 눌러 새 응답을 추가합니다.
④ 이벤트의 Object 슬롯으로 Hierarchy 칭의 Ball을 드래그앤드롭합니다.
⑤ 함수 드롭 다운에서 ResetAfterDelay | Reset을 설정합니다..
실행하기
'가상현실(Virtual Reality) > 가상현실 맛보기' 카테고리의 다른 글
14. 헤드업디스플레이(HUD) UI 만들기 (0) | 2021.08.18 |
---|---|
13. 기본 UI 만들기 (0) | 2021.08.18 |
11. 풍선 총으로 상호 작용하기 (0) | 2021.07.28 |
10. 손으로 상호 작용하기I (0) | 2021.07.19 |
09. 좀비 죽이는 효과 만들기 (0) | 2021.07.12 |