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

如何让设置为Kinematic的Rigidbody2D通过触摸实现移动?

解决Kinematic模式下Rigidbody2D无法移动的问题

嘿,别担心,新手遇到这种问题太正常啦!你的代码现在用的是AddForce()方法,但Kinematic模式的Rigidbody2D不会响应任何力的作用——这种模式下刚体完全由代码直接控制,不受物理引擎的力影响,所以AddForce()自然就失效了。

下面是适配Kinematic模式的修改版代码,既保留你的触摸控制逻辑,又能让角色和Dynamic物体正常碰撞:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour {
    // 变量
    public float moveSpeed = 5f; // 这里建议调小数值,直接设置速度不需要原有的大系数
    public GameObject character;
    private Rigidbody2D characterBody;
    private float ScreenWidth;
    private float horizontalInput; // 存储触摸输入的方向

    // 初始化
    void Start() {
        ScreenWidth = Screen.width;
        characterBody = character.GetComponent<Rigidbody2D>();
        // 强制设置为Kinematic模式,避免手动勾选遗漏
        characterBody.isKinematic = true;
        // 如果不需要角色下落,把重力 scale 设为0
        characterBody.gravityScale = 0f;
    }

    // 处理输入(Update适合处理输入事件)
    void Update() {
        horizontalInput = 0f; // 每次Update重置输入状态

        // 遍历所有触摸点
        for (int i = 0; i < Input.touchCount; i++) {
            Touch touch = Input.GetTouch(i);
            if (touch.position.x > ScreenWidth / 2) {
                // 触摸右半屏,向右移动
                horizontalInput = 1.0f;
            } else if (touch.position.x < ScreenWidth / 2) {
                // 触摸左半屏,向左移动
                horizontalInput = -1.0f;
            }
        }

        #if UNITY_EDITOR
        // 编辑器里用键盘测试
        horizontalInput = Input.GetAxis("Horizontal");
        #endif
    }

    // 处理物理移动(FixedUpdate适合处理物理相关操作)
    void FixedUpdate() {
        // 直接设置刚体速度,Kinematic模式下有效,同时保留y轴原有速度(比如重力)
        characterBody.velocity = new Vector2(horizontalInput * moveSpeed, characterBody.velocity.y);
    }
}

关键改动说明:

  • 替换AddForce()为直接设置velocity:Kinematic刚体只会响应velocity或MovePosition()这类直接控制的方法,这样既保证移动,又能和Dynamic物体产生碰撞交互。
  • 分离输入与移动逻辑:输入在Update里处理,物理移动在FixedUpdate执行,这是Unity的最佳实践,避免帧率波动导致移动不流畅。
  • 调整moveSpeed数值:直接设置速度不需要原有的大系数(原300是给AddForce用的),建议从5左右开始测试调整。

额外检查项:

  • 确保角色对象上有Collider2D组件(比如BoxCollider2D),否则无法和其他物体产生碰撞。
  • 确认Rigidbody2D的Is Kinematic选项已勾选,Gravity Scale根据游戏需求设置(平面移动就设为0)。

这样修改后,你的角色在Kinematic模式下就能正常通过触摸左右移动,同时和Dynamic物体产生碰撞啦!祝你第一款安卓游戏开发顺利😉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:27:32