Perl日記

PerlとかRubyとかPHPとかPythonとか

Unity で Rotation の Z を動かさずに回転する

メモ。

入力に応じてオブジェクトを回転させたいときは、Transform.Rotate() を使う。
しかし、二次元的にそれをそのまま x と y に当てはめていろいろ動かすと、どんどん斜めになってしまう。

カメラ用のスクリプト CameraController.cs

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

public class CameraController : MonoBehaviour
{
    void Update()
    {
        float x = Input.GetAxis("Vertical");
        float y = Input.GetAxis("Horizontal");

        if (x != 0 || y != 0)
        {
            x = -1 * x * Time.deltaTime * 50f;
            y = y * Time.deltaTime * 50f;

            this.transform.Rotate(new Vector3(x, y, 0));
        }
    }
}

f:id:rightgo09:20191112233958j:plain
最初はまっすぐになってる
f:id:rightgo09:20191112233110j:plain
斜めになった

一度オイラー角に変換してから x と y を加算減算して、またクオータニオンに変換して transform.rotation に代入するといいようだ。
(正直完全に理解してない)

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

public class CameraController : MonoBehaviour
{
    void Update()
    {
        float x = Input.GetAxis("Vertical");
        float y = Input.GetAxis("Horizontal");

        if (x != 0 || y != 0)
        {
            x = x * Time.deltaTime * 50f;
            y = y * Time.deltaTime * 50f;

            Quaternion rotation = this.transform.rotation;
            Vector3 rotationAngles = rotation.eulerAngles;

            rotationAngles.x = rotationAngles.x - x;
            rotationAngles.y = rotationAngles.y + y;

            rotation = Quaternion.Euler(rotationAngles);
            this.transform.rotation = rotation;
        }
    }
}

f:id:rightgo09:20191112234144j:plain
Z は 0 のまま


これをカメラにアタッチして、写真を撮るカメラにくっつけて、カメラっぽく動かせるようにして遊んでみてた。

f:id:rightgo09:20191112235341g:plain


参考:
bluebirdofoz.hatenablog.com

Unity から YouTube で 360度ライブ配信をしたときに調べてやったまとめ

f:id:rightgo09:20190530084156p:plain
ねこ型オブジェクト

YouTubeライブ配信をするために

360度ライブ配信に関するYouTube のヘルプページ

  • https://support.google.com/youtube/answer/6396222?hl=ja
  • 「現在、YouTube でサポートされている 360° 動画は正距円筒図法によるものだけです」
  • 「360° ライブでは 2160p または 1440p の解像度が推奨されます。」
  • 「最適な動画品質を提供するために 16:9 のアスペクト比を選択します。詳しくは、アスペクト比についての記事をご覧ください。」
  • 手持ちのモニタでは 1920x1080 が限界だったので、フルスクリーンでアプリ起動して、1080p で送った
  • 四方八方の映像を送るので、解像度的にはたぶんこれくらいが限界かもしれない
    • それでもカメラに近寄るとジャギジャギしてしまっていた
    • 4K とかで送れるならそれがベストなのに越したことはない

f:id:rightgo09:20190530083306p:plain
ジャギジャギしている

正距円筒図法 = Equirectangular

  • Unity 2018 のバージョンから RenderTexture.ConvertToEquirect が使えるようになったらしい(よくわかってない)
    • なのでまずは気合で Unity 2018 までバージョンアップします(しました)
Recorder を使う
Facebook のライブラリを使う
  • GitHub - facebook/360-Capture-SDK
  • Unity から直接 YouTube ライブ配信に必要な設定(ストリームキーとか)もできる、なんかすごそうなやつ
  • OBS などを挟まないので、「ちょっと待ってね」シーンとかに切り替えできないのと、後述の資料でちょっと不安な感じだったので、今回はやめておいた
Unity の機能を直接使う

実際に 360度ライブ配信をやってみて、気になったところ

  • HMD 内でレンダリングされている世界と、Equirectangular で出力した映像に、ズレがあった
    • 具体的にはトラッキングしている 3D モデルが腰の位置で高さが固定されてしまって、頭は下に下がらないし、足を曲げても宙に浮いてしまっていた
      • ライブ配信時のコメントで、「浮いてる」とあって、「浮いてないです」と答えてしまったけど、あとでアーカイブ見たら浮いてた(悲)
    • 同じ原因で、メガネも HMD の位置に追随するようにしていたので、自分にはちゃんと見えていても YouTube では縦横無尽に移動するメガネとなってしまった
  • 私の見えている世界が、世界のすべてではなかった……!


f:id:rightgo09:20190530082138p:plain
ねこ型オブジェクトを撫でていたのに、ライブ配信では浮いてしまっていたスクショ

そのほか

  • なんか新しい演出を入れたいなと思って、パーティクルを入れてみた
    • Particle Collection SKJ 2016_Free samples - Asset Store
    • magic_ring ってやつ
    • サイズが大きかったので Scaling Mode を Hierarchy にして普通にサイズ調整して、Play() と Stop() しかやりかた分かんなかったけど
    • Unity のパーティクルシステムは Shuriken っていうの、初めて知った
  • 360 度の世界を見せるのに何かできないかなと考えて、赤いキューブを回転させて、その上にねこを置いた

【生存報告】 YouTube で 360度ライブ配信してみた

いつもの月末社内 LT 会で、YouTube の 360度ライブ配信をやってみた。

360度動画とか360度ライブとは

f:id:rightgo09:20190529092938p:plain

↑こういう映像が
↓こういう風に視聴できる(クライアントの対応が必要)

f:id:rightgo09:20190529093041p:plain
視点を動かすこともできる。
f:id:rightgo09:20190529093124p:plain


箇条書きまとめ

  • 何か新しいことやってみたいな、と思って YouTube で 360度ライブ配信やることにした
  • 360 度どころか、ライブ配信自体が初めてだったので、めちゃくちゃ緊張した
    • 限定公開で URL 知っているひとしか見られないようにしていたとはいえ
    • 2019 年で一番緊張した
    • 緊張しすぎて、文字を読んで理解するのもなんか危うかった
  • 一部ちょっと思ってたのと違う感じになったけど、おおむねよくできた、と思う
  • 配信は自宅からで、オフィスとは通信を切った状態でやったので、オフィス側の様子の録画を頼んで正解だった
    • あとでアーカイブ再生とその録画を同時に再生して楽しんだ
    • 配信中はめちゃくちゃ疎外感があった

スクリーンショットとか

Unity の画面
f:id:rightgo09:20190528085114p:plain

ちゃんと足が地面に着いて、しゃがめている画面
f:id:rightgo09:20190528085254p:plain

一人称視点のみ見える画面(左手が Chrome のコメントチェック用で、右手が Sublime Text で台本用)
f:id:rightgo09:20190528085435p:plain

Equirectangular で出力
f:id:rightgo09:20190528085746p:plain

ナウシカごっこしている 3D モデル( VRoid で作ってみてたやつをせっかくなので置いてみた)
f:id:rightgo09:20190528085818p:plain