当我第一次编码播放器的运动时,除了一件事情,一切都很好:当它与墙壁碰撞时,它会振动/抖动。所以我将原来使用的transform.Translate()替换为Rigidbody2D.Moveposition();它像魅力一样运作。但是现在,每当我移动时,它都会振动/传送,并且移动不平稳。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
private Rigidbody2D rigidbody2d;
float MovementX = 0;
float MovementY = 0;
public float Speed = 5f;
void Start()
{
rigidbody2d = GetComponent<Rigidbody2D>();
}
void Update()
{
if (MovementX < 0)
transform.localScale = new Vector2(-1, 1);
if (MovementX > 0)
transform.localScale = new Vector2(1, 1);
//transform.Translate(Movement);
//rigidbody2d.MovePosition(Movement);
//rigidbody2d.AddForce(Movement * Speed);
}
private void FixedUpdate()
{
MovementX = Input.GetAxis("Horizontal") * Speed * Time.deltaTime;
MovementY = Input.GetAxis("Vertical") * Speed * Time.deltaTime;
//MovementX = movementJoystick.Horizontal * Speed * Time.deltaTime;
//MovementY = movementJoystick.Vertical * Speed * Time.deltaTime;
Vector2 Movement = new Vector2(transform.position.x + MovementX, transform.position.y + MovementY);
rigidbody2d.MovePosition(Movement);
}
}
正如我之前说过的,玩家应该平稳移动,但不能移动。如果您愿意,我可以尝试链接一个关于游戏玩法的视频。
谢谢。
答案 0 :(得分:1)
Rigidbody2D具有一个称为“速度”的属性,如果您在更新类时设置刚体的速度,则应该可以解决您的问题。代码可能看起来像这样:
rigidbody2d.velocity = new Vector2(MovementX, MovementY);;
答案 1 :(得分:0)
我通过将fixedTimestep选项设置为0.02到0.005来解决。似乎很奇怪,但是可以。