ใช้การควบคุมอินพุตที่ปรับให้เหมาะสมกับการสัมผัสด้วยการควบคุมบนหน้าจอ
สภาพแวดล้อมการตรวจสอบ
- หน้าต่าง
-
- หน้าต่าง 11
- บรรณาธิการ Unity
-
- ปี 2020.3.25f1
- แพ็คเกจระบบอินพุต
-
- 1.2.0
ข้อกําหนดเบื้องต้นสําหรับเคล็ดลับนี้
การตั้งค่าต่อไปนี้ได้ทําไว้ล่วงหน้าเพื่อเป็นหลักฐานสําหรับคําอธิบายของเคล็ดลับนี้
คุณควรทําความคุ้นเคยกับเคล็ดลับต่อไปนี้:
เกี่ยวกับการควบคุมบนหน้าจอสําหรับการสัมผัส
ฉันมักจะใช้แป้นพิมพ์หรือเกมแพดเพื่อเล่นเกม บนอุปกรณ์ที่สามารถใช้งานได้โดยการสัมผัสเท่านั้นเช่นสมาร์ทโฟนคุณจะเล่นเกมด้วยการสัมผัส
แพ็คเกจระบบอินพุตของ Unity ใช้การควบคุมบนหน้าจอเพื่อจําลองการโต้ตอบแบบสัมผัสราวกับว่าถูกควบคุมโดยคอนโทรลเลอร์
ก่อนการควบคุมบนหน้าจอ
บทความนี้มีความยาวเล็กน้อย แต่หัวข้อนี้ไม่เกี่ยวข้องโดยตรงกับการควบคุมบนหน้าจอ หากคุณสามารถใช้แพ็คเกจระบบอินพุตในขั้นตอนอื่น ๆ เพื่อตรวจสอบอินพุตเช่น gamepad ก็ไม่เป็นไร
ในเคล็ดลับนี้เราจะสร้างแผนที่การกระทํา อธิบายวิธีจําลองการสัมผัสเกมแพดราวกับว่าคุณกําลังโต้ตอบกับมัน
นอกจากนี้ยังรองรับวิธีการใช้คลาสและGamepad
คลาสในKeyboard
สคริปต์แทนแผนที่การกระทํา
ฉันจะไม่อธิบายในครั้งนี้ แต่ถ้าคุณต้องการลองใช้กับชั้นเรียนเหล่านั้นคุณสามารถเตรียมรหัสที่อธิบายไว้ในหน้าต่อไปนี้แทน
- การทํางานด้วยคีย์บอร์ด (Input System Package Version)
- การควบคุมด้วย Gamepad (Input System Package Version)
ขั้นแรก ให้วางวัตถุข้อความบน Canvas เพื่อแสดงอินพุตของคุณ ต่อมาเราจะวางวัตถุสัมผัสไว้ที่ด้านล่างดังนั้นเว้นที่ว่างไว้
ขั้นแรกให้สร้างแผนที่การกระทําดังนี้: คุณกําลังสร้างการดําเนินการแบบเดียวกับที่คุณทําเมื่อคุณอธิบายแผนที่การดําเนินการ
เนื่องจากคําอธิบายของแผนที่การกระทําไม่ใช่สิ่งสําคัญการผูกจึงเป็นเรื่องง่าย โปรดดูหน้าต่อไปนี้สําหรับรายละเอียดบนแผนที่การดําเนินการ
คราวนี้การรับอินพุตจะดําเนินการโดยสคริปต์แทน "ส่งข้อความ" หรือ "เรียกใช้เหตุการณ์ความสามัคคี" สิ่งนี้ไม่ จํากัด เฉพาะสคริปต์และทํางานได้อย่างถูกต้องแม้ว่าคุณจะใช้ "ส่งข้อความ" เป็นต้น
ตรวจสอบให้แน่ใจว่าคุณได้สร้างโค้ดจาก Action Map แล้ว
สคริปต์มีลักษณะดังนี้: มันเกือบจะเหมือนกับเมื่ออธิบายแผนที่การกระทํา
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class InputActionScript : MonoBehaviour
{
<summary>情報を表示させるテキストオブジェクト。</summary>
[SerializeField] private Text TextObject;
<summary>アクションマップから自動生成されたクラス。</summary>
private InputActionSample _actionMap;
private void Awake()
{
// 各操作を行ったときに呼ばれるイベントを設定する
_actionMap = new InputActionSample();
_actionMap.Action2D.Move.performed += context => OnMove(context);
_actionMap.Action2D.Attack.performed += context => OnAttack(context);
_actionMap.Action2D.Move.canceled += context => OnMove(context);
_actionMap.Action2D.Attack.canceled += context => OnAttack(context);
}
private void OnEnable()
{
// このオブジェクトが有効になったときにアクションマップを有効にする
_actionMap.Enable();
}
private void OnDisable()
{
// このオブジェクトが無効になったときにアクションマップが余計な動作を起こさないように無効にする
_actionMap.Disable();
}
<summary>
Move 操作をした時に呼ばれるメソッドです。
</summary>
<param name="context">コールバックパラメータ。</param>
public void OnMove(InputAction.CallbackContext context)
{
// Move の入力量を取得
var vec = context.ReadValue<Vector2>();
TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
}
<summary>
Attack 操作をした時に呼ばれるメソッドです。
</summary>
<param name="context">コールバックパラメータ。</param>
public void OnAttack(InputAction.CallbackContext context)
{
// Attack ボタンの状態を取得
var value = context.ReadValueAsButton();
TextObject.text = $"Attack:{value}\n{TextObject.text}";
}
}
สคริปต์ EventSystem
แนบมากับ .
เรียกใช้เกมเพื่อดูว่าทํางานเป็นแผนที่การกระทําหรือไม่
ปุ่มบนหน้าจอ
ปุ่มบนหน้าจอจําลองการกดปุ่มบนแป้นเกม เช่น A และ B และปุ่มบนแป้นพิมพ์เมื่อคุณสัมผัสวัตถุบางอย่างบนหน้าจอ โดยวิธีการที่มันบอกว่าสัมผัส แต่ยังทํางานร่วมกับการคลิกเมาส์
ก่อนอื่นให้วางปุ่มบนหน้าจอ เนื่องจากคุณเพิ่งแนบส่วนประกอบจึงทํางานร่วมกับวัตถุอื่นที่ไม่ใช่ปุ่ม
เพิ่มปุ่มอินพุต>บนหน้าจอจากส่วนประกอบ
ตั้งค่าปุ่ม Gamepad ไปทางทิศตะวันออกจากเส้นทางควบคุม สิ่งนี้ทําให้ดูราวกับว่าปุ่มตะวันออกบน Gamepad ถูกกดเมื่อสัมผัส
ตรวจสอบให้แน่ใจว่า Attack ปรากฏขึ้นเมื่อคุณเรียกใช้เกมและคลิกปุ่ม หากเป็นอุปกรณ์ที่สัมผัสได้คุณสามารถยืนยันได้ว่าใช้งานได้กับการสัมผัส
สติ๊กบนหน้าจอ
On-Screen Stick ให้คุณเคลื่อนย้ายวัตถุต่างๆ เช่น แท่งด้วยการสัมผัสของคุณ เมื่อคุณย้ายไม้เท้าคุณสามารถจําลองได้ราวกับว่าคุณได้ย้ายแท่งเกมแพด นอกจากการสัมผัสแล้วยังสามารถเคลื่อนย้ายด้วยเมาส์ได้อีกด้วย
วางวัตถุปุ่มบนหน้าจอที่จะเป็นแท่งสัมผัส เราใช้ปุ่มที่นี่ แต่ยังใช้งานได้กับวัตถุอื่นที่ไม่ใช่ปุ่ม
ภายใต้ เพิ่มส่วนประกอบ ให้เลือก อินพุต > สติ๊กบนหน้าจอ
จากเส้นทางการควบคุม ให้เลือก Gamepad LeftStick ที่กําหนดไว้ในแผนที่แอคชัน
เรียกใช้เกมและลองลากปุ่ม Stick ปุ่มจะเคลื่อนที่เป็นวงกลมราวกับว่ากําลังเคลื่อนที่แท่ง แน่นอนคุณยังสามารถตรวจสอบว่าเนื้อหาอินพุตถูกดึงออกมาในขณะที่กําลังทํางานอยู่
ในกรณีนี้เราได้วางปุ่ม แต่ก็เป็นไปได้ที่จะทําให้ดูเหมือนแท่งเสมือนโดยการวางกรอบวงกลมและวัตถุแท่งกลม
อย่างไรก็ตามช่วงที่เคลื่อนย้ายได้นี้สามารถเปลี่ยนแปลงได้ใน "ช่วงการเคลื่อนไหว" ของแท่งบนหน้าจอ