强制模式仅在Y轴Unity3D上工作

kit*_*une 1 c# unity-game-engine

我正在学习如何使用Unity3D.

我有这个场景,其中元素是两个PNG图像(两个黑色圆圈),我已将其与Rigidbody属性相关联(没有重力).

在此输入图像描述

在此输入图像描述

使用脚本我将水平轴的控制器关联起来并且它可以工作:我可以用键盘控制中心圆.

现在我试图联想一个恒定的力量.我的脚本如下.但它只能沿Y轴工作.我不能使它沿水平轴工作.

该脚本是:

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

public class CircleController : MonoBehaviour {

    float MaxSpeed = 10f;
    Rigidbody rigid2D;
    public Vector3 tensor;

    // Use this for initialization
    void Start()
    {
        rigid2D = GetComponent<Rigidbody>();
        rigid2D.AddForce(new Vector3(0,10,0), ForceMode.Force);
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float move = Input.GetAxis("Horizontal");
        rigid2D.velocity = new Vector2(move * MaxSpeed, rigid2D.velocity.y);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能帮助我理解为什么我不能沿着这条轴施加力吗?

特别是,当我用这条指令执行脚本时:rigid2D.AddForce(new Vector3(0,10,0), ForceMode.Force);我看到中心圆向另一个方向移动.这是正确的.

在此输入图像描述

相反,当我用这个指令执行它时,rigid2D.AddForce(new Vector3(10,0,0), ForceMode.Force);中心圆保持静止.

Hel*_*ium 5

你在Start函数中调用以下行(执行一次)

rigid2D.AddForce(new Vector3(10,0,0), ForceMode.Force);
Run Code Online (Sandbox Code Playgroud)

它通过给定值(10)向右侧的刚体施加力.物理引擎计算应用于刚体的加速度,并自动计算每帧的velocity(速度)和新位置.

但是,在中FixedUpdate,您调用以下行

float move = Input.GetAxis("Horizontal");
rigid2D.velocity = new Vector2(move * MaxSpeed, rigid2D.velocity.y);
Run Code Online (Sandbox Code Playgroud)

在这里,您可以在水平轴上强制刚体的速度,从而覆盖物理引擎计算的值.如果不按输入管理器中定义的按钮,则圆将保持在水平轴上,因为move它等于0.


调用时rigid2D.AddForce(new Vector3(0,10,0), ForceMode.Force);,圆圈向上移动,因为rigid2D.velocity = new Vector2(move * MaxSpeed, rigid2D.velocity.y);速度保持在垂直轴上.