1
  1. 速度は、オブジェクトからクリックまでの距離に依存します。それを修正する方法は?
  2. y 軸上で (クリック後に) 動きをロックするにはどうすればよいですか?

    public int speed;
    Vector3 position;
    bool go;
    
    void FixedUpdate ()
    {      
        if (Input.GetKey (KeyCode.Mouse0))
        {
            go=true;
            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
            RaycastHit hit;
    
            if (Physics.Raycast (ray, out hit, Mathf.Infinity))
            {
                position = hit.point;
            }
        }
    
      //////////////////////////////////////////////////////////////////////
    
        if(go)
        {
            Vector2 direction = position - transform.position;
    
            float targ_pos = Vector2.Distance (transform.position, position);
    
            if(targ_pos>0)
            {
                rigidbody2D.AddForce ((position - transform.position)*speed);       
            }
            else {go=false;}
        }  
    }
    
4

1 に答える 1

0

あなたはまだ答えを探しているかもしれませんが、それは他の人が同じことを考えているのを助けるかもしれません.

キャラクターが ClickToMove 方式で動くゲームをしました。これが私がやった方法です。私のゲームは 3D だったので、少し調整する必要があるかもしれません。

ヒットしたポイントを保存します。これは、シーンのフロア (floorHit) に属します。クラスの先頭で、Vector3 toGo を宣言しました。私のプレーヤーにはリジッドボディが取り付けられており、それを移動するはずのポイントに向かって回転させます。次に、MoveTowards(from,to,speed); を使用します。

if (Physics.Raycast (camRay, out floorHit, camRayLength, floorMask)) {

                Vector3 playerToMouse = floorHit.point - transform.position;

                // the quaternion defines the rotation, looking through the vector
                Quaternion newRotation = Quaternion.LookRotation (playerToMouse);
                playerRigidbody.MoveRotation (newRotation);

                toGo = floorHit.point; // We save the point we touched  }

次に、if の外で、まだ update 関数内で、先ほど保存した toGo Vector3 を使用して MoveTowards を呼び出します。

transform.position = Vector3.MoveTowards (transform.position, toGo, speed * Time.deltaTime);

それが役立つことを願って、

それに加えて、キャラクターをアニメーション化する場合のコードがあります。

ためらわずに、もっと求めてください。

ブロ

于 2014-12-19T10:24:28.713 に答える