プロジェクト作成
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としてシーンを保存しておく、


コメント