シーン遷移の基本

シーン遷移の基本を学びます.

ここでは,トップ画面>ゲーム画面>エンド画面の3つのシーンを移動しまたトップ画面へ戻ります.

 

ワークフロー

  • シーンを作成
  • ボタンを作成
  • スクリプトを作成
  • ボタンにスクリプトをアサイン
  • ビルド設定をする
  • 実行する

 

トップシーンを作成する

  1. トップ画面用シーンを作成する
  2. トップ画面用シーンに適宜UI>Textを入れて遷移時にどの画面にいるか分かるようにする
  3. トップ画面にGameObject>UI>Buttonでボタンを作成する
  4. 位置調整をする(参考画像)

 

スクリプト作成

  1. scnChangeというファイル名でスクリプトを作成する(※ファイル名とclass名は同一にすること)
  2. 全て以下に入れ替え保存する(※このスクリプトは他でも使い回しできます)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.SceneManagement;//これを必ず追加しないと使えない


public class scnChange : MonoBehaviour {

    public string scnName;//変数scnNameをInspectorからセットできるようにする
	
	
    public void goScene(){
        SceneManager.LoadScene(scnName);//変数scnNameのシーンにシーン遷移する
    }

}

 

スクリプトをボタンにアサインする

  1. GameObject>CreateEmpty で空のオブジェクトに上で作成したスクリプトをコンポーネントに追加する
  2. Scn Nameの欄にジャンプ先のシーン名を入力する(※これがInspectorに表示されるのは10行目の変数宣言をpublicにしているから)
  3. ボタンを選択し,OnClickの+ボタンでリストを追加する
  4. 追加したリストに作成した空のオブジェクト(1でスクリプトがついているもの)をアサインする
  5. NoFunctionのプルダウンからscnChange>goSceneを選択する(13行目のpublic void goScene を実行するという意味,publicがついているとボタンから押せる)

ビルド設定をおこなう

  1. File>Build Settings…でビルド設定を開き,ドラッグ&ドロップで,ここで作成した最初のシーンと,これまで作成しらゲームのシーンを追加する
  2. 保存し,トップ画面用シーンを再生し,ボタンを押してシーン遷移するか確認する
  3. シーン遷移後,ゲーム画面の明るさが少し暗いようでしたら,そのシーンのWindow>Lightingを選び,AutoGenerateのチェックを外し,Generateを一度押しておきます

 

実習

  • エンドシーンを作成する
  • ゲームシーンからエンドシーンエンドシーンからトップシーンへとジャンプさせ3つのシーンを1周できるようにすること

Ultimate Joystick cam

ultimate joystick用スクリプト

// BEGIN MIT LICENSE BLOCK //
//
// Copyright (c) 2016 dskjal
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
//
// END MIT LICENSE BLOCK   //
using UnityEngine;

[RequireComponent(typeof(Camera))]
public class followCam3 : MonoBehaviour
{
    public Transform Target;
    public float DistanceToPlayerM = 2f;    // カメラとプレイヤーとの距離[m]
    public float SlideDistanceM = 0f;       // カメラを横にスライドさせる;プラスの時右へ,マイナスの時左へ[m]
    public float HeightM = 1.2f;            // 注視点の高さ[m]
    public float RotationSensitivity = 100f;// 感度
    public float limitMax = 0.4f;
    public float limitMin = -0.4f;

    void Start()
    {
        if (Target == null)
        {
            Debug.LogError("ターゲットが設定されていない");
            Application.Quit();
        }
    }

    void FixedUpdate()
    {


       // var rotX = Input.GetAxis("Mouse X") * Time.deltaTime * RotationSensitivity;
       // var rotY = Input.GetAxis("Mouse Y") * Time.deltaTime * RotationSensitivity;

        float rotX = UltimateJoystick.GetHorizontalAxis("camStick")* Time.deltaTime * RotationSensitivity;
        float rotY = UltimateJoystick.GetVerticalAxis("camStick")* Time.deltaTime * RotationSensitivity;

        var lookAt = Target.position + Vector3.up * HeightM;

        // 回転
        transform.RotateAround(lookAt, Vector3.up, rotX);
        // カメラがプレイヤーの真上や真下にあるときにそれ以上回転させないようにする
        if (transform.forward.y > limitMax && rotY < 0)//default 0.9
        {
            rotY = 0;
        }
        if (transform.forward.y < limitMin && rotY > 0)
        {
            rotY = 0;
        }
        transform.RotateAround(lookAt, transform.right, rotY);

        // カメラとプレイヤーとの間の距離を調整
        transform.position = lookAt - transform.forward * DistanceToPlayerM;

        // 注視点の設定
        transform.LookAt(lookAt);

        // カメラを横にずらして中央を開ける
        transform.position = transform.position + transform.right * SlideDistanceM;
    }
}

 

参考サイト

https://dskjal.com/unity/tps-camera.html

コインドーザーの作成3

つづきです

 

次にボタンを押すとコインが落ちる仕組みを作成する

