プロジェクト作成
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にリネーム。以下のように記述する。
01 | using System.Collections; |
02 | using System.Collections.Generic; |
05 | public class Pusher : MonoBehaviour { |
07 | public float moveLength; |
11 | pos = transform.position; |
15 | float z = Mathf.Sin (Time.time * speed); |
16 | pos.z = pos.z+z*moveLength*Time.deltaTime; |
17 | 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という名前で作成し、以下のように記述する。
01 | using System.Collections; |
02 | using System.Collections.Generic; |
05 | public class CubeGenerator : MonoBehaviour { |
06 | public GameObject prefab; |
07 | public float baseWidth; |
15 | public void GenerateCube( int num){ |
16 | StartCoroutine (Generate (num)); |
19 | IEnumerator Generate( int num){ |
20 | for ( int i = 0 ; i < num; i++) { |
23 | new Vector3(Random.Range(- 8 .0f, 8 .0f),Random.Range( 10 .0f, 20 .0f),Random.Range( 0 .0f, 5 .0f)), |
24 | Quaternion.Euler( new Vector3(Random.Range(- 5 .0f, 5 .0f),Random.Range(- 5 .0f, 5 .0f),Random.Range(- 5 .0f, 5 .0f))) |
26 | yield return new WaitForSeconds ( 0 .03f); |
31 | if (Input.GetMouseButtonDown ( 0 )) { |
32 | startPos = Input.mousePosition; |
33 | } else if (Input.GetMouseButtonUp( 0 )){ |
34 | Vector2 endPos = Input.mousePosition; |
35 | Vector2 dir = endPos - startPos; |
36 | float spinPower = endPos.x - startPos.x; |
37 | float power = Mathf.Clamp(dir.magnitude, 600 .0f, 900 .0f); |
38 | float x = baseWidth * (Input.mousePosition.x / Screen.width) - (baseWidth/ 2 ); |
39 | GameObject go = (GameObject)Instantiate (prefab, |
40 | transform.position + new Vector3 (x, 0 , 0 ), |
44 | Rigidbody rb = go.GetComponent<Rigidbody> (); |
45 | rb.AddForce ( new Vector3 ( 0 , power, 500 .0f)); |
46 | 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の記述を忘れないこと。
01 | using System.Collections; |
02 | using System.Collections.Generic; |
06 | public class DeathZone : MonoBehaviour { |
07 | public CubeGenerator cg; |
08 | public Text scoreText; |
11 | void OnTriggerEnter(Collider col){ |
12 | if (col.gameObject.tag== "Cube" ){ |
13 | scoreText.text = ++score+ "" ; |
14 | Destroy (col.gameObject); |
15 | if (score== 30 || score % 100 == 0 ){ |
16 | cg.GenerateCube ( 100 ); |
29.スクリプトをヒエラルキーにあるDeathZoneにDDでアタッチして、インスペクターからオブジェクトを以下のように登録する。

30.実行してみよう。落とすことができるとカウントが増えていき、30個(それ以降は100個ごと)にボーナスキューブが落ちてくることが確認できる。
調整
このままでもいいが少し動きがもっさりしている。上部にあるEditメニューからProjectSetteings->Physicsと進み重力加速度を-15くらいに設定しよう。

シーンの保存
以上まで作成したらMainとしてシーンを保存しておく、
参考
Unityのコルーチンの使い方をまとめてみた
コメント