我正在学习如何使用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);
}
}
有人可以帮助我理解为什么我不能沿该轴施加力吗?
特别是,当我使用以下指令执行脚本:
rigid2D.AddForce(new Vector3(0,10,0), ForceMode.Force);
时,我看到中心圆朝另一个方向移动。这是正确的。相反,当我使用该指令
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);
会将速度保持在垂直轴上。