Unity Roll a Ball ゲームの作成Create Unity Roll a Ball game

このチュートリアルでは、若干変更された Unity Roll a Ball のチュートリアルの主な手順について説明します。This tutorial walks through the main steps for a slightly modified Unity Roll a Ball tutorial. このサンプル ゲームは、アプリ ユーザーによって操作される球形の "プレーヤー" オブジェクトで構成されます。ゲームの目的は、プレーヤー オブジェクトを収集可能なオブジェクトに衝突させることによって、このような収集可能なオブジェクトを "収集" することです。This sample game consists of a spherical 'player' object which is controlled by the app user and the objective of the game is to 'collect' collectible objects by colliding the player object with these collectible objects. このチュートリアルは、Unity エディター環境の基礎知識があることを前提としています。This assumes basic familiarity with Unity editor environment. 問題が発生した場合は、完全なチュートリアルを参照してください。If you run into any issues then you should refer to the full tutorial.

ゲームを設定するSetting up the game

次の手順は、 Unity のチュートリアルThe steps below are from the Unity tutorial

  1. Unity エディターを開き、[New] (新規) をクリックします。Open Unity Editor and click New.

  2. [Project name] (プロジェクト名) ボックスと & [Location] (場所) ボックスに適切な情報を入力し、[3D] (3D) を選択して、[Create project] (プロジェクトの作成) をクリックします。Provide a Project name & Location, select 3D and click Create project.

  3. 新しいプロジェクトの一部として作成された既定のシーンを、Assets フォルダーの下の新しい _Scenes フォルダーに MiniGame という名前で保存します。Save the default scene just created as part of the new project as with the name MiniGame within a new _Scenes folder under Assets folder:

  4. [3D Object] (3D オブジェクト)、[Plane] (平面) の順に選択して、プレイするフィールドとして平面を作成し、この平面オブジェクトの名前を Ground に変更します。Create a 3D Object -> Plane as the playing field and rename this plane object as Ground

  5. この Ground オブジェクトの変換コンポーネントをリセットして、そのオブジェクトが原点に配置されるようにします。Reset the transform component for this Ground object so that it is at the Origin.

  6. Ground オブジェクトの [Gizmos] (ギズモ) メニューにある [Show Grid] (グリッドの表示) チェック ボックスをオフにします。Uncheck Show Grid from Gizmos menu for the Ground object.

  7. Ground オブジェクトの [Scale] (スケール) コンポーネントを [X = 2、Y = 1、Z = 2] に更新します。Update the Scale component for the Ground object to be [X = 2,Y = 1, Z = 2].

  8. [3D Object] (3D オブジェクト)、[Sphere] (球) の順に選択して新しいオブジェクトをプロジェクトに追加し、この球オブジェクトの名前を Player に変更します。Add a new 3D Object -> Sphere to the project and rename this sphere object as Player.

  9. Player オブジェクトを選択し、平面オブジェクトの場合と同様に、[Reset Transform] (変換のリセット) をクリックします。Select the Player object and click Reset Transform similar to the Plane object.
  10. [Transform] (変換)、[Position] (位置)、[Y] (Y) の順に選択して、Player の Y 座標コンポーネントを 0.5 に更新します。Update Transform -> Position -> Y Coordinate component for the Player Y as 0.5.

  11. Materials という名前の新しいフォルダーをプロジェクトに作成します。このフォルダーに、プレイヤーの色を設定するマテリアルを作成します。Create a new folder called Materials in the project where we will create the material to color the player.
  12. このフォルダー内に、Background という名前の新しいマテリアルを作成します。Create a new Material called Background in this folder.

  13. マテリアルの色を更新するには、その [Albedo] (アルベド) プロパティを更新します。Update the color of the material by updating the Albedo property of it. RGB 値 [0,32,64] を選択できます。You can select the RGB values of [0,32,64].

  14. このマテリアルをシーン ビューにドラッグして、 Ground オブジェクトに色を適用します。Drag this material into the scene view to apply color to the Ground object.

  15. 最後に、わかりやすくするために、Directional Light オブジェクトで、[Transform] (変換) の [Rotation] (回転) で [Y] (Y) を 60 に設定します。Finally update the Transform -> Rotation -> Y to 60 on the Directional Light object for clarity.

