2022年11月01日

Unityゲーム開発実況406

こんにちは! み です!
朝、布団から出るのが億劫な季節になってきましたね。
ずーっと寝ていたい気分ですがそうもいきません。
だってゲームを作りたいから。
arm1_S.jpg
画像はboyの手をマウスまたはコントローラーを使って動かしているシーンです。
動画はtwitterで公開中ですので是非見てね!
https://twitter.com/infomatre/status/1587212969108459520

このシーンはちょっとばかり苦労しました。
unityでコントローラーを使ってマウスを動かすのは少し小細工が必要でした。
Input.mousePositionを使わずGetCursorPosを使いました。
以下にコードを載せておきます。
(抜き出しコピペです。)
------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
------------------------------------------------------
//マウスカーソル移動 windows win32から
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
[DllImport("user32.dll")]
public static extern bool SetCursorPos(int x, int y);

float stick_x = 0.0f; //スティック入力値
float stick_y = 0.0f; //スティック入力値
Vector3 mouse_pos; //現在のマウスポジション

public struct POINT
{
public int x;
public int y;
}
------------------------------------------------------
//右スティック状態確保
stick_x = Input.GetAxis("Horizontal2"); //コントローラー右スティックの入力値
stick_y = Input.GetAxis("Vertical2"); //コントローラー右スティックの入力値
//スティックが傾いた時だけマウスカーソルを動かす
if (stick_x != 0 || stick_y != 0)
{
//現在のマウスポジション
POINT pos;
GetCursorPos(out pos);
mouse_pos.x = (float)pos.x;
mouse_pos.y = (float)pos.y;

if (stick_x > 0)
{
mouse_pos.x = mouse_pos.x + (10.0f * stick_x);
}
if (stick_x < 0)
{
mouse_pos.x = mouse_pos.x - (10.0f * -stick_x);
}
if (stick_y > 0)
{
mouse_pos.y = mouse_pos.y + (10.0f * stick_y);
}
if (stick_y < 0)
{
mouse_pos.y = mouse_pos.y - (10.0f * -stick_y);
}
SetCursorPos((int)mouse_pos.x, (int)mouse_pos.y);
------------------------------------------------------
という感じです。
kaiware007さんのページを参考にしました。
https://gist.github.com/kaiware007/70b03391804088b3660893bde138ee4e
ありがとうございました!

今日はこの辺で!
またねー!
ばいばーい!


posted by み at 07:38| Comment(0) | 日記