본문 바로가기
IT

[유니티/MR] 오브젝트 생성 및 물건 배치, 물리 작용

by 배애앰이 좋아 2024. 2. 14.
반응형

 

 

1. 오브젝트 생성을 위한 UI 구축 및 상호작용 설정

 

 

 

 

+ 사용자 손을 따라다니는 UI 만들기

 

2. UI 상호작용을 위한 컨트롤러 추가 설정

 

 

 

3. 생성한 물체가 현실의 벽과 인식해서 물리 작용을 하기 위한 설정

 

 

 

4. UI 와 상호작용을 통한 오브젝트 생성 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Oculus;
using TMPro;

public class GameManager : MonoBehaviour
{
    public Transform pose;
    public GameObject cubePrefab;
    public GameObject capsulePrefab;
    public GameObject spherePrefab;
    public OVRInput.Controller controllerType;
    public OVRGrabber grabber;
    public TextMeshProUGUI debugText1;
    public TextMeshProUGUI debugText2;
    private bool cheak = false;
    private GameObject cheakObj = null;
    private GameObject RayCheckObj = null;
    public GameObject PlayerCamera = null;
    public GameObject houseObj;

    void Start(){
        RayCheckObj = Instantiate(cubePrefab, pose);
    }

    void Update(){

	// 카메라 기준으로 현실 세계 벽과 충돌 점을 찾는 코드
        // 카메라의 위치와 방향을 기준으로 레이를 생성합니다.
        Ray ray = new Ray(PlayerCamera.transform.position, PlayerCamera.transform.forward);
        RaycastHit hit;

        // 레이를 쏜 후 충돌한 지점이 있을 경우
        if (Physics.Raycast(ray, out hit))
        {
            // 충돌 지점의 좌표를 얻습니다.
            Vector3 hitPoint = hit.point;
            RayCheckObj.transform.position = new Vector3(hit.point.x-0.5f, hit.point.y, hit.point.z);
            // 해당 좌표를 출력합니다.
            debugText2.text = "Hit point coordinates: " + hitPoint;
        }

	// 오브젝트를 잡은 컨트롤러 속도를 측정하는 코드
        Vector3 acceleration = OVRInput.GetLocalControllerVelocity(controllerType);
        debugText1.text = "grabber gameObject : " + grabber.grabbedObject.gameObject.name + " Check Run : " + OVRInput.GetLocalControllerVelocity(controllerType);
        GameObject grabbedObject = grabber.grabbedObject.gameObject;
        if(grabbedObject != null){
            grabbedObject.GetComponent<Rigidbody>().AddForce(acceleration * Time.deltaTime);
        }
    }
    
    // cube 생성 버튼을 눌렸을 때
    public void MakeCubePrefab(){
        //pose.position = new UnityEngine.Vector3(pose.position.x , pose.position.y + 0.1f, pose.position.z);
        cheakObj = Instantiate(cubePrefab, pose);
        cheak = true;
    }

    // Capsule 생성 버튼을 눌렸을 때
    public void MakeCapsulePrefab(){
        //pose.position = new UnityEngine.Vector3(pose.position.x , pose.position.y + 0.1f, pose.position.z);
        Instantiate(capsulePrefab, pose);
        cheak = false;
    }

    // Sphere 생성 버튼을 눌렸을 때
    public void MakeSpherePrefab(){
        //pose.position = new UnityEngine.Vector3(pose.position.x , pose.position.y + 0.1f, pose.position.z);
        Instantiate(spherePrefab, pose);
    }
}

 

 

 

4. 물체를 잡아서 옮기는 상호작용을 위한 설정

 

 

 

 

결과 :

 

 

반응형

댓글