반응형
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. 물체를 잡아서 옮기는 상호작용을 위한 설정
결과 :
반응형
댓글