0

関数に以下のコードがありUpdateます:

if (Input.GetButton("Fire1"))
{
    mouseFollow = Camera.main.ScreenPointToRay(Input.mousePosition);

    if (Physics.Raycast(mouseFollow, out hit))
    {
        target_point = hit.point;   
        if (blade_created == false)
        {
            blade = (GameObject)Instantiate(Blade, target_point, Quaternion.Euler(90, 0, 0));
            blade_created = true;
        }

        if (blade != null) blade.transform.position = hit.point;
        Debug.DrawLine(mouseFollow.origin, target_point, Color.red);
    }
}  

ブレード ゲーム オブジェクトはマウスの位置に正しく追従しますが、ボタン (fire1) を押したままにすると、マウスの移動効果がなく、ブレード (ゲーム オブジェクト) が交差するレイの原点であるカメラに向かって移動します。なぜこれが原因ですか?RaycastHitインスタンスに問題があるのでしょうか?

「関数スコープの更新」とコードの先頭(グローバルスコープ)の両方で初期化しましたが、何も変わりませんでした。これはどのように修正できますか?

4

1 に答える 1

0

問題が見つかりました。そのif (blade != null)状態です。ヌル刃をチェックすると。最初のクリックでブレードを作成したため、常に false が返されます。そして問題が始まります。ブレードを作成した後、ブレードをチェックし続け、hit.pointその時点までブレードを変換します。ヒットが発生したオブジェクトも確認する必要があります。

あなたの場合、背景に平面があるとします。それで、私たちはそれを手に入れhit.pointました。しかし、ブレードのインスタンスを取得するとすぐに、ヒット オブジェクトとして「ブレード (クローン)」が見つかり、ブレードをそれ自体の新しいヒット ポイント (つまり、ブレードの原点ではなく、そのブレードの表面) に変換し続けます。ブレード)。

次のコードのように、ブレードを変換する前に、ヒット オブジェクトを確認する必要があります。

if (Input.GetButton("Fire1"))
    {
        if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
        {
            target_point = hit.point;   
            if (blade_created == false)
            {
                blade = (GameObject)Instantiate(Blade, target_point, Quaternion.Euler(90, 0, 0));
                blade_created = true;
            }

            if (blade != null && hit.transform.name != "Blade(Clone)") 
                blade.transform.position = hit.point;

        }
    }
于 2013-09-21T07:19:18.557 に答える