所以
下面你会看到我最初用来控制角色动作的内容。
_RigidBody.velocity = _ConstantWalkingSpeed * direction.normalized;
这适用于四个方向走动。然而,如果我的角色落在边缘,他会慢慢地落在家里。如果我在半空中禁用行走脚本,重力会加速并以正常速度运行。
这让我相信我的动作脚本会以某种方式影响重力效应。
因此我尝试了这个解决方案:
_RigidBody.velocity = _ConstantWalkingSpeed * direction.normalized + new Vector3(0f, _RigidBody.velocity.y, 0f);
这也不起作用,所以我尝试了这个:
_RigidBody.velocity = _ConstantWalkingSpeed * direction.normalized + new Vector3(0f, _RigidBody.velocity.y, 0f) + Physics.gravity;
这确实使重力发挥作用,但随后引力变得如此强烈以至于我无法移动。
我只尝试添加Physics.gravity并跳过新的矢量部分,但是引力仍然太强了。
TL; DR
我使用的移动脚本会影响玩家的向下重力,而不应该这样。我希望他四处走动但仍受重力影响。我尝试的想法没有用。
请注意,我宁愿将引力保持在-9.81。
希望你们有一个有效的建议: - )
答案 0 :(得分:2)
您可以使用RigidBody.movePositon
:
这是我写的一个快速示例脚本:
using UnityEngine;
public class simpleMoveRB : MonoBehaviour {
public Rigidbody myBody;
public float _constantWalkSpeed = 3.0f;
Vector3 moveDirection = Vector3.zero;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update() {
if (Input.GetKey(KeyCode.A))
{
moveDirection.x = -1.0f;
}
else if(Input.GetKey(KeyCode.D))
{
moveDirection.x = 1.0f;
}
else
{
moveDirection.x = 0.0f;
}
if(Input.GetKeyDown(KeyCode.Space))
{
myBody.AddForce(Vector3.up * 500.0f);
}
}
private void FixedUpdate()
{
myBody.MovePosition(transform.position + moveDirection * _constantWalkSpeed * Time.deltaTime);
}
}
您可以使用此脚本处理移动,并且仍然可以对您的对象进行重力处理。
答案 1 :(得分:0)
不是设置速度,而是修改速度。
你用输入覆盖物理引擎施加的任何速度(例如重力)。
_RigidBody.velocity += _ConstantWalkingSpeed * direction.normalized;
您可能还想将速度X和Z值限制为最大值:
Vector3 vel = _RigidBody.velocity;
vel.x = Mathf.Min(vel.x, ConstantWalkingSpeed);
vel.z = Mathf.Min(vel.z, ConstantWalkingSpeed);
_RigidBody.velocity = vel;