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

移动端触摸实现火柴人曲线左右跳跃 现有脚本需优化

实现火柴人触摸任意区域的曲线跳跃切换

你当前的脚本依赖触摸屏幕区域来瞬间移动火柴人,要实现任意触摸触发曲线跳跃切换两侧的效果,可以按以下思路修改:

核心思路

  • 预设左右两个固定位置,触摸屏幕任意区域时,切换火柴人到另一侧
  • 用协程实现抛物线轨迹的平滑移动,替代瞬间位置改变
  • 加一个状态锁,避免跳跃过程中重复触发

修改后的完整代码

using UnityEngine;

public class StickmanJump : MonoBehaviour
{
    // 左右两侧的目标位置(可在Inspector面板调整)
    [SerializeField] private Vector2 leftPos = new Vector2(-1.75f, 0);
    [SerializeField] private Vector2 rightPos = new Vector2(1.75f, 0);
    // 跳跃高度和完成跳跃的时间
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float jumpDuration = 0.5f;

    // 是否正在跳跃的状态锁
    private bool isJumping = false;

    void Update()
    {
        // 检测触摸开始事件,任意位置触摸都触发
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began && !isJumping)
            {
                // 判断当前位置,切换到另一侧
                Vector2 targetPos = transform.position.x < 0 ? rightPos : leftPos;
                StartCoroutine(JumpToTarget(targetPos));
            }
        }
    }

    // 协程实现抛物线跳跃逻辑
    private IEnumerator JumpToTarget(Vector2 target)
    {
        isJumping = true;
        Vector2 startPos = transform.position;
        float elapsedTime = 0f;

        while (elapsedTime < jumpDuration)
        {
            elapsedTime += Time.deltaTime;
            // 计算进度(0到1)
            float progress = elapsedTime / jumpDuration;
            // 用正弦函数实现抛物线的高度变化(先上升后下降)
            float heightOffset = Mathf.Sin(progress * Mathf.PI) * jumpHeight;
            // 线性插值计算当前位置,加上高度偏移
            Vector2 currentPos = Vector2.Lerp(startPos, target, progress);
            currentPos.y += heightOffset;

            transform.position = currentPos;
            yield return null;
        }

        // 确保最终位置精准落在目标点
        transform.position = target;
        isJumping = false;
    }
}

代码说明

  • 目标位置配置:leftPos和rightPos可以在Unity编辑器里直接调整,不用改代码
  • 跳跃参数:jumpHeight控制跳跃的最高点,jumpDuration控制跳跃的快慢,根据手感调整
  • 触摸逻辑:只要检测到触摸开始,且不在跳跃状态,就触发切换跳跃
  • 曲线轨迹:利用Mathf.Sin生成抛物线的高度变化,结合线性插值实现平滑的位置过渡
  • 状态锁:isJumping避免跳跃过程中重复触发,防止位置混乱

使用注意

  1. 把脚本挂载到火柴人对象上
  2. 在Inspector面板设置好左右位置、跳跃高度和时间
  3. 测试时确保移动设备的触摸输入正常

内容的提问来源于stack exchange,提问作者Exby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:20