admin のすべての投稿

シーン遷移の基本

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

ここでは,トップ画面>ゲーム画面>エンド画面の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. ここで一旦保存すること

つぎへ)

Unity基本操作(2020)

 

練習

復習や練習を兼ねてピタゴラ装置的な物を作ってみること

 

作例

最後にオチがあることが望ましい.障害物は多いほどいい.

作成の流れ

  1. 床(Plane)作成
  2. 障害物作成
  3. ボール作成(Physics設定)
  4. 障害物のうち物理シミュレーションが必要なものにPhysicsを設定
  5. 再生し確認(うまくいくまでくり返し)
  6. Recorderアセットインポート
  7. Recorderによるキャプチャ
  8. 提出

※全ての作業はUnity再生中はできません

作成手順

  1. GameObject>3D Object>Plane で板を取り出す
  2. カメラの位置を調整し,全体が映るようにする
  3. Inspectorで原点に配置し,Scaleを10にする
  4. GameObject>3D Object>Sphere で球を作成し,選択した状態で Component>Physics>Rigidbodyを選択し,球にRigid Bodyを割り当てる
  5. 球を選択し,InspectorにRigidbodyのコンポーネントが追加されている.このRigidbodyのMass(重量)を50kgにしてみる.他の設定についてはこちらを参考のこと(質量は自由に変えてまわない)
  6. 再生ボタンを押しゲームを開始し,球が落下するか確認する
  7. 落下しない場合,RigidbodyコンポーネントのUseGravity(上図も参考)にチェックが入っているか確認すること
  8. その他にも,動作させる(つまり固定しない)オブジェクトにはRigidBodyの設定をする(作例ではシーソー部分の板や円柱)
  9. バウンスの設定をする.アセットフォルダ内で 右クリック>Create>Physic Materialを作成
  10. 作成したPhysic Materianを選択し,Bouciness(反発係数)を0.7くらいに設定する(参考サイト
  11. 作成したPhysic  Materialを球のインスペクタ内にあるSpecular ColliderコンポーネントのMaterialの欄に入力する(※他のオブジェクトの場合でもColliderに入れるとバウンスの設定ができる)
  12. Colliderは衝突判定の際に使用される簡易形状のこと.複雑な形状のオブジェクトも,簡易的なColliderを用いて衝突判定をおこなう.こうすることで計算資源を有効活用している.
  13. なお,Colliderが無いオブジェクトは動かしてもすり抜ける(アニメの幽霊みたくなる)ので注意.特にRigidbodyをつける際などは注意
  14. 再生し球が落下したあとバウンスするか確認のこと
  15. 各オブジェクトを配置し,おもいがけない動作をするように組んでみること

 

参考

こうした物理シミュレーションを応用して作成できそうなゲームやプロジェクトを考えてみてください.コインドーザーやピンボールなどもその一例です.

また物理演算を使いYoutubeで動画を作成している方もいます.(アンパンマンの頭をアニメのように入れ替え(以下略)や,竹コプターを(以下略)のような動画)

提出(進度によって変更の可能性あり)

動画のキャプチャーがうまく行きそうな場合,キャプチャーした動画を提出してもらう予定です.

Recorderによるキャプチャ方法

Unityから提供されているRecorderアセットを読み込み,作成したシミュレーションを動画にし提出してもらいます.

  1. Unity内のAssetStoreUnity Recorederと検索
  2. 無料でダウンロードできる
  3. ダウンロード後,ボタンがインポートに変わるので,インポートする(Unity再生中ににはできません)
  4. 現行バージョンの場合 Window>General>Recorder>ReorderWindow(※このメニューはUnity Recorederをインポートしないと表示されません)
  5. 現行バージョンの場合 +Add New Recorders>Movieを選択
  6. 図の設定(Windowsの場合設定が変更になる場合もある)にし,START RECORDINGをクリックし録画を始める
  7. Unityが再生され,録画が始まる
  8. Unity内の動作が終わるまで待ち,STOP RECORDINGをクリックし録画を終了させる(※Unityは再生モードのままになっているので,自分で停める
  9. 現行バージョンの場合 プロジェクトフォルダ内のRecordingsフォルダ内に録画された動画があるので再生する
  10. ※ビルド時(アプリ化する際)はUnity Recorderは取り除きましょう
  11. 以下は旧バージョンの場合の対処法です
  12. (旧バージョンの場合)メニューバーのTools>Recoreder>Video を選択(※このメニューはUnity Recorederをインポートしないと表示されません)
  13. (旧バージョンの場合)設定は図のとおり.Flip Image Verticallyは下図のようにオフにすること
  14. 最後にウィンドウ下部のstart recordingを押しキャプチャを始める.止めたい時はstop recordingを押す
  15. ウィンドウズのデスクトップからUnityのプロジェクトフォルダを探す.
  16. プロジェクトフォルダ内(アセットフォルダより上の階層)にRecordingフォルダができているので,その中のムービーを確認し,思い通りの動きをした成功映像をMaNaBoに提出