LoginSignup
35
25

More than 5 years have passed since last update.

【Unity】 Perspectiveカメラからの距離が変化しても見た目の大きさは変わらないオブジェクトを作る

Last updated at Posted at 2017-01-18

はじめに

オブジェクトの見た目の大きさは変えずにカメラからの距離だけ変えたい、という状況に出くわしたので考え方の整理もかねて記事にしてみました。

ちなみに、gifアニメーションはProcessingを使って作っています。

考え方

Perspectiveカメラ(透視投影)

近くのものは大きく、遠くのものは小さく見えるように視錐台を使って画面上へ投影する手法
export.gif

カメラから離れても見かけ上の大きさが変化しない立方体

問題を簡単にするため、立方体を使って考えます。
立方体とカメラの距離が1の場合の立方体の1辺の長さをLとしたとき、
カメラからの距離がdの場合の辺の長さをd * Lにすると画面上の像が同じ大きさになります。(相似)
export.gif

以上を踏まえてスクリプトに落とし込んでいきます。

見かけ上の大きさを一定にするスクリプト

NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // カメラからの距離が1のときのスケール値
    Vector3 baseScale;

    void Start()
    {
        // カメラからの距離が1のときのスケール値を算出
        this.baseScale = this.transform.localScale / this.GetDistance();
    }

    void Update()
    {
        this.transform.localScale = this.baseScale * this.GetDistance();
    }

    // カメラからの距離を取得
    float GetDistance()
    {
        return (this.transform.position- Camera.main.transform.position).magnitude;
    }
}

実行してみる

上記のスクリプトを立方体にアタッチして動かしてみます。
scale.gif

立方体を動かしてもカメラから見た立方体の大きさは変わっていないことが見て取れますね。(完

35
25
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
25