プレイヤーを動かすMoving the player

次の手順は、 Unity のチュートリアルThe steps below are from the Unity tutorial

  1. RigidBody コンポーネントを Player オブジェクトに追加します。Add a RigidBody component to the Player object.

  2. Scripts という名前の新しいフォルダーをプロジェクトに作成します。Create a new folder called Scripts in the Project.
  3. [Add Component] (コンポーネントの追加)、[New Script] (新しいスクリプト)、[C# Script] (C# スクリプト) の順にクリックします。Click Add Component-> New Script -> C# Script. スクリプトに PlayerController という名前を付け、[Create and Add] (作成して追加) をクリックします。Name it PlayerController, and click Create and Add. これで、スクリプトが作成され、Player オブジェクトにアタッチされます。This will create and attach a script to the Player object.

  4. このスクリプトをプロジェクトの Scripts フォルダーに移動します。Move this script under the Scripts folder in the project.
  5. 好みのスクリプト エディターでこのスクリプトを編集するために開き、スクリプト コードを次のコードで更新して、保存します。Open the script for editing in your favorite script editor, update the script code with the following code and save it.

     using UnityEngine;
     using System.Collections;
    
     public class PlayerController : MonoBehaviour 
     {
         public float speed;
         private Rigidbody rb;
         void Start ()
         {
             rb = GetComponent<Rigidbody>();
         }
         void FixedUpdate ()
         {
             float moveHorizontal = Input.GetAxis ("Horizontal");
             float moveVertical = Input.GetAxis ("Vertical");
             Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
             rb.AddForce (movement * speed);
         }
     }
    
  6. 上記のスクリプトで Speed プロパティが使用されていることに注目します。Note that the script above uses a Speed property. Unity エディターで、[Speed] (速度) プロパティを 10 に更新します。In the Unity editor, update the speed property to 10.

  7. Unity エディターの [Play] (再生) をクリックします。Hit Play in the Unity Editor. これで、キーボードを使って球を操作できるようになります。球は回転したり、動き回ったりします。Now you should be able to control the ball using the keyboard and it should rotate and move around.

カメラを動かすMoving the camera

次の手順は、Unity のチュートリアルに基づいています。この手順では、Main CameraPlayer オブジェクトに関連付けます。The steps below are from the Unity tutorial and will tie the Main Camera to the Player object.

  1. Transform.Position を X = 0、Y = 10.5、Z=-10 に更新します。Update the Transform.Position to be X = 0, Y = 10.5, Z=-10.
  2. Transform.Rotation を X = 45、Y = 0、Z = 0 に更新します。Update the Transform.Rotation to be X = 45, Y = 0, Z = 0.

  3. CameraController という名前の新しいスクリプトを MainCamera に追加し、そのスクリプトを Scripts フォルダーに移動します。Add a new script called CameraController to the MainCamera and move it under the Scripts folder.

  4. スクリプトを編集するために開き、次のコードを追加します。Open up the script for editing and add the following code in it:

     using UnityEngine;
     using System.Collections;
    
     public class CameraController : MonoBehaviour {
    
         public GameObject player;
    
         private Vector3 offset;
    
         void Start ()
         {
             offset = transform.position - player.transform.position;
         }
    
         void LateUpdate ()
         {
             transform.position = player.transform.position + offset;
         }
     }
    
  5. Unity 環境で、Player 変数を Main Camera オブジェクトの Player スロットにドラッグして、この 2 つを相互に関連付けます。In Unity environment - drag the Player variable into the Player slot for the Main Camera object so that the two are associated with one another.

  6. これで、エディターで [Play] (再生) をクリックし、Player Ball オブジェクトを回転させると、カメラはその動きを追いかけます。Now if you hit Play in the Unity editor and rotate the Player Ball object then you will see the Camera following it in the movement.

プレイ領域を設定するSetting up the Play area

次の手順は、 Unity のチュートリアルに基づいています。The steps below are from the Unity tutorial. ここでは、Player Ball オブジェクトが動く際にプレイ領域から飛び出さないように Ground オブジェクトを取り囲む Walls オブジェクトを作成します。We will create the Walls surrounding the Ground so that the Player Ball object doesn't drop off the play area in its movement.

  1. [Create] (作成)、[Create Empty] (空のオブジェクト)、[Game Object] (ゲーム オブジェクト) の順にクリックし、そのオブジェクトに Walls という名前を付けます。Click Create -> Create Empty -> Game Object and name it Walls

  2. この Walls オブジェクトの下で、[3D Object] (3D オブジェクト)、[Cube] (キューブ) の順に選択してオブジェクトを作成し、"West wall" という名前を付けます。Under this Walls object - create a new 3D Object -> Cube and name it "West wall".

  3. この West wall オブジェクトについて、[Transform] (変換) の [Position] (位置)[Transform] (変換) の [Scale] (スケール) を更新します。Update the Transform -> Position and Transform -> Scale for this West Wall object.

  4. West wall を複製して East wall を作成し、変換の位置とスケールを更新します。Duplicate the West wall to create an East wall with the updated transform position and scale.

  5. East wall を複製して North wall を作成し、変換の位置とスケールを更新します。Duplicate the East wall to create a North wall with the updated transform position & scale.

  6. North wall を複製して South wall を作成し、変換の位置とスケールを更新します。Duplicate the North wall and create a South wall with the updated transform position & scale.

収集可能なオブジェクトを作成するCreating Collectible objects

次の手順は、 Unity のチュートリアルに基づいています。The steps below are from the Unity tutorial. ここでは、収集可能なオブジェクトのセットを構成する見栄えのよいオブジェクトをいくつか作成します。Player Ball オブジェクトは、これらのオブジェクトを衝突させることによって "収集" する必要があります。We will create some attractive looking objects which will form the set of collectible objects which the Player Ball object needs to 'collect' by colliding with them.

  1. 新しい 3D キューブ オブジェクト を作成し、Pickup という名前を付けます。Create a new 3D Cube object and name it Pickup.
  2. この Pickup オブジェクトについて、[Transform] (変換) の [Rotation] (回転) と & [Transform] (変換) の [Scale] (スケール) を調整します。Adjust the Transform -> Rotation & Transform -> Scale of the Pickup object.

  3. Rotator という名前の新しい C# スクリプトを作成し、Pickup オブジェクトにアタッチします。Create and attach a new C# Script called Rotator to the Pickup object. このスクリプトを Scripts フォルダーの下に配置するようにしてください。Make sure to put the script under the Scripts folder.

  4. このスクリプトを編集するために開き、次のように更新します。Open this script for editing and update it to be the following:

     using UnityEngine;
     using System.Collections;
    
     public class Rotator : MonoBehaviour {
    
         void Update () 
         {
             transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);
         }
     }
    
  5. エディターで [Play] (再生) をクリックすると、Pickup オブジェクトがその軸を中心に回転します。Now hit the Play mode in the Unity Editor and your Pickup object show be rotating on its axis.
  6. Prefabs という名前の新しいフォルダーを作成します。Create a new folder called Prefabs

  7. Pickup オブジェクトをドラッグして Prefabs フォルダーに置きます。Drag the Pickup object and put it in the Prefabs folder.

  8. Pickups という名前の新しい空のゲーム オブジェクトを作成します。Create a new Empty Game object called Pickups. その位置を原点にリセットした後、このゲーム オブジェクトの下に Pickup オブジェクトをドラッグします。Reset its position to origin and then drag the Pickup object under this game object.

  9. Pickup オブジェクトを複製し、Transform.Position の X と Z の値を適宜更新して、Player オブジェクトを取り囲む Ground オブジェクト上に散らします。Duplicate the Pickup object and spread it on the Ground object around the Player object by updating the Transform.Position's X & Z values appropriately.

  10. Pickup という名前の新しいマテリアルを作成します。Ground オブジェクトを更新したときと同じように、[Albedo] (アルベド) プロパティを更新して、その色が [Red] (赤) になるように更新します。Create a new material called Pickup and update it to be Red in color by updating the Albedo property similar to what we did for updating the Ground object.

  11. マテリアルを 4 つの Pickup オブジェクトすべてに適用します。Apply the material to all the 4 pickup objects.

