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

时间:2013-03-26 09:22:31

标签: c# rotation unity3d

我想让我的箭指出我在比赛中的目标。

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

例如,如果我的播放器瞄准屏幕的左上方,箭头将面向那个方向并向该方向发射。

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

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类中找到。它附在我的相机上。

1 个答案:

答案 0 :(得分:0)

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

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

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

2)如果箭头始终模仿用户旋转,则可以简单地将旋转应用于箭头Arrow.transform.rotation = Player.transform.rotation。如果旋转不匹配(即旋转对象),只需添加空游戏对象以模拟旋转并将箭头作为其子对象。现在你可以随意旋转它。

这是非常基本的问题所以我认为这个答案不需要源代码。希望有所帮助。