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 です。しかし、それは重要ではありません。あなたの問題に対して2つの解決策を提供します:

  1. 単純なベクトル計算を使用して、ポインティング方向を取得できます。Vector3(to - from)。したがって、矢印の方向は次のとおりです。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 に答える