2013-03-26 49 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。如果旋轉不匹配(即旋轉對象),只需添加空的遊戲對象以模仿旋轉並將箭頭作爲子對象。現在你可以像你一樣旋轉它。

這是非常基本的問題,所以我認爲這個答案不需要源代碼。希望有所幫助。