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

Posted

技术标签:

【中文标题】如何在 Unity3D 中制作平滑的十字准线?【英文标题】:How to make a smooth crosshair in Unity3D? 【发布时间】:2021-07-03 16:35:05 【问题描述】:

在 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;
    

【问题讨论】:

补间可能是一个很好的解决方案,除非它需要物理,否则我不会为你的十字准线使用刚体。 Here's 免费补间库,但那里有很多 为什么你的准星使用物理?一般来说,您可以简单地通过Vector2.Lerp 进行插值 是的,我认为我不需要物理作为准星。我会试试勒恩。感谢您的提示!:) 我也会尝试 DOTween ... 【参考方案1】:

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

然后将速度乘以速度,十字准线将在一帧内移动到敌人的位置。 但是你可以通过一些浮动> 0和

【讨论】:

我会检查一下 - 感谢您的提示!:)

以上是关于如何在 Unity3D 中制作平滑的十字准线?的主要内容,如果未能解决你的问题,请参考以下文章

如何在剑道图表十字准线工具提示中提供 X 轴和 Y 轴值?

Highcharts 十字准线标签是传奇的背后

Plotly:如何仅将垂直和水平线(十字准线)显示为悬停信息?

如何在 Designer-qt5 中推广的 PlotWidget() 上制作十字线鼠标跟踪器

Eclipse 光标变为十字准线

如何在 PlotWidget 内制作标签?