マウスドラッグでカーテンを開け閉めする方法

投稿者: | 2019-03-28


GIF再生

マウスドラッグ上下でカーテンを開け閉めします。カーテンを開けると、後ろの窓も同じように開閉できます。
前のページでご紹介した、マウスドラッグで窓やドアを開け閉めする方法を使います。

まずは、普通に Planeオブジェクトで作ったカーテンを、シリンダーオブジェクトのカーテンレールにくっつけて、マテリアルを割り当てます。

Plane の transform のポジションと Scale を、調節すると、カーテンがしまった感じになります。

アニメーションさせるといい感じです。

これがデフォルトの値で

マウスドラッグによって、この値の範囲を行ったり来たりさせると開閉できますね。

カーテンの近くで左クリックしたときのカーソルの座標(FPSなので常に真ん中)と、その後のカーソルの座標を使って、上にドラッグしたらその分の正の値、下なら負の値がでるようにしているので、それを使って、カーテンを動かします。

scale も全く同じように動かします。


// 宣言
 public GameObject leftCurtain;

Vector3 leftCurtainPosition;
Vector3 leftCurtainPosition_Default;

Vector3 leftCurtainScale;
Vector3 leftCurtainScale_Default;

//------------------
// void Start() 内
leftCurtainPosition = leftCurtain.transform.position;
leftCurtainPosition_Default = leftCurtain.transform.position;

leftCurtainScale = leftCurtain.transform.localScale;
leftCurtainScale_Default = leftCurtain.transform.localScale;

//------------------
// void Update() 内で、Raycast でタグを取得して、switch分で場合分けしています
   case "LeftCurtain":
      curtainMove = true;
      break;

//------------------
//カーテンを動かしているとき
if (curtainMove && Input.GetMouseButton(0))
{
   //カーソルのロック解除
   sc_player.mouseLook.SetCursorLock(false);
   //プレイヤーの動きをロック
   sc_player.playerLock = true;

   //クリックしたところと、今のカーソルがあるところの差を取って表示
   deltaPosition = Input.mousePosition - clickPosition;
   text.text = deltaPosition.y.ToString();

   // position x は 4.825(デフォルト)~5.9、scale xは 0.2261336(デフォルト)~0.03 の範囲で動かす
   leftCurtainPosition.x += deltaPosition.y / 2000;

   // ポジションが5.9f より小さくなったら 5.9f にする
   if (leftCurtainPosition.x > 5.9f)
   {
      leftCurtainPosition.x = 5.9f;
   }
   // デフォルトより大きければデフォルトにする
   else if (leftCurtainPosition.x < leftCurtainPosition_Default.x)
   {
      leftCurtainPosition.x = leftCurtainPosition_Default.x;
   }

   leftCurtainScale.x -= deltaPosition.y / 10000;
   
   // position と同じ
   if (leftCurtainScale.x > leftCurtainScale_Default.x)
   {
      leftCurtainScale.x = leftCurtainScale_Default.x;
   }
   else if (leftCurtainScale.x < 0.03f)
   {
      leftCurtainScale.x = 0.03f;
   }

   leftCurtain.transform.localScale = leftCurtainScale;
   leftCurtain.transform.position = leftCurtainPosition;

}

カーソルロック等の詳細はこちら

一度、今のtransform.position を leftCurtainPosition などの変数に入れて、これを変更してから戻す、ということをしています。
このようにしないと変更できないようになっています。


GIF再生

コメントを残す

メールアドレスが公開されることはありません。