Handron をスマホで動くようにしました。

横にドラッグすると根本の関節が回転し、縦にドラッグすると先端側の関節が回転します。

スマホ側は、「開発者向けオプションをON」にする必要があります(参考)。

設定>端末情報>ソフトウェア情報>ビルド番号(7回タップ)

Unity側は、

スマホをPCにUSBでつなぎ、基本的には、下の手順(参考、追記221011 参考)。

File > Build Setting > Android > Switch Platform
Player Setting > Product Name > 適当な名前
Build Setting > Build And Run

追記221011
Project Settings > Player > アンドロイドタブ
Other Settings > Color Space > Gammma (リコメンドされていた)
Identification > Package Name > com.SCC.handron_wars (とすでに書かれてグレイアウトされていた)
Configuration > Scripting Backend > IL2CPP(64bit対応にする)
Configuration> Target Architectures > ARMv7, ARM64, x86, x86-64すべてにチェック(IL2CPP にしたらリコメンドされた)

publishing Settingでkeyを作った(参考)。

これでスマホ側でアプリが動きます。

オブジェクトの構成

基本的には、こちらのブログの構成と同じですが、パッドがボールに乗り上げないように、赤い根本のシリンダーは、若干低くしました。

これに加えて ball というprefab を作っています。

jointBのパラメータは以下のとおり。

jointCも同様です。

スクリプト

JointA に張り付けたもの。マウス操作だけでなく、キー(adws)でも動かせるようにしています。
本当はファイルを別にすべきですが、ボールを出現させる機能も持たせています。

using UnityEngine;

public class MouseController : MonoBehaviour
{
    public ArticulationBody abodyB;
    public ArticulationBody abodyC;
    public GameObject objPrefab;
    public float speedX = 1.0f;
    public float speedY = 1.0f;
    public float interval = 2.0f;

    private Vector2 lastMousePosition;
    private GameObject clone;
    void Start()
    {
        InvokeRepeating("GenerateObj", 0.1f, interval);
    }

    void Update()
    {
        mouseController();
        keyController();
    }

    void GenerateObj()
    {
        Vector3 pos = new Vector3(Random.Range(-1.6f, 1.6f), 5.0f, 20.0f);
        Quaternion rot = Quaternion.Euler(0, 0, 0);
        clone = Instantiate(objPrefab, pos, rot);
        clone.GetComponent<Rigidbody>().AddForce(0, 0, Random.Range(-100.0f, -500.0f));
    }

    void mouseController()
    {
        if (Input.GetMouseButtonDown(0))
        {
            lastMousePosition = Input.mousePosition;
        }
        else if (Input.GetMouseButton(0))
        {
            var dx = (Input.mousePosition.x - lastMousePosition.x);
            var dy = (Input.mousePosition.y - lastMousePosition.y);

            var xDrive = abodyB.xDrive;
            xDrive.target += speedX * dx;
            abodyB.xDrive = xDrive;

            xDrive = abodyC.xDrive;
            xDrive.target += speedY * dy;
            abodyC.xDrive = xDrive;

        }
        lastMousePosition = Input.mousePosition;

    }

    void keyController()
    {
        if (Input.GetKey(KeyCode.A))
        {
            var xDrive = abodyB.xDrive;
            xDrive.target -= 1f;
            abodyB.xDrive = xDrive;
        }
        if (Input.GetKey(KeyCode.D))
        {
            var xDrive = abodyB.xDrive;
            xDrive.target += 1f;
            abodyB.xDrive = xDrive;
        }
        if (Input.GetKey(KeyCode.W))
        {
            var xDrive = abodyC.xDrive;
            xDrive.target -= 1f;
            abodyC.xDrive = xDrive;
        }
        if (Input.GetKey(KeyCode.S))
        {
            var xDrive = abodyC.xDrive;
            xDrive.target += 1f;
            abodyC.xDrive = xDrive;
        }
        
    }
}

関連付けたobjectとパラメータは、以下の通り。

Prefab につけたもの。時間で消滅するようにしています。

using UnityEngine;
 
public class DestroyObj : MonoBehaviour
{
    public float deleteTime = 10.0f;
 
    void Start()
    {
        Destroy(gameObject, deleteTime);
    }
}