質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1473閲覧

Unity 2D横スクロールにて、カメラの処理にVector3.Lerpを用いるとキャラクターがぶれた感じに見えます。

Z_Silver

総合スコア27

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/06/02 04:46

編集2019/06/05 08:57

###前提・実現したいこと
今までカメラの処理をキャラクターの移動に合わせて追従する形をとっていたのですが、
バックの背景が少しカクついて見えたので、なめらかに移動するようにする為調べたところ
Vector3.Lerpの処理にたどり着いたのですが、今度はキャラクターがぶれて(ぼやけて?)
見えるようになった為質問することにしました。

(※背景はぶれずになめらかに改善されています。)

 ※ 以下のソースにて「Player.transform.position.x + 6」はゴールエリア(あたり判定)に入ったとき
カメラを止めるため、ゴールより先の背景を映さないため+6の範囲にしています。
(ここも改善が必要かもしれません)

また、横スクロールなので上下には移動しないように「offset.y = 0」で固定しています。

イメージ説明
改善前のカメラ処理ではユニティちゃんに違和感はありません

イメージ説明
Vector3.Lerpの処理を用いると左右に揺れている?状態です

© Unity Technologies Japan/UCL
※キャプチャーだと再現できないのでiphoneでスローで撮影し確認

###該当のソースコード

void LateUpdate () { offset.x = Player.transform.position.x + 6; offset.y = 0; offset.z = -10; //キャラクターが生存している時 if (Player.isAlive) { transform.position = Vector3.Lerp(transform.position, offset, Time.deltaTime); } else { audiosource.Stop ();//BGMを停止 } } ``` ###改善前のソースコード

if (Player.transform.position.x > transform.position.x - 4)
{
//カメラの位置を取得
Vector3 cameraPos = transform.position;

//キャラクターの位置から左に4移動した位置を画面中央にする
cameraPos.x = Player.transform.position.x + 4;
transform.position = cameraPos;
}

###補足情報(言語/FW/ツール等のバージョンなど) Unity 2019.1.3f1 言語:C# カメラの初期値はxが0、yが0、zが-10です キャラクターの初期位置は Xが-5.4、yが-4.7、zが0です キャラクターは左➡右へ移動します(強制横スクロール) キャラクターの速度は6fで固定しています。 速度を2fや3fまで落とすとぶれがないように見えますが ゲームとして成り立たないので6fからは落とさない方向で..

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Lerpは基本的にスタートとエンドの位置は固定して、
最後の数値をだんだんと増やす、って使い方をします

void Start(){ start = new Vector(0f, 0f, 0f); end = new Vector(3f, 5f, 10f); nowtime = 0f; totaltime = 3f; } void Update(){ nowtime += Time.deltaTime; transform.position = Vector3.Lerp(start, end, nowtime / totaltime); if (totaltime <= nowtime){ // 目標位置についた nowtime = 0f; } }

LerpはただのVector計算の補助ツールなので、
Lerpを使わずに処理を書いたほうがいいと思います

投稿2019/06/03 01:26

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Z_Silver

2019/06/03 16:48

ご回答ありがとうございます。 なるほど、そうだったんですね。 ただ、そうなると改善前のソースに手を加える形になりますが・・ Lerpを使わずに滑らかにカメラをX軸のみ移動させる方法がございましたら 教えていただけますでしょうか?
izmktr

2019/06/04 01:02 編集

滑らかではない、というのが具体的にどういうことがおこっているのかわからないので、動画を入れてくれればなにかアドバイスできるかもしれません x軸を動かすだけなら、transoform.position.x = transoform.position.x + Time.deltaTime です
Z_Silver

2019/06/04 18:34 編集

こちらのサイトでは動画を送付できないのでGIF形式で追加しましたので、ご確認ください。 説明不足で申し訳ございません。 現在Unityちゃんを使用したランゲームを作成しておりまして、 改善前のカメラの処理ではキャラの速度(6f)に追従する形になっており Unityちゃんの速度が速いためか背景に違和感を覚えました。 その後、Lerp処理を行ったところカメラが少しゆっくり(少し遅れて追従?)になったせいか 背景の違和感はなくなりましたが、キャラクターがぶれているようになったのが現状です。 キャラクターがある程度進むと少しゆっくりと追従するような、ランゲームに最適なカメラ処理がございましたらご教示ください。
izmktr

2019/06/05 01:40

Gifありがとうございます ただ、ループの切れ目で一瞬止まる以外、ぶれて見えるというのがやっぱりよくわかりません… キャラの速度以下で追従してしまうと、キャラが画面外に行ってしまいますので、最終的にはキャラの速度と同じ速度で追従する必要はあります マリオのように自主的に走るゲームなら画面の半分より先に進むとスクロールする、という方法でしょうか あと、高速を売りにするなら地面の細かいパターンは辞めたほうがいいです(ストロボ効果で逆走するように見えたりするし、そもそも目が疲れるし、これがブレる原因?) ここは水平の模様にして、背景や地面の切れ目など、大きなもので速度を感じられるようにした方が良いです
Z_Silver

2019/06/05 06:38 編集

>マリオのように自主的に走るゲームなら画面の半分より先に進むとスクロールする、という方法でしょうか? はい、そうです。(イメージ的にはマリオランが近いかもしれません。) またゲーム自体もそこまで高速ではないのと、ステージごとに分けており 5秒から15秒程度でクリアできる仕様にしています。
izmktr

2019/06/05 07:07

とりあえず、ブレる原因という部分とは逸れた話になっているので、そちらに関して疑問があれば別に立て直してください ブレる原因に関しても、動画を見ても私にはぶれているように見えないので、こっちに関しても力になれそうにないです
Z_Silver

2019/06/05 08:13

承知しました。 ここまで長々とお付き合いいただき、ありがとうございました。
Z_Silver

2019/06/05 09:02 編集

念の為キャプチャーだと分かりにくかったため、画像を差し替えました
guest

0

自己解決

###解決方法

URL:teratail.com/questions/193322
にてMathf.SmoothDampを用いて自己解決しました。

投稿2019/06/08 16:45

Z_Silver

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問