You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D移动端双人乒乓游戏:分区域手指控制物体X轴移动实现

移动端双人乒乓游戏:区域限制与双人触摸控制实现

核心思路

  1. 划分触摸区域:以屏幕中线为界,左半区归玩家1,右半区归玩家2
  2. 触摸位置转换:将屏幕触摸坐标转为世界坐标,仅保留X轴用于控制 paddle 横向移动
  3. X轴范围限制:用Mathf.Clamp限制 paddle 的X轴移动范围,防止超出游戏区域
  4. 绑定对应 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:50:19