Pickup オブジェクトを収集するCollecting the Pickup objects

次の手順は、 Unity のチュートリアルに基づいています。The steps below are from the Unity tutorial. ここでは、Player が衝突することで Pickup オブジェクトを "収集" できるように Player を更新します。We will update the Player so that it is able to 'collect' the pickup objects by colliding with them.

  1. Player オブジェクトにアタッチされている PlayerController スクリプトを編集するために開き、次のように更新します。Open up the PlayerController script attached to the Player object for editing and update it to the following:

     using UnityEngine;
     using System.Collections;
    
     public class PlayerController : MonoBehaviour {
    
         public float speed;
    
         private Rigidbody rb;
    
         void Start ()
         {
             rb = GetComponent<Rigidbody>();
         }
    
         void FixedUpdate ()
         {
             float moveHorizontal = Input.GetAxis ("Horizontal");
             float moveVertical = Input.GetAxis ("Vertical");
    
             Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
    
             rb.AddForce (movement * speed);
         }
    
         void OnTriggerEnter(Collider other) 
         {
             if (other.gameObject.CompareTag ("Pick Up"))
             {
                 other.gameObject.SetActive (false);
             }
         }
     }
    
  2. Pick Up という名前の新しいタグを作成します (名前は、スクリプトの内容と一致する必要があります)。Create a new Tag called Pick Up (it must match what is in the script)

  3. この タグ を Prefab Pickup オブジェクトに適用します。Apply this Tag to the Prefab Pickup object.

  4. Prefab オブジェクトの [IsTrigger] チェック ボックスをオンにします。Enable IsTrigger checkbox for the Prefab object.

  5. RigidBody を Pickup Prefab オブジェクトに追加します。Add a Rigid body to Pickup Prefab object. ここでは、パフォーマンスを最適化するために、使用していた静的コライダーを動的コライダーに更新します。For performance optimization we will update the static collider that we used to a Dynamic collider.

  6. 最後に、Prefab オブジェクトの IsKinematic プロパティのチェック ボックスをオンにします。Finally check the IsKinematic property for the prefab object.

  7. Unity エディターの [Play] (再生) をクリックすると、方向入力にキーボードのキーを使用して Player オブジェクトを動かすことで、この Roll a Ball ゲームをプレイできるようになります。Hit Play in the Unity editor and you will be able to play this Roll a Ball game by moving the Player object using your keyboard keys for direction input.

