先解释一下为什么会出现碰撞时精灵抖动的bug:
有一种可能是我们修改精灵的位置时是对精灵的transform中的position进行操作,这样会不考虑物理碰撞,所以两个精灵碰撞时会相互嵌入,然后因为物理引擎又会相互分离,如此往复;
那么我们要修改bug怎么弄呢?很好解决,我们只要利用Rigidbody2D提供的position即可;
我们先在脚本中声明一个Rigidbody2D实例【在命名空间UintyEngine中】,然后在start函数中将该脚本中的Rigidbody变量赋值给我们声明出的实例,然后就可以使用了:
具体代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KingBlack : MonoBehaviour
{
// Start is called before the first frame update
Rigidbody2D KingRigidbody;
float Horizontal;
float Vertical;
private float Speed = 100;
void Start()
{
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = 165;
KingRigidbody = GetComponent<Rigidbody2D>();//获取脚本所在对象的Rigidbody类
}
// Update is called once per frame
void Update()
{
Horizontal = Input.GetAxis("Horizontal");
Vertical = Input.GetAxis("Vertical");
}
private void FixedUpdate()
{
Vector2 Position = KingRigidbody.position;
Position.x += 0.1f * Horizontal*Time.deltaTime*Speed;
Position.y += 0.1f * Vertical * Time.deltaTime * Speed;
KingRigidbody.position = Position;
Debug.Log($"{Horizontal}");
}
}
然后是旋转的bug,这个其实非常好修改。
说方法前先说为什么会有这个bug;
很简单,这是因为我们精灵的Z轴还是自由的,所以两个精灵配置时物理引擎会考虑两者的Z轴角动量,所以会产生旋转,我们只需要Freeze Z轴即可: