Unity 資料

カメラについて

カメラを使う方法

  • Asset Store から既成品カメラをインポートする
  • 自分でカメラをコーディングしてみる

既成品カメラのインポート

  1. [Window] → [Asset Store]
  2. "Standard Assets" を DL & インポート
  3. Assets/Standard_Assets/Cameras/Prefabへ移動
  4. 〇〇.prefab を 左の領域にドラッグ&ドロップ

※prefab とは

ゲームオブジェクトの複製

prefab 化すると同じオブジェクトを使い回すことができる

prefab がクラスでそのインスタンスを複数生成するイメージ

Standard Assets のカメラ

  • FreeLockCameraRig
    • マウス操作でカメラの視点を移動
    • プレイヤーが操作するオブジェクトにも追従する
  • HandheldCamera
    • 追従 + 手ブレ再現

※プレイヤーが操作するオブジェクトであることを明示するにはタグを"Player"にする

自分でカメラをコーディングする

  • [Create] → "Camera" を選択

  • このままではカメラの視点は固定
  • Playerに追従して動くカメラを作る
public class FollowPlayer : MonoBehaviour
{
    public Transform target;  // ターゲットへの参照
    private Vector3 offset;  // 相対座標

    void Start()
    {
        //自分自身とtargetとの相対距離を求める
        offset = GetComponent<Transform>().position - target.position;
    }

    void Update()
    {
        // 自分自身の座標に、targetの座標に相対座標を足した値を設定する
        // 後ろを飛んでいるドローンみたいに追従する
        GetComponent<Transform>().position = target.position + offset;
    }
}

シーンについて

シーン

  • 画面遷移に使う (暗転で区切られるゲーム画面)
    • タイトル画面 → ゲーム画面
    • ステージ 1 → ステージ 2
  • Unity ではシーン毎に .unity ファイルを編集
  • シーンの遷移はコーディングによって行う

シーンの遷移

ex) タイトル画面からゲーム画面(Mainシーン)への遷移

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Start : MonoBehaviour {
    public void ClickStart(){
        SceneManager.LoadScene("Main");
    }
}
  • SceneManager.LoadScene() 関数で遷移
  • UnityEngine.SceneManagement を using する
  • この関数をボタン押下イベントと組み合わせたりして使う

オブジェクトの制御について

プレイヤーが動かせる

オブジェクトを作る方法

  • AssetStoreから既製品キャラクターを持ってくる
  • 自分でコーディングしてみる

既製品キャラクターをインポート

  1. Assets/StandardAssets/ Characters/ThirdPersonCharacter/Prefab
  2. ThirdPersonControllerをインポート

これだけで人っぽく動くキャラクターを用意できる

中のスクリプトを見ると結構勉強になる

自分で操作できる

オブジェクトを作ってみる

簡単のために四角い箱を動かしてみます

自分で操作できる

オブジェクトを作ってみる

  1. [Create] → "Cube"
  2. Add Component → Physics → Rigidbody 
  3. Add Component → New Script

Rigidbody ・・・ 剛体; 力を加えられる物体として認識される

public class MoveCube : MonoBehaviour
{
    float speed = 10;
    //Updateはフレームごとに呼ばれる
    //FixedUpdateは動くたびに呼ばれる
    void FixedUpdate()
    {
        // ここで右1左-1上1下-1を検知
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Rigidbody rigidbody = GetComponent<Rigidbody>();

        // x軸(横)とz軸(奥)に力を加える
        rigidbody.AddForce(x * speed, 0, z * speed);
    }
}

スクリプト例

A, ← -1

D, → +1

W, ↑ -1

S, ↓ +1

x                                         z