如何在 Unity3D 中制作平滑的十字准线?

问题描述

在 Unity 3D 中,我想为自上而下的 2D 射击游戏创建一个十字准线,当玩家与目标具有相同的 x 位置时,该准星会逐渐移动到其目标。

问题是当十字准线移动到目标时我想要一个平滑的动画。我已经包含了另一个游戏的小 gif,它显示了我想要实现的十字准线。看看吧:

Crosshair video

我尝试使用以下脚本执行此操作但失败了 - 当敌人出现时,十字准线会前后跳跃。它看起来不像我上面提到的视频那么流畅。

以下脚本附加到播放器:

[Serializefield]
private GameObject crosshairGO;
[Serializefield]
private float speedCrosshair = 100.0f;

private Rigidbody2D crosshairRB;
private bool crosshairBegin = true;

void Start () {

crosshairRB = crosshairGO.GetComponent<Rigidbody2D>();
crosshairBegin = true;
}


void FixedUpdate() {
    //Cast a ray straight up from the player
    float _size = 12f;
    Vector2 _direction = this.transform.up;
    RaycastHit2D _hit = Physics2D.Raycast(this.transform.position,_direction,_size);

    if (_hit.collider != null && _hit.collider.tag == "EnemyShipTag") {
        // We touched something!
        Debug.Log("we touched the enemy");
    
        Vector2 _direction2 = (_hit.collider.gameObject.transform.position - crosshairGO.transform.position).normalized;
        crosshairRB.veLocity = new Vector2(this.transform.position.x,_direction2.y * speedCrosshair);
        crosshairBegin = false;
    } else {
        // nothing hit
        Debug.Log("nothing hit");
        crosshairRB.veLocity = Vector2.zero;
        Vector2 _pos2 = new Vector2(this.transform.position.x,4.5f);
        if (crosshairBegin) crosshairGO.transform.position = _pos2;
    }
}

解决方法

我认为你需要创建一个新的变量调用速度翻译 和 速度=从十字准线到敌人位置的距离/时间(这里是Time.fixedDeltaTime);

然后将速度与速度相乘,十字准线将在一帧内移动到敌人位置。 但是您可以通过使用一些浮点数 > 0 和