まず,

  1. GameObject>UI>Button でボタンを作成する
  2. ゲーム画面にボタンが表示される
  3. ヒエラルキーで作成されたボタンを選択する
  4. ボタンの位置調整をする.まず,右上を基準モードにする(画像1,2の順に選択)
  5. 次にゲーム画面を見ながら位置を調整し,画面の右端に移動させる(値は各自で自由に設定すること)
  6. GameObject>Create Emptyで空のオブジェクト(位置情報のみのオブジェクトになる)を作成する.後でこの位置からコインを生成させるための準備
  7. 名前はに変更しておくこと
  8. 参考の位置
  9. Asset内で右クリック>Create>C# Scriptを作成し,名前をcoin_genにする
  10. coin_genを開きスクリプトエディタ(Visual Studio等)を開き中身を以下に入れ替える

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine; 

public class coin_gen : MonoBehaviour { 
public Transform spawnpos;//インスペクタに位置情報用のドロップボックスを表示 
public GameObject coninPrefab;//プレファブをアサインするドロップボックスを表示 

void Start () { }
 
// Update is called once per frame 
void Update () { } 


//public化することでボタンからクリックで実行きるようになる 
public void genBtn(){
 Vector3 pos = spawnpos.transform.position;//spawnposの位置をvector3形式にし,posに入れる 
Instantiate(coninPrefab, pos, Quaternion.identity);//coninPrefabを生成させる
 } 
}

 


  1. 再度空のオブジェクトを作成し,名前をscriptに変更する
  2. 作成したcoin_genをscriptにアサインする
  3. インスペクタに表示されたspawnposにspawnPointをアサインする
  4. (下図を確認)
  5. HierarchyにあるcoinをAssetsにドロップする. coinがPrefab化(青い色に変わる)する.Hierarchyのcoinはこの段階で取り除く
  6. ヒエラルキーにscriptを選択し,coinPreをCoinPrefabをにアサインする
  7. ゲームを再生し,ボタンを押しコインが落ちてくるのを確認する

 

時間があればさらに改造してみましょう.

 

追記(2018/10/12)

落ちてきたコインを消すスクリプト.コライダにアタッチする.ファイル名はdestroy.csとする.

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class destroy : MonoBehaviour { 

public void OnTriggerEnter(Collider other){ Destroy(other.gameObject); } 

}

 

追記(2019/12/03)

move-blockがコインで弾かれる方は以下の設定をする

(A)move-block>RigidBody>Constrain のFreeze PositionをZ以外に全てチェックを入れる

(B)Coin(Prefab)のRigidBodyのMassをなるべく軽くする(0.05 kg)など

 


 

 

 

 

コインドーザーの作成2

つづき

  1. 各オブジェクトに名前をつける(画像を参考に)
  2. ここからはコインを押すプッシャーを作成する
  3. move_blockを選択し,Component>Physics>Rigidbodyを選択する
  4. 追加されたRigid BodyコンポーネントのUse Gravityオフにする(重力に影響されなくなる)
  5. (更新)2018バージョンに合わせて動画手順を掲載します
  6. (動画の解説)まずmove_blockを選択し,InspectorからAddComponentを選択しAnimatorを追加する
  7. (動画の解説)Animationウィンドウ(またはAnimationタブ)のCreateボタンを押す
  8. (動画の解説)Animationの名前をblockにする
  9. (動画の解説)次に表示されたタイムラインのSamplesを30にする
  10. (動画の解説)左にあるAdd Propertyをクリックする
  11. (動画の解説)表示された中からTransfomのPositionの右にある+ボタンをクリック
  12. (動画の解説)ここから2秒前身,2秒後退するアニメーションを作成する
  13. (動画の解説)まず1秒付近にあるキーフレームを選択し,2秒に移動させる
  14. (動画の解説)次に再生バーも2秒に移動
  15. (動画の解説)次にPosition.zのキーフレームを選択する
  16. (動画の解説)Position.zの値を2にする
  17. (動画の解説)Animationの再生(ゲームの再生ではなく)し確認する
  18. (動画の解説)4秒付近に再生バーを移動し,キーフレームを追加する
  19. (動画の解説)さきほどと同様にposition.zの値を変化させる.今回は元の位置に戻すため4を入力する
  20. (動画の解説)再生し確認する
  21. Asset内のblock(アニメーションファイル)を探し,InspectorのLoop Timeにチェックを入れる(デフォルトでチェックが入っているかと思います)
  22. コインを落として確認してみる

     

次へ

コインドーザーの作成1

コインドーザーの作成

コインドーザー(コインプッシャー)を作成してみましょう.この内容は

  • Physics(物理演算)の復習と応用
  • 簡単なスクリプトによる制御

を演習します.

作成手順

  1. 新規シーンを作成
  2. Planを作成する.位置は(0,0,0)
  3. Planeの上にCubeを作成し図のように変更する
  4. このCubeを複製し,図のような位置に移動させる
  5. Cylinderを作成し,ScaleのYを0.1にする
  6. Cylinderを選択したまま,Component>Physics>Rigidbody を選択しRigidibodyコンポーネントを追加する
  7. このまま再生するとコインの動きにはならない
  8. それはCylinderにCapsule Colliderコンポーネントがついているためである
  9. そこでCapsule Colliderを取り除く.Capsule Colliderコンポーネントの右にある歯車アイコンからRemove Componentを選択する
  10. 次にMesh Colliderをアサインする.Component>Mesh Colliderを選択する
  11. 衝突を正確に計算するためにConvexにチェックを入れる
  12. 再生し確認してみること
  13. ここで一旦保存すること

つぎへ)