首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我试图使它上下浮动时,我的模型不保持不变。

当我试图使它上下浮动时,我的模型不保持不变。
EN

Stack Overflow用户
提问于 2021-09-25 09:41:02
回答 1查看 52关注 0票数 0

堆栈溢出的人。我想为学校的个人项目制作一个无人机游戏。一切都进行得很顺利,但我现在面临一个问题。当我按下选定的按钮时,我的无人机脚本不会使无人机保持在一个恒定的高度。换句话说,当我按下E或Q键时,无人机会持续上升或持续下降。我希望只要我按下所选的键,它就会上升。我该怎么做?

代码->

代码语言:javascript
运行
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Levitating : MonoBehaviour
{
    Rigidbody ourDrone;

private void Awake()
{
    ourDrone = GetComponent<Rigidbody>();
}

// Make the drone default velocity the same value of the gravity acceleration, with opposite direction
private Vector3 DRONE_DEFAULT_VELOCITY = new Vector3(0, 9.81f, 0);

public float upForce;

private void Update()
{
    MovementUpDown();
}

private void FixedUpdate()
{
    ourDrone.AddRelativeForce(DRONE_DEFAULT_VELOCITY * upForce);
}

void MovementUpDown()
{
    if (Input.GetKey(KeyCode.E))
    {
        upForce = 15;
    }
    else if (Input.GetKey(KeyCode.Q))
    {
        upForce = -3;
    }
    else
    {
        // Resetting the force muultiplier
        upForce = 1;
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-25 12:55:59

问题是你的物理是错的。在默认模式下(upForce = 1),你要取消重力,所以没有加速度作用于你的rb。然而,当你按下一个控制按钮的时候,你增加了一个力,因此,按照牛顿定律,你加入了一个加速度,这会导致一个速度,即使你停止按下这个按钮,速度也会保持不变。现在,我不知道你为什么要像你一样对它建模,但最简单的解决方法是在你的刚体上禁用重力,直接修改rb的速度。或者在您的forceMode中使用不同的AddForce。https://docs.unity3d.com/ScriptReference/ForceMode.html使用速度变化。

如果你想像现实生活中那样对一个真正的无人机建模,你应该研究一下控制系统,比如PID,但这可能是过头了。

祝你好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69324934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档