我正在学习如何使用Unity3D。

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

c# - 强制模式仅在Y轴上起作用Unity3D-LMLPHP

c# - 强制模式仅在Y轴上起作用Unity3D-LMLPHP

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

现在,我正在尝试施加恒定的力量。我的脚本如下。但是它仅沿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);
    }
}


有人可以帮助我理解为什么我不能沿该轴施加力吗?

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

c# - 强制模式仅在Y轴上起作用Unity3D-LMLPHP

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

最佳答案

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

rigid2D.AddForce(new Vector3(10,0,0), ForceMode.Force);


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

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

float move = Input.GetAxis("Horizontal");
rigid2D.velocity = new Vector2(move * MaxSpeed, rigid2D.velocity.y);


在此,您可以在水平轴上施加刚体的速度,从而覆盖物理引擎计算的值。如果您不按输入管理器中定义的按钮,则由于move等于0,圆将仍然在水平轴上。



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

08-25 17:59