プロジェクト作成
1.新規プロジェクトを名前をJoytas20で作成する(3Dモード)
ステージの作成
2.Create->3DObject->Cubeを作成しFloorとリネーム後インスペクターを以下のように調整する。
3.Create->3DObject->Cubeを作成しLeftWallとリネーム後インスペクターを以下のように調整する。
4.LeftWallを複製しRightWallを作成。position,xを-10から10に変更する。
5.Create->3DObject->Cubeを作成しBackWallとリネーム後インスペクターを以下のように調整する。
Pusherの作成
6.Create->3DObject->Cubeを作成しPusherとリネーム後インスペクターを以下のように調整する。
7.ProjectのCreateからmaterialを選択し、Pusherとリネーム。色を設定する(B7DC54FF)。
8.materialができたらD&DでヒエラルキーにあるPusherにアタッチする。
9.ヒエラルキーでPusherを選択後インスペクター下部にあるaddComponentボタンからPhysics->Rigidbodyを付与する。
10.RigidbodyコンポーネントのisKinematicのチェックをオンにする。このチェックを入れることでスクリプトによってのみ動き、外部からの物理的影響をうけなくなる。(与えることはできる)
11.プロジェクトからC#スクリプトを選択し、Pusherにリネーム。以下のように記述する。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Pusher : MonoBehaviour { public float speed; public float moveLength; Vector3 pos; void Start () { pos = transform.position; } void Update () { float z = Mathf.Sin (Time.time * speed); pos.z = pos.z+z*moveLength*Time.deltaTime; transform.position = pos; } }
12.スクリプトをPusherにアタッチし、インスペクターからspeedを1.5,moveLengthを2に設定する。
カメラの設定
13.mainCameraを選択し、インスペクターから以下のように調整する。
Field of view を画面の横幅いっぱいになるように調整すること。
14.実行してみよう。Pusherがスムーズに前後していれば成功だ。
照明の調整
15.影が気になるのでDirectinalRightを以下のように調整しよう。
Cubeの作成
16.Create->3DObject->Cubeを作成し、インスペクターを以下のように調整し、適当にマテリアル(表面材質)を付与する。作例では色が(547FFDFF)Materialを作成し付与した。
5.CubeにAddComponentからRigidbodyを付与する。実行し、Pusherに押されることを確認する。
17.スクリプトから扱いやすいようにタグを設定しよう。インスペクターのタグのプルダウンを選択しAdd Tagを選択する。
18.+を押し以下のようにCubeというタグを作成する。
19.ヒエラルキーでCubeを選択し、先ほど作成したCubeタグを付与する。
20.ヒエラルキーにあるCubeをD&DでAssetsに移動する。こうすることによってプレファブができる。
21.ヒエラルキーにあるCubeは不要なので削除してしまおう。
キューブジェネレーターの作成
22.Create->Create EmptyからEmptyオブジェクトを作成しCubeGeneratorとリネーム後、インスペクターのトランスフォームを以下のように設定する。
22.新規C#スクリプトをCubeGeneratorという名前で作成し、以下のように記述する。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeGenerator : MonoBehaviour { public GameObject prefab; public float baseWidth; Vector2 startPos; void Start () { GenerateCube (500); } public void GenerateCube(int num){ StartCoroutine (Generate (num)); } IEnumerator Generate(int num){ for (int i = 0; i < num; i++) { Instantiate ( prefab, new Vector3(Random.Range(-8.0f,8.0f),Random.Range(10.0f,20.0f),Random.Range(0.0f,5.0f)), Quaternion.Euler(new Vector3(Random.Range(-5.0f,5.0f),Random.Range(-5.0f,5.0f),Random.Range(-5.0f,5.0f))) ); yield return new WaitForSeconds (0.03f); } } void Update(){ if (Input.GetMouseButtonDown (0)) { startPos = Input.mousePosition; }else if(Input.GetMouseButtonUp(0)){ Vector2 endPos = Input.mousePosition; Vector2 dir = endPos - startPos; float spinPower = endPos.x - startPos.x; float power = Mathf.Clamp(dir.magnitude,600.0f,900.0f); float x = baseWidth * (Input.mousePosition.x / Screen.width) - (baseWidth/ 2); GameObject go = (GameObject)Instantiate (prefab, transform.position + new Vector3 (x, 0, 0), transform.rotation ); Rigidbody rb = go.GetComponent<Rigidbody> (); rb.AddForce (new Vector3 (0, power, 500.0f)); rb.AddTorque (new Vector3 (0, spinPower, 0)); } } }
23.作成したスクリプトをヒエラルキーにあるCubeGeneratorにD&Dでアタッチする。
24.ヒエラルキーでCubeGeneratorを選択し、インスペクターを調整する。baseWidthは15、プレファブにはAssetsにあるCubeプレファブをDDで登録する。
25.実行してみよう。下図のようにゲーム開始後、キューブが降り注げば成功だ。画面をスワイプすることでキューブを発射できる。距離を長くスワイプすると高く飛ばすことができ、横方向にスワイプすることによってキューブを回転させられる。
Score機能の実装
26.Create->UI->textを選択し、TextオブジェクトをScoreとリネームし、インスペクターから以下のように調整する。
DeathZoneの作成
落下したCubeを削除する処理と点数をアップしていく処理を作成する。
26.Create->3DObject->Cubeを作成しDeathZoneとリネームする。インスペクターから以下のように調整する。ここではisTriggerのチェックを入れることによってその範囲をセンサーとして利用できる。
27.ヒエラルキーからDeathZoneをダブルクリック選択し、シーンを上方から見てみよう。センサーとして働くデスゾーンの範囲がわかる。
28.ProjectのCreateからC#スクリプトを選択し、DeathZoneとリネーム後以下のように記述する。
using UnityEngine.UIの記述を忘れないこと。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class DeathZone : MonoBehaviour { public CubeGenerator cg; public Text scoreText; private int score=0; void OnTriggerEnter(Collider col){ if(col.gameObject.tag=="Cube"){ scoreText.text = ++score+""; Destroy (col.gameObject); if(score==30 || score % 100 ==0){ cg.GenerateCube (100); } } } }
29.スクリプトをヒエラルキーにあるDeathZoneにDDでアタッチして、インスペクターからオブジェクトを以下のように登録する。
30.実行してみよう。落とすことができるとカウントが増えていき、30個(それ以降は100個ごと)にボーナスキューブが落ちてくることが確認できる。
調整
このままでもいいが少し動きがもっさりしている。上部にあるEditメニューからProjectSetteings->Physicsと進み重力加速度を-15くらいに設定しよう。
シーンの保存
以上まで作成したらMainとしてシーンを保存しておく、
コメント