有一个箭头指向我瞄准的方向

本文关键字:方向 有一个 | 更新日期: 2023-09-27 18:06:05

我希望我的箭头指向我在游戏中的目标。

目前,我的预制实例在屏幕的中心指向左边。当我移动我的箭头时,这个点仍然在左边。我该如何让箭头至少指向屏幕中心,或者根据玩家瞄准的方向进行移动?

例如,如果我的玩家瞄准屏幕的左上角,箭头就会朝那个方向发射。

这是我目前为止的代码:

public Object _projectilePrefab;
private bool _pressed = false;
public GameObject _flystickPosition;
private GameObject _currentProjectile;
private Vector3 _firePoint;
private float _startTime;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
int x = 0;
int y = 0;

// Use this for initialization
void Start()
{
    _currentProjectile = (GameObject)Instantiate(_projectilePrefab, _flystickPosition.transform.position, _flystickPosition.transform.rotation);
    _firePoint = Camera.mainCamera.transform.position - new Vector3(1, 1, 0);
    _startTime = (Time.time * 10.0f);
    //_serialData = GetComponent<ReadSerial>();
    //_udpData = GetComponent<HV_ReadUDPData>();
}
// Update is called once per frame
void Update()
{
    _firePoint = Camera.mainCamera.transform.position - new Vector3(1, 1, 0);
    float _moveBananaY = transform.localEulerAngles.y + Input.GetAxisRaw("LeftRight") * sensitivityX;

    float _moveBananaX = transform.localEulerAngles.x + Input.GetAxisRaw("UpDown") * sensitivityY;
    transform.localEulerAngles = new Vector3(_moveBananaX, _moveBananaY, 0);
    if (Input.GetKeyDown(KeyCode.LeftArrow))
    {
        y--;
    }
    if (Input.GetKeyDown(KeyCode.RightArrow))
    {
        y++;
    }
    if (Input.GetKeyDown(KeyCode.UpArrow))
    {
        x--;
    }
    if (Input.GetKeyDown(KeyCode.DownArrow))
    {
        x++;
    }

    float xPercent = 0;
    float yPercent = 0;
    xPercent = x / 25.0f;
    yPercent = y / 25.0f;

    _flystickPosition.transform.parent.localEulerAngles = new Vector3(xPercent * 90, yPercent * 90, 0.0f);
    float smooth = Time.time - _startTime;
    _currentProjectile.transform.position = Vector3.Lerp(lerpFrom, _flystickPosition.transform.position, smooth);

    if (Input.GetKeyDown(KeyCode.Space))
    {
        _currentProjectile.GetComponent<Rigidbody>().velocity = _flystickPosition.transform.parent.forward.normalized * 20;

        _currentProjectile = null;
        _currentProjectile = (GameObject)Instantiate(_projectilePrefab, _firePoint, transform.rotation);
        lerpFrom = _currentProjectile.transform.position;
        _startTime = Time.time;
    }
}

所有这些代码都可以在我的fire抛射类中找到。它连在我的照相机上。

有一个箭头指向我瞄准的方向

如果我没理解错的话,你的游戏是2D的。不过这并不重要。对于你的问题,我有两个解决方案:

  1. 你可以通过使用简单的矢量数学得到你指向的方向。Vector3(to - from)。所以你的箭头指向的方向是:Target.transform.position - Player.transform.position。现在,当它指向正确的方向时,你可以像这样移动它:Arrow.transform.Translate (Vector3。* Time.deltaTime);

同样,如果你的箭头必须指向目标,但与玩家保持不同的位置,只需从玩家到目标进行光线投射,获得光线投射点,就有你的箭头"Vector3 .

  • 如果箭头总是模仿用户旋转,你可以简单地对箭头应用旋转。如果旋转不匹配(即你的对象是旋转的),只需添加空的游戏对象来模拟旋转,并将箭头作为它的子对象。现在你可以随意旋转它了。