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; } } }
Prefab につけたもの。時間で消滅するようにしています。
using UnityEngine; public class DestroyObj : MonoBehaviour { public float deleteTime = 10.0f; void Start() { Destroy(gameObject, deleteTime); } }
コメントを残す