Unity3D移动端双人乒乓游戏:分区域手指控制物体X轴移动实现
移动端双人乒乓游戏:区域限制与双人触摸控制实现
核心思路
- 划分触摸区域:以屏幕中线为界,左半区归玩家1,右半区归玩家2
- 触摸位置转换:将屏幕触摸坐标转为世界坐标,仅保留X轴用于控制 paddle 横向移动
- X轴范围限制:用
Mathf.Clamp限制 paddle 的X轴移动范围,防止超出游戏区域 - 绑定对应 paddle:根据触摸所在区域,控制对应玩家的 paddle
完整代码示例
using UnityEngine; public class PaddleController : MonoBehaviour { // 拖拽赋值两个玩家的 paddle public Transform paddle1; // 下方玩家(对应你原来的transformPosition1) public Transform paddle2; // 上方玩家 // 每个 paddle 的X轴移动范围(可根据你的游戏区域调整) [Header("Paddle移动范围")] public float paddleMinX = -3.5f; public float paddleMaxX = 3.5f; // 固定 paddle 的Y轴位置(根据你的布局调整) private readonly float paddle1YPos = -4.74f; private readonly float paddle2YPos = 4.74f; void Start() { // 初始化 paddle 位置 paddle1.position = new Vector2(0, paddle1YPos); paddle2.position = new Vector2(0, paddle2YPos); } void Update() { // 遍历所有触摸点(支持同时触摸) foreach (Touch touch in Input.touches) { // 判断触摸属于左半区(玩家1)还是右半区(玩家2) bool isPlayer1 = touch.position.x < Screen.width / 2; // 将屏幕触摸坐标转为游戏世界坐标 Vector2 worldTouchPos = Camera.main.ScreenToWorldPoint(touch.position); // 仅取X轴控制,Y轴保持固定 float targetX = worldTouchPos.x; // 限制X轴在设定范围内,防止移出游戏区域 targetX = Mathf.Clamp(targetX, paddleMinX, paddleMaxX); // 更新对应 paddle 的位置 if (isPlayer1) { paddle1.position = new Vector2(targetX, paddle1YPos); } else { paddle2.position = new Vector2(targetX, paddle2YPos); } } } }
关键代码解释
- 区域判断:
touch.position.x < Screen.width / 2直接以屏幕中线划分控制区域,逻辑简单且适配不同分辨率 - 坐标转换:
ScreenToWorldPoint把触摸的屏幕坐标转成游戏世界坐标,确保 paddle 位置和触摸位置对应准确 - 范围限制:
Mathf.Clamp(targetX, min, max)强制X轴值在设定区间内,彻底解决 paddle 移出游戏区域的问题 - 移动端适配:用
Input.touches替代鼠标输入,支持双人同时触摸操作,符合移动端交互逻辑
额外提示
- 可以在Unity Inspector面板调整
paddleMinX和paddleMaxX数值,适配你的游戏实际屏幕宽度 - 如果需要非对称的区域划分(比如不是严格中线),可以自定义阈值,比如用
Screen.width * 0.4f作为左右区域分界 - 测试时切换到Unity的移动端模拟模式,或者直接打包到手机上测试触摸操作
内容的提问来源于stack exchange,提问作者firiskov
相关产品推荐
相关产品推荐

