0

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

目前,我的预制件在屏幕中心向左实例化。当我移动箭头时,该点仍然保持在左侧。我怎样才能让箭头至少指向我的屏幕中心,或者理想情况下,有一种移动方式,具体取决于玩家瞄准的方向。

例如,如果我的玩家瞄准屏幕的左上角,则箭头指向该方向并朝该方向射击。

这是我到目前为止的代码:

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;

    }
}

所有这些代码都可以在我的 FireProjectile 类中找到。它附在我的相机上。

4

1 回答 1

0

好吧,如果我理解正确,您的游戏是 2D 的。不过它并不重要。我会为您的问题提供两种解决方案:

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

此外,如果您的箭头必须指向目标,但与玩家保持不同的位置,只需从玩家投射到目标,获取光线投射点,然后将箭头“指向”Vector3。

  1. 如果箭头总是模仿用户旋转,您可以简单地将旋转应用于箭头 Arrow.transform.rotation = Player.transform.rotation。如果旋转不匹配(即您的对象被旋转),只需添加空游戏对象来模拟旋转并将箭头作为它的子对象。现在你可以随意旋转它了。
于 2013-03-26T09:45:44.480 回答