private Rigidbody2D rigidbody2d;
rigidbody2d =GetComponent<Rigidbody2D>();
private Rigidbody2D rigidbody2d;
rigidbody2d =GetComponent<Rigidbody2D>();
修复Ruby移动抖动问题
抖动发生的原因是因为unity的物理引擎的代码与我们自己制作的c#的代码chong'tu
单纯的使用transform组件进行角色的移动控制,当角色身上的RigidyBody组件和别的碰撞器检测碰撞 和 角色本身的通过Transform组件进行移动的脚本会发生冲突,导致角色发生碰撞时闪动
解决方法:直接通过RigidyBody组件提供的MovePosition方法进行移动
防止小人碰撞物体时抖动
修改代码 将代码控制transform移动 改为控制刚体移动
public class RubyController : MonoBehaviour
{
private Rigidbody2D rigidbody2d;
// Start is called before the first frame update
void Start()
{
rigidbody2d = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Debug.Log(horizontal);
Vector2 position = transform.position;
position.x = position.x + 5f*horizontal*Time.deltaTime;
position.y = position.y + 5f*vertical*Time.deltaTime;
//transform.position = position;
rigidbody2d.MovePosition(position);
}
}
rigidbody2d.MovePosition(position);
用rigidbody2d来移动
理解处理问题的逻辑:
既然自己的运动操作逻辑和引擎组件的逻辑发生冲突,那么就修改
private Rigidbody2D rigidbody2D;
修改对象本身坐标位置与修改对象关联的刚体的位置会有轻微差别 修改本身坐标与可能出现抖动
fixedUpdate 替换update
或者直接使用riigibody 本身来进行移动。
rigibody2d.MovePosition();