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

Unity中流星体未向飞船移动反而下落的问题求助

问题描述

我正在用Unity制作第一款C#游戏。流星体本应向飞船移动,但它们会失去速度并开始向下坠落。添加子弹前代码运行正常,现在出现问题。游戏其余功能正常:可以射击流星体并摧毁,飞船碰撞后会重新定位。我认为问题不在代码上,而是Unity的某些设置问题,求排查思路。

流星体脚本代码

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

public class Meteoroid : MonoBehaviour
{
    [SerializeField] 
    private GameObject spaceship;

    [SerializeField] 
    private float speed = 100.0f;

    [SerializeField] 
    private Rigidbody2D rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = this.GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        // Move towards the spaceship's position
        transform.position = Vector2.MoveTowards(transform.position, spaceship.transform.position, speed * Time.deltaTime);
        // Adjust the rotation to face the spaceship
        transform.up = spaceship.transform.position - transform.position;
    }
}
排查思路
  • 检查Rigidbody2D核心设置
    • 确认Gravity Scale是否设为0,非0值会让流星体受重力牵引向下坠落。
    • 勾选Is Kinematic选项,因为你用transform.position直接控制移动,非运动学刚体的物理引擎会干扰位置赋值,导致移动异常。
    • 查看运行时Rigidbody2D的Velocity和Angular Velocity,是否被其他脚本(比如子弹碰撞逻辑)意外修改。
  • 排查子弹相关逻辑的影响
    • 检查子弹击中流星体的处理代码,是否在碰撞时给流星体添加了额外的力、修改了Rigidbody2D属性,或者误改了speed变量。
    • 确认子弹的碰撞器是否设置了Is Trigger,如果没开,物理碰撞可能会给流星体施加反向力,导致速度衰减。
  • 层级与碰撞矩阵检查
    • 查看流星体、飞船、子弹的层级(Layer),确认碰撞矩阵中没有错误的交互规则,避免不必要的物理作用。
  • 验证对象状态稳定性
    • 确认流星体在运行过程中没有被意外禁用或重新激活,这会导致Rigidbody2D的状态重置,引发移动问题。
  • 场景环境排查
    • 检查场景中是否存在其他物理影响源(比如区域重力组件、全局力脚本),是否会作用在流星体上。
    • 临时移除子弹相关的对象或脚本,验证问题是否消失,确认是添加子弹后引入的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:01:12