【Unity入門】lookatを使いこなせ!いろんな回転をまとめました

sato
書いた人 sato
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

Unityで作品を作る上で、回転はとても大事な要素ですね。

そんな回転の中でも、特に需要の高い手法の一つに特定のオブジェクトの方向を向かせるといったことがあげられると思います。

例えば以下のように特定のオブジェクトを、カメラで追うとかでしょうか。

実はUnityならそれがLookAt関数一つで行えるんです!

使い方も非常に簡単なので、ここで学んで見てくださいね。

[基本] LookAtとは?
[基本] LookAtを使ってみよう!
[応用] LookAtのいろいろな使い方!

今回はLookAt関数の基礎部分を学び、続けて応用的な使い方まで見ていきましょう!

それではよろしくお願いいたします!

LookAtとは?

lookat関数を一言で表すなら「指定した方向を見る関数」です。

和訳した通りですね!

lookat関数はオブジェクトが保持するtransformコンポーネントの中に存在する関数で、使用するとそのオブジェクトを指定した方向へ向かせることができます。

これを使用すれば、さっき見たような特定の物を注視する処理を一瞬で実現できますよ!

早速使い方を学んでみましょう!

LookAtを使ってみよう!

では実際に先ほどのオブジェクトを注視する、プログラムの中身を見てみましょう。

このプログラムの、カメラには以下のプログラムをつけています。

このプログラムの重要な点は以下の部分です。

自身(カメラ)のtransformのLookAt関数へ、注視したいtargetObjectを渡しているだけですね!

それをUpdate関数の中で行っているため、常にオブジェクトを注視できているわけです。

非常に簡単ですね!

LookAtの具体的な使い方

続けてLookAt関数の、引数などの具体的な使い方を見てみましょう!

リファレンスを見ると、LookAt関数の引数はこのようになっています。

第一引数には、注視したいオブジェクトのTransformを入れましょう。

第二引数には上方ベクトルを指定することができますが、特殊なことをやらない限りはVector3.upで問題ありません。

また先ほどの例題に第二引数が設定されていないのは、第二引数のデフォルト引数がVector3.upとなっているからですね!

※デフォルト引数・・・呼び出すとき省略した場合、自動的に使用してくれる引数

LookAtの応用的な使い方!

LookAtを応用すると、いろいろな便利なテクニックが行えます。

その応用例を簡単に見てみましょう。

簡易ビルボードを作ろう!

ビルボードとは、オブジェクトを常に正面へ向かせる仕組みの事を言います。

どんな時に使われるかというと、以下のような場合でしょうか。

・メニュー
・エフェクト
・遠くの雲や木・草などの背景

ゲームなどに詳しい人は「近づいたら実は、カメラに対して正面を向き続けるだけのペラペラな木」なんてものを見たことがあると思います。

あれがビルボードなんです。

ビルボードの有用性は長くなるのでまた別の機会に、説明するとして…

LookAtを使用すると、この仕組みを簡単に実現することができます。

これは先ほどカメラに付与した「常にオブジェクトの方向を見続ける」処理を、オブジェクト側にもつけた状況です。

当たり前ですがカメラ側を見続けてくれていますね!

【補足】簡易ビルボードの「簡易」って?

実は、正確なビルボードはまた違った作り方をする必要があるからです。

単純にカメラの方向だけを見続けた場合、オブジェクトにカメラが近づくと不自然に回転が見えてしまうことがあるんです。

そのため、よく使われる「より正しいビルボード」の作り方はカメラの逆行列をオブジェクトに入れる方法となります。

また木などをより自然に表現するためには、Y軸を固定したりなどの手法を取り入れる必要もあります。

その辺りを説明し始めると長くなるため、また別の機会に見ていきましょう。

ゆっくり追いかけてみよう!

Unityを使っていくと、緩急のある動きをつけたくなることもありますよね。

この緩急は、よりクオリティの高い作品を作る上で重要なテクニックです。

先ほどのようにLookAtを使うと、指定した方向をすぐに向くことができますが、それでは直線的な動きになってしまいます。

より一段上を目指すために、緩急をつけた回転を行ってみましょう!

緩急をつけるとこんな動きになります。

ゆっくりと、オブジェクトの方向を向くようになりましたね!

実際のソースを見てみましょう。

先ほどのカメラにつけたソースを改修しています。

各処理の内容としては、コメントに記述がある通りです。

実はゆっくり追いかける処理に、LookAt関数は向きません。

そのためQuaternion.Slerp関数を使用しています。

この関数が補完処理を行ってくれています。

Slerp関数の使い方を簡単に書くと、第一引数、第二引数に与えられた回転情報を、第三引数の速度で補完をかけてくれる関数と言えるでしょう。

またLookAt関数との違いを一言で行ってしまえば以下のように言えるでしょうか。

LookAt関数・・・すぐに指定方向を向かせる時に使う
Quaternion.Slerp関数・・・方向を補完しゆっくり回転させる時に使う

ぜひ上手に使い分けてみてください。

まとめ

今回はLookAt関数や、それに関する応用的な話を学びました。

Unityを触る上で、回転はとても重要な機能です。

特に「指定した方向を見る」といった機能は、必須と言っても良い機能といえるでしょう。

中でもLookAt関数は簡単に使えて、すぐ指定方向を向ける、とても便利な関数です。

是非使いこなしていきましょう!


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーランスをされている市川友哉さん。33歳で、プログラミングを学び始め、4ヶ月という短い期間でフリーランスエンジニアとして独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


自分にプログラミングなんて・・・と思っていませんか?

今後10年間で今ある職業の『77%』はなくなると言われています。

人工知能や機械学習を筆頭にVR、AR、ドローンなどの最先端技術の発達はこれからのあなたの働き方に間違いなく影響を与えるでしょう。

将来を見据えてプログラミングができるようになってエンジニアになりたい、自分だけにしかできないクリエイティブな仕事がしたい、、、とお考えの方も少なくないでしょう。

と、同時に「難しそう、、自分にはできないだろう、、、」と諦めている方も多いのではないでしょうか。

弊社マンツーマンレッスンは、お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、オリジナルアプリ開発や、フリーランスとしての仕事獲得まで支援しています。

まずは『無料体験レッスン』で弊社コンサルタントと一緒にあなた専用の学習カリキュラムを考えてみてはいかがでしょうか?

詳しくは下の画像をクリックしてください。

cta_mtm2

非常識な結果を出した卒業生

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

sato

sato

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!