기억저장고

Unity "Rewired"에셋으로 컨트롤러 2개이상 연결하기 본문

Unity

Unity "Rewired"에셋으로 컨트롤러 2개이상 연결하기

기억해조 2022. 2. 9. 13:33

*나는 듀얼쇼크4(DS4)의 자이로센서와 버튼값을 받아와서 오브젝트에 적용해야했다

 

 

1. 듀얼쇼크4 1개만 연결하기(에셋사용 x)
https://blog.sg4yk.com/dual_shock_motion_in_unity_en.html

2. 듀얼쇼크4 2개 이상 연결하기 (rewired 에셋사용)

**참고영상
https://youtu.be/PVVvf6J9LRo

**Rewired 도큐먼트

https://guavaman.com/projects/rewired/docs/Documentation.html


*Rewired 버튼세팅 방법
1. Window-Rewired-Create-InputManager(in Scene) 클릭해서 씬에 추가
2. Rewired Input Manager-Launch Rewired Editor 클릭 


3. Rewired Editor - Players 에서 "New"를 클릭해서 적용하려는 컨트롤러 개수만큼 Player 추가

(나는 2개를 사용할것이므로 2개를 추가했다)


4. Rewired Editor - Action 에서 "New"를 클릭해서 하려고하는 기능의 이름 작성 


5. Rewired Editor - Joystick Maps에서 Sony DualShock 4 클릭 후 "CreateMap"클릭(입력가능한 모든키를 보고싶다면 "CreateDefaults"클릭)

6. 키를 선택 후 4번에서 만들었던 Action클릭

 

 

* 앞에서 설정한 세팅을 스크립트에서 적용시키기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Rewired.ControllerExtensions;

public class Ds4InputManager : MonoBehaviour
{
    //
    public int playerId;
    public Transform controllerTrf;

    private Rewired.Player player { get { return Rewired.ReInput.players.GetPlayer(playerId); } }

    private void Update()
    {
        if (!Rewired.ReInput.isReady) return;

        var ds4 = GetFirstDS4(player);//적용할 Player를 playerID값으로 찾기

        if (player.GetButtonDown("PosReset"))
        {
            ds4.ResetOrientation();//자이로센서 리셋
        }
        if (ds4!=null) 
        {
            controllerTrf.rotation = ds4.GetOrientation(); //자이로센서값 오브젝트적용
        }
    }


    private IDualShock4Extension GetFirstDS4(Rewired.Player player)
    {
        foreach (Rewired.Joystick j in player.controllers.Joysticks)
        {
            // Use the interface because it works for both PS4 and desktop platforms
            IDualShock4Extension ds4 = j.GetExtension<IDualShock4Extension>();
            if (ds4 == null) continue;
            return ds4;
        }
        return null;
    }
}

 

 

Comments