/// <summary> /// 振動の実装部 /// </summary> /// <param name="index">コントローラーの番号</param> /// <param name="lowPow">低周波の振動の強さ</param> /// <param name="highPow">高周波の振動の強さ</param> static void VibrationImpl(int index, float lowPow, float highPow) { #if UNITY_SWITCH && !(UNITY_EDITOR) //未接続なら何もしない if (!SwitchManager.GetInstance().IsConnect(index)) { return; } //IDの取得 NpadId npadId = SwitchManager.GetInstance().GetNpadId(index); //スタイルの取得 NpadStyle npadStyle = Npad.GetStyleSet(npadId); //デバイスの数を取得(0か1のみ取得する) int deviceCount = Vibration.GetDeviceHandles( vibrationDeviceHandles, 1, npadId, npadStyle); //デバイスの数が1じゃない場合は何もしない if (deviceCount != 1) { return; } //パワーをセット vibrationValue.amplitudeLow = lowPow; vibrationValue.amplitudeHigh = highPow; //デバイスの初期化 Vibration.InitializeDevice(vibrationDeviceHandles[0]); //振動の値をセット Vibration.SendValue(vibrationDeviceHandles[0], vibrationValue); #endif }
/// <summary> /// 振動の実装部 /// </summary> /// <param name="_Index">コントローラーの番号</param> /// <param name="_LowPow">低周波の振動の強さ</param> /// <param name="_HighPow">高周波の振動の強さ</param> static void VibrationImpl(int _Index, float _LowPow, float _HighPow) { //未接続なら何もしない if (!SwitchManager.GetInstance().IsConnect(_Index)) { return; } //IDの取得 NpadId npadId = SwitchManager.GetInstance().GetNpadId(_Index); //スタイルの取得 NpadStyle npadStyle = Npad.GetStyleSet(npadId); //デバイスの数を取得(0か1のみ取得する) int deviceCount = Vibration.GetDeviceHandles( m_VibrationDeviceHandles, 1, npadId, npadStyle); //デバイスの数が1じゃない場合は何もしない if (deviceCount != 1) { return; } //パワーをセット m_VibrationValue.amplitudeLow = _LowPow; m_VibrationValue.amplitudeHigh = _HighPow; //デバイスの初期化 Vibration.InitializeDevice(m_VibrationDeviceHandles[0]); //振動の値をセット Vibration.SendValue(m_VibrationDeviceHandles[0], m_VibrationValue); }
/// <summary> /// 加速度の取得 /// </summary> static public Vector3 GetAcceleration(int index) { //未接続 if (!SwitchManager.GetInstance().IsConnect(index)) { return(Vector3.zero); } return(Acceleration[index]); }
/// <summary> /// 今のフレームにボタンを押しているか /// </summary> /// <param name="index">コントローラーの番号</param> /// <param name="button">取得するボタン</param> /// <returns>押しているならtrueを返す</returns> static public bool GetButton(int index, SwitchButton button) { //未接続ならfalse if (!SwitchManager.GetInstance().IsConnect(index)) { return(false); } return(IsCurrentButton(index, (long)button)); }
/// <summary> /// 右スティックの入力を取得 /// </summary> /// <param name="index">コントローラーの番号</param> /// <returns>右スティックの入力</returns> static public Vector2 GetStick(int index) { //未接続ならVector2.zero; if (!SwitchManager.GetInstance().IsConnect(index)) { return(Vector2.zero); } return(stickInfos[index]); }
/// <summary> /// 今のフレームにボタンを離したか /// </summary> /// <param name="_Index">コントローラーの番号</param> /// <param name="_Button">取得するボタン</param> /// <returns>離したならtrueを返す</returns> static public bool GetButtonUp(int _Index, SwitchButton _Button) { //未接続ならfalse if (!SwitchManager.GetInstance().IsConnect(_Index)) { return(false); } return(IsPrevButton(_Index, _Button) && !IsCurrentButton(_Index, _Button)); }
/// <summary> /// スティックの垂直を取得 /// </summary> /// <param name="index">コントローラーの番号</param> /// <returns>スティックの垂直</returns> static public float GetVertical(int index) { //未接続なら0.0f if (!SwitchManager.GetInstance().IsConnect(index)) { return(0.0f); } #if UNITY_SWITCH && !(UNITY_EDITOR) return(stickInfos[index].vertical); #else return(ConvertSwitchVerticalToXboxVertical(index)); #endif }
/// <summary> /// スティックの垂直を取得 /// </summary> /// <param name="_Index">コントローラーの番号</param> /// <returns>スティックの垂直</returns> static public float GetVertical(int _Index) { //未接続なら0.0f if (!SwitchManager.GetInstance().IsConnect(_Index)) { return(0.0f); } #if UNITY_EDITOR return(ConvertSwitchVerticalToXboxVertical(_Index)); #else return(m_StickInfos[_Index].m_Vertical); #endif }
/// <summary> /// ジャイロの取得 /// </summary> /// <param name="index">コントローラーの番号</param> /// <returns>ジャイロの回転</returns> static public Quaternion GetGyro(int index) { //未接続ならQuaternion.identity if (!SwitchManager.GetInstance().IsConnect(index)) { return(Quaternion.identity); } //キーがない場合は追加しておく if (!baseGyro.ContainsKey(index)) { baseGyro.Add(index, Quaternion.identity); } #if UNITY_SWITCH && !(UNITY_EDITOR) return(baseGyro[index] * GetGyroImpl(index)); #else return(GetGyroImpl(index)); #endif }
/// <summary> /// 加速度の更新 /// </summary> static public void AccelerationUpdate(int index, NpadId npadId) { //未接続 if (!SwitchManager.GetInstance().IsConnect(index)) { return; } //スタイルの取得 npadStyle = Npad.GetStyleSet(npadId); SixAxisSensor.GetHandles(handles, 1, npadId, npadStyle); //ジャイロスタート SixAxisSensor.Start(handles[0]); SixAxisSensor.GetState(ref sixAxisSensorState, handles[0]); var switchAcceleration = sixAxisSensorState.acceleration; Acceleration[index].Set(switchAcceleration.x, switchAcceleration.y, switchAcceleration.z); }
/// <summary> /// ボタンを今のフレームに押したか /// </summary> /// <param name="index">コントローラーの番号</param> /// <param name="button">取得するボタン</param> /// <returns>押したならtrueを返す</returns> static public bool GetButtonDown(int index, SwitchButton button) { #if AUTO_EXECUTE_DEBUG if (index == 0 && button == SwitchButton.Ok) { return(true); } if (index == 0 && button == SwitchButton.StickRight) { return(true); } #endif //未接続ならfalse if (!SwitchManager.GetInstance().IsConnect(index)) { return(false); } return(!IsPrevButton(index, button) && IsCurrentButton(index, button)); }
/// <summary> /// スティックの水平を取得 /// </summary> /// <param name="index">コントローラーの番号</param> /// <returns>スティックの垂直</returns> static public float GetHorizontal(int index) { #if AUTO_EXECUTE_DEBUG if (index == 0) { return(-1.0f); } #endif //未接続なら0.0f if (!SwitchManager.GetInstance().IsConnect(index)) { return(0.0f); } #if UNITY_SWITCH && !(UNITY_EDITOR) return(stickInfos[index].horizontal); #else return(ConvertSwitchHorizontalToXboxHorizontal(index)); #endif }
/// <summary> /// 入力の更新 /// </summary> /// <param name="_Index">コントローラーの番号</param> /// <param name="_NpadId">パッドのID</param> static public void InputUpdate(int _Index, NpadId _NpadId) { #if UNITY_EDITOR for (int i = 0; i < (int)XboxInput.None; ++i) { m_XboxPrevButtons[_Index, i] = m_XboxCurrentButtons[_Index, i]; m_XboxCurrentButtons[_Index, i] = InputXboxButton(_Index, (XboxInput)i); } #endif m_PrevButtons[_Index] = m_CurrentButtons[_Index]; //未接続 if (!SwitchManager.GetInstance().IsConnect(_Index)) { return; } //スタイルを取得 NpadStyle npadStyle = Npad.GetStyleSet(_NpadId); //スタイルが合うかどうか if ((npadStyle & SwitchManager.GetInstance().GetNpadStyle()) == 0) { return; } //入力情報を取得 Npad.GetState(ref m_NpadState, _NpadId, npadStyle); m_CurrentButtons[_Index] = (long)m_NpadState.buttons; //スティックの更新 if (npadStyle == NpadStyle.JoyRight) { m_StickInfos[_Index].m_Horizontal = m_NpadState.analogStickR.fy; m_StickInfos[_Index].m_Vertical = -m_NpadState.analogStickR.fx; } else if (npadStyle == NpadStyle.JoyLeft) { m_StickInfos[_Index].m_Horizontal = -m_NpadState.analogStickL.fy; m_StickInfos[_Index].m_Vertical = m_NpadState.analogStickL.fx; } else { Debug.LogError("JoyRight,JoyLeft以外のStyleを取得"); } }
/// <summary> /// ジャイロの取得 /// </summary> /// <param name="_Index">コントローラーの番号</param> /// <returns>ジャイロの回転(使用するx軸のみ)</returns> static public float GetGyroX(int _Index) { //未接続なら0.0f if (!SwitchManager.GetInstance().IsConnect(_Index)) { return(0.0f); } //キーがない場合は追加しておく if (!m_BaseGyro.ContainsKey(_Index)) { m_BaseGyro.Add(_Index, 0.0f); } //IDの取得 NpadId npadId = SwitchManager.GetInstance().GetNpadId(_Index); //スタイルの取得 NpadStyle npadStyle = Npad.GetStyleSet(npadId); //ハンドラを取得 int handleCount = SixAxisSensor.GetHandles(m_GyroHandles, 1, npadId, npadStyle); //ハンドラの数が1じゃない場合は0.0f if (handleCount != 1) { return(0.0f); } //ジャイロスタート SixAxisSensor.Start(m_GyroHandles[0]); //状態の取得 SixAxisSensor.GetState(ref m_GyroState, m_GyroHandles[0]); //右か左で返す値を変換する if (npadStyle == NpadStyle.JoyRight) { return(m_GyroState.angle.x % 1 * 360 - 90 - m_BaseGyro[_Index]); } else { return(m_GyroState.angle.x % 1 * -360 + 90 - m_BaseGyro[_Index]); } }
/// <summary> /// ジャイロの取得の実装部 /// </summary> /// <param name="index">コントローラーの番号</param> /// <returns>ジャイロの回転</returns> static Quaternion GetGyroImpl(int index) { #if UNITY_SWITCH && !(UNITY_EDITOR) //IDの取得 NpadId npadId = SwitchManager.GetInstance().GetNpadId(index); //スタイルの取得 NpadStyle npadStyle = Npad.GetStyleSet(npadId); //ハンドラを取得 int handleCount = SixAxisSensor.GetHandles(gyroHandles, 1, npadId, npadStyle); //ハンドラの数が1じゃない場合はQuaternion.identity if (handleCount != 1) { return(Quaternion.identity); } //ジャイロスタート SixAxisSensor.Start(gyroHandles[0]); //状態の取得 SixAxisSensor.GetState(ref gyroState, gyroHandles[0]); gyroState.GetQuaternion(ref refQuaternion); quat.Set(refQuaternion.x, refQuaternion.z, refQuaternion.y, -refQuaternion.w); #endif return(quat); }
/// <summary> /// 入力の更新 /// </summary> /// <param name="index">コントローラーの番号</param> /// <param name="npadId">パッドのID</param> static public void InputUpdate(int index, NpadId npadId) { prevButtons[index] = currentButtons[index]; //未接続 if (!SwitchManager.GetInstance().IsConnect(index)) { return; } //スタイルを取得 NpadStyle npadStyle = Npad.GetStyleSet(npadId); //スタイルが合うかどうか if ((npadStyle & SwitchManager.GetInstance().GetNpadStyle()) == 0) { return; } //入力情報を取得 Npad.GetState(ref npadState, npadId, npadStyle); npadState.buttons &= ~(NpadButton.StickLUp | NpadButton.StickRUp | NpadButton.StickLDown | NpadButton.StickRDown | NpadButton.StickLRight | NpadButton.StickRRight | NpadButton.StickLLeft | NpadButton.StickRLeft); if (npadStyle == NpadStyle.JoyLeft) { //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickL.fx) > DeadZone) { stickInfos[index].y = npadState.analogStickL.fx; npadState.buttons |= (npadState.analogStickL.fx > 0) ? NpadButton.StickLUp : NpadButton.StickLDown; } else { stickInfos[index].y = 0.0f; } //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickL.fy) > DeadZone) { stickInfos[index].x = -npadState.analogStickL.fy; npadState.buttons |= (npadState.analogStickL.fy > 0) ? NpadButton.StickLLeft : NpadButton.StickLRight; } else { stickInfos[index].x = 0.0f; } } else { //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickR.fx) > DeadZone) { stickInfos[index].y = -npadState.analogStickR.fx; npadState.buttons |= (npadState.analogStickR.fx > 0) ? NpadButton.StickRDown : NpadButton.StickRUp; } else { stickInfos[index].y = 0.0f; } //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickR.fy) > DeadZone) { stickInfos[index].x = npadState.analogStickR.fy; npadState.buttons |= (npadState.analogStickR.fy > 0) ? NpadButton.StickRRight : NpadButton.StickRLeft; } else { stickInfos[index].x = 0.0f; } } currentButtons[index] = (long)npadState.buttons; }
/// <summary> /// 入力の更新 /// </summary> /// <param name="index">コントローラーの番号</param> /// <param name="npadId">パッドのID</param> static public void InputUpdate(int index #if UNITY_SWITCH && !(UNITY_EDITOR) , NpadId npadId #endif ) { #if UNITY_EDITOR || !(UNITY_SWITCH) for (int i = 0; i < (int)XboxInput.None; ++i) { xboxPrevButtons[index, i] = xboxCurrentButtons[index, i]; xboxCurrentButtons[index, i] = InputXboxButton(index, (XboxInput)i); } #endif prevButtons[index] = currentButtons[index]; //未接続 if (!SwitchManager.GetInstance().IsConnect(index)) { return; } #if UNITY_SWITCH && !(UNITY_EDITOR) //スタイルを取得 NpadStyle npadStyle = Npad.GetStyleSet(npadId); //スタイルが合うかどうか if ((npadStyle & SwitchManager.GetInstance().GetNpadStyle()) == 0) { return; } //入力情報を取得 Npad.GetState(ref npadState, npadId, npadStyle); npadState.buttons &= ~(NpadButton.StickLUp | NpadButton.StickRUp | NpadButton.StickLDown | NpadButton.StickRDown | NpadButton.StickLRight | NpadButton.StickRRight | NpadButton.StickLLeft | NpadButton.StickRLeft); //スティックの更新 //右のジョイスティック if (npadStyle == NpadStyle.JoyRight) { //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickR.fx) > DeadZone) { stickInfos[index].horizontal = npadState.analogStickR.fx; npadState.buttons |= (npadState.analogStickR.fx > 0) ? NpadButton.StickLRight : NpadButton.StickLLeft; } else { stickInfos[index].horizontal = 0.0f; } //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickR.fy) > DeadZone) { stickInfos[index].vertical = npadState.analogStickR.fy; npadState.buttons |= (npadState.analogStickR.fy > 0) ? NpadButton.StickLUp : NpadButton.StickLDown; } else { stickInfos[index].vertical = 0.0f; } } //左のジョイスティック else { //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickL.fx) > DeadZone) { stickInfos[index].horizontal = npadState.analogStickL.fx; npadState.buttons |= (npadState.analogStickL.fx > 0) ? NpadButton.StickLRight : NpadButton.StickLLeft; } else { stickInfos[index].horizontal = 0.0f; } //デッドゾーンを超えているかどうか if (Mathf.Abs(npadState.analogStickL.fy) > DeadZone) { stickInfos[index].vertical = npadState.analogStickL.fy; npadState.buttons |= (npadState.analogStickL.fy > 0) ? NpadButton.StickLUp : NpadButton.StickLDown; } else { stickInfos[index].vertical = 0.0f; } } currentButtons[index] = (long)npadState.buttons; #endif }