モバイルでプレイできるようにゲームを更新するUpdating the game for mobile play

Unity の基本的なチュートリアルは、上のセクションで終了です。The sections above concluded the basic tutorial from Unity. ここでは、モバイル デバイスで使いやすくなるようにゲームを変更します。Now we will modify the game to make it mobile device friendly. ここまでは、ゲームをテストする際にキーボード入力を使用してきたことに注意してください。Note that we used keyboard input for the game so far for testing. 今度は、電話の所作を使用して (つまり、加速度計を入力として使用して)、プレーヤーを制御できるように変更します。Now we will modify it so that we can control the player by using the motion of the phone i.e. using Accelerometer as the input.

PlayerController スクリプトを編集するために開き、Player オブジェクトの移動に加速度計からの動きを使用するように FixedUpdate メソッドを更新します。Open up the PlayerController script for editing and update the FixedUpdate method to use the motion from the accelerometer to move the Player object.

    void FixedUpdate()
    {
        //float moveHorizontal = Input.GetAxis("Horizontal");
        //float moveVertical = Input.GetAxis("Vertical");
        //Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rb.AddForce(Input.acceleration.x * Speed, 0, -Input.acceleration.z * Speed);
    }

これで、Unity を使用した基本的なゲームの作成チュートリアルはおしまいです。このゲームを任意のデバイスにデプロイしてゲームをプレイすることができます。This tutorial concludes a basic game creation with Unity and you can deploy this on a device of your choice to play the game.