Create からプレイヤーにするCubeを作ります。
インスペクタでCubeのPositionをすべて0にします。
Cubeがワールドの中央に移動します。
メインカメラの位置を調節します。シーンビューを使って、カメラから見るのにちょうどよいところへ視点を移動します。
シーンビューで右クリックしながら、W,A,S,Dキーを使って視点を移動できます。
ヒエラルキーウィンドウでカメラを選択して、GameObject -> Align With View をクリックすると、シーンビューの視点と同じところにカメラが移動して、同じ方向を向いてくれます。
物理演算で動かすので、CubeにAdd ComponentからRigidbodyを付けます。
重力を使うのでUse Gravityがオンになっていることを確認します。
is Kinematicはオフにします。
さらにスクリプトを付けます。プロジェクト内に存在しない名前で検索すると、新規スクリプトを作成するボタンが出るのでクリックします。
Create and Addでこの名前の新規スクリプトが作成されます。
インスペクタで、追加されたスクリプトをダブルクリックするとVisual Studioが開きます。
マウスで左クリックをしたときに、AddForce でCubeに上方向の力を加えます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerScript : MonoBehaviour
{
Rigidbody rb;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
rb.AddForce(transform.up * 5f, ForceMode.Impulse);
}
}
}
transform.up はデフォルトのRotationでのCubeの真上(Y軸)方向を指します。
ForceMode.Impulse に設定すると、AddForceが呼ばれたときに一度だけ瞬間的な力を加えます。
Cubeを左右に動かす
void Update()
{
if (Input.GetMouseButtonDown(0))
{
float turn = Input.GetAxis("Horizontal");
rb.AddForce(new Vector3(-turn, 1f, 0) * 5f, ForceMode.Impulse);
}
}
Input.GetAxis(“Horizontal”); で左右方向の入力を得ます。PCのキーボードだとA,Dや←,→キーです。右入力で1、左入力で-1、入力が無いと0の値がturnに代入されます。キーの押し具合によって、その中間の値になります。
transform.up を new Vector3(0, 1f, 0)に変えて、左右(X軸)方向にturnの値を入れています。
カメラが近いので、シーンビューで視点を後ろに下げて、Align With Viewをします。
また、左右へ行き過ぎるので、力を半分にします。
rb.AddForce(new Vector3(-turn/2, 1f, 0) * 5f, ForceMode.Impulse);
Cubeが移動できる範囲を限定する
Cubeが画面の外へ出そうになるとゲームオーバーになるようにします。
ゲームオーバーにする代わりに、とりあえず現在のシーンを再読み込みするようにしてみます。スクリプトでシーンを切り替えるには、File -> Build Settings… のScenes In Buildに現在のシーンをドラッグアンドドロップします。
何も押さずに閉じます。
Cubeの移動範囲を設定します。
ゲーム画面を見ながら、シーンビューでCubeを左に目一杯移動させます。
このときのX座標を確認します。
void Update(){} の中に、CubeのX座標が9f以上になると、シーンを読み込むコードを追加します。
if (transform.position.x > 9f)
{
SceneManager.LoadScene("flyingCube");
}
さらに冒頭にusingを追加します。
using UnityEngine.SceneManagement;
左に行くとシーンが再開するようになりました。
これを他の3方向でもやります。
if (transform.position.x > 9f || transform.position.x < -9f || transform.position.y > 5.5f || transform.position.y < -5f)
{
SceneManager.LoadScene("flyingCube");
}