미디어 콘텐츠 스터디

12. 풍선 터트리기 본문

가상현실(Virtual Reality)/가상현실 맛보기

12. 풍선 터트리기

danmujicat 2021. 8. 17. 16:27

충돌 감지 및 폭발로 풍선이 터질수 있도록 합니다. 그런 다음 풍선에 던질 수있는 공을 장면에 추가합니다.

공을 던진 후에는 잠시 후 원래 위치로 재설정하여 공을 다시 가져옵니다.

 

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 MultiplierMultiplier 값을 0.01로 변경합니다.

Hierarchy 창에서 하위 Fireball 를 삭제하거나 비활성화합니다.

⑥ Hierarchy 창에서 Shockwave 를 삭제하거나 비활성화합니다.

프리팹을 저장하고 장면의 Hierarchy창으로 돌아갑니다.

 

풍선에 효과를 할당합니다.

Project 창에 Assets|Prefabs폴더에서 Balloon 프리 팹을 두 번 클릭하여 다시 엽니 다.

② BalloonPopEffect 프리 팹을 PoppablePop 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로 변경합니다.

② BallScale(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 DetectionContinuous로 변경합니다.

XR Grab Interactable 컴포넌트에서 Throw Velocity Scale2로 변경합니다.

 

실행하기

한 손으로 총을 잡고 풍선을 부풀립니다 .  다른 손으로 공을 잡고 풍선에 던집니다.

 

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을 설정합니다..

실행하기

 

공을 잡고 던집니다 . 5 초 후 공은 원래 위치로 돌아갑니다 .

 

Comments