활시위 당기는 법

VR/Oculus Integration 2023. 12. 22. 13:43
반응형

 https://youtube.com/playlist?list=PLTFRwWXfOIYB9hru6EjeVS0E-4jNiOuQQ&si=zoJ3NoYX6YrGnpg1






 
 
잡기 기본형을 만들어 줍니다

 
 
빈 오브젝트 Bow를 만들어 주고 자식으로 빈오브젝트 Body를 만들어 줍니다.

 
Bow의 위치와 크기를 설정 합니다.

 
 
Body를 선택하고 Rigidbody, Grabbable, One Grab Free Transformer 컴포넌트를 추가 합니다.

 
 
 
Body를 선택하고 빈 오브젝트 Visuals, BowString, Handle를 생성 하고 
HandGrabInteractable 프리팹을 가져옵니다.

 
 
Visuals를 선택하고 Mesh, Collider빈오브젝트를 생성 합니다.

 
Mesh오브젝트를 선택하고 Mesh Filter, Mesh Renderer를 부착 후 Mesh와 Material을 넣어 줍니다.

 
Collider 오브젝트를 선택하고 캡슐 콜라이더를 부착 합니다.

 
 
 
BowString 오브젝트를 선택하고 BowString 스크립트를 만들어 부착 합니다.

 
BowString스크립트는 다음과 같습니다.

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

public class BowString : MonoBehaviour
{
    [SerializeField] private LineRenderer lineRenderer;
    [SerializeField] private Transform point1, point2;
    [SerializeField] private Transform midPoint;
    [SerializeField] private ConfigurableJoint joint;
    public InteractableUnityEventWrapper eventWrapper;
    private List<Vector3> linePoints = new List<Vector3>();
    

    private void Start()
    {
        this.eventWrapper.WhenSelect.AddListener(() =>
        {
            Debug.Log("<color=yellow>Selected</color> Handle");
            JointDrive drive = joint.xDrive;
            drive.positionSpring = 0;
            drive.positionDamper = 0;
            joint.xDrive = drive; // xDrive를 수정한 후 다시 할당합니다.
        });

        this.eventWrapper.WhenUnselect.AddListener(() =>
        {
            Debug.Log("<color=yellow>UnSelected</color> Handle");
            JointDrive drive = joint.xDrive;
            drive.positionSpring = 2000;
            drive.positionDamper = 200;
            joint.xDrive = drive; // xDrive를 수정한 후 다시 할당합니다.
        });
    }

    private void FixedUpdate()
    {
        linePoints.Clear();
        linePoints.Add(point1.localPosition);
        var midLocalPosition = transform.InverseTransformPoint(midPoint.position);
        linePoints.Add(midLocalPosition);
        linePoints.Add(point2.localPosition);

        lineRenderer.positionCount = linePoints.Count;
        lineRenderer.SetPositions(linePoints.ToArray());
    }
}

 
 
BowString오브젝트를 선택 하고 
Visuals, Point1, Point2 빈오브젝트를 생성 합니다.
 

 
 
Visuals 오브젝트를 선택하고 LineRenderer 빈 오브젝트를 생성 합니다.

 
LineRenderer를 선택하고 LineRenderer 컴포넌트를 부착 합니다.

 
 
Point1오브젝트를 선택하고 위치를 잡아줍니다.

 

 
 
Point2를 선택하고 위치를 잡아 줍니다.

 
 
 
Handle오브젝트를 선택하고 

 
Rigidbody, Grabbable, ConfigurableJoint, OneGrabTranslateTransformer컴포넌트를 부착 합니다.

 
 
 
Handle오브젝트 자식으로 Sphere를 생성 하고 HandGrabInteractable프리팹을 가져옵니다.

 
 
Sphere 오브젝트를 선택하고 

 
Mesh를 비활성화 합니다.

 
 
HandGrabInteractable오브젝트를 선택하고 

 
Interactable Unity Event Wrapper컴포넌트를 부착 합니다.

 

Bow.fbx
0.08MB
반응형

'VR > Oculus Integration' 카테고리의 다른 글

Oculus Integration SDK Hand & Materials  (0) 2024.01.03
탁구채로 탁구공 튕기기  (0) 2023.12.22
OneGrabPhysicsJointTransformer  (0) 2023.12.20
Grabbable (Two Grab Transformers)  (0) 2023.12.19
Grabbable  (0) 2023.12.18
: