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

+0

Stack Exchange中有一个游戏开发网站:http://gamedev.stackexchange.com/?as=1 – 2013-03-26 09:47:59

回答

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。如果旋转不匹配(即旋转对象),只需添加空的游戏对象以模仿旋转并将箭头作为子对象。现在你可以像你一样旋转它。

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