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

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

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

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

Unity

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

Q&A

解決済

2回答

3432閲覧

Unity 画面の半分より先にキャラクターが進むとスクロールするようなカメラ処理をするには?

Z_Silver

総合スコア27

C#

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

Unity

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

0グッド

1クリップ

投稿2019/06/05 10:40

編集2019/06/05 15:19

###前提・実現したいこと
前回質問した
URL:teratail.com/questions/192688
と類似した問題になるのですが・・
(質問が変わるだけでソース自体はそこまで変わりません)

以下のソースに
画面の半分より先にキャラクターが進むと(ゆっくり?)スクロールするような処理
(例(イメージだと);マリオランなど)
をさせるにはどうすればいいのでしょうか?
回答よろしくお願いします。

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

public PlayerScript Playersc; private AudioSource audiosource; void Start(){ //オーディオソース audiosource = GetComponent<AudioSource> (); } void LateUpdate () { //キャラクターが生存している時 if (Playersc.isAlive) { //transform.position = Vector3.Lerp(transform.position, offset, Time.deltaTime); if (Playersc.transform.position.x > transform.position.x - 4) { //カメラの位置を取得 Vector3 cameraPos = transform.position; //ユニティちゃんの位置から左に4移動した位置を画面中央にする cameraPos.x = Playersc.transform.position.x + 4; //----追加部分----- cameraPos.x /= 1.5f; transform.position = cameraPos; } } else { audiosource.Stop ();//BGMを停止 } } ``` ###補足情報(言語/FW/ツール等のバージョンなど) Unity 2019.1.3f1 言語:C# キャラクターは左➡右へ移動します(強制横スクロール) キャラクターの速度は6fで固定しています。 作成しているものは2D横スクロール(ランゲーム)になります ゲームの一部の画像は前回の質問時に貼っているのでそちらを確認してもらえればと思います ---------追記------------------ ソースに cameraPos.x /= 1.5f;を追加するとカメラの速度はゆっくりになりましたが キャラクターが画面の半分より先にどんどん進んでしまう形になりました。 必ずキャラが中心に来るようにしたいと考えております。

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

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

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

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

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

guest

回答2

0

自己解決

###該当のソースコード
public float smoothTimeX = 0.3f;

if (Playersc.isAlive) {
float posX = Mathf.SmoothDamp(transform.position.x, player.transform.position.x + 3.5f, ref velocity.x, smoothTimeX);

transform.position = new Vector3(posX, transform.position.y, transform.position.z);

}

###参考動画(英語)
URL:www.youtube.com/watch?v=BQEsbOALKhc

を参考にMathf.SmoothDampを用いて自己解決しました。

投稿2019/06/08 16:37

Z_Silver

総合スコア27

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

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

0

キャラクターが画面の右側に移動している場合、
カメラのスクロール速度にキャラクターの移動速度を加えれば良いのではないでしょうか。

投稿2019/06/05 13:32

marurunn

総合スコア702

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

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

Z_Silver

2019/06/05 15:08

ご回答ありがとうございます。 cameraPos.x += 6f;を追加し キャラクターと同じ速度を加算すると、キャラクターが+4の位置に到達した瞬間に一瞬で先の位置に移動する不自然なカメラができてしまったので・・ cameraPos.x /= 1.5f;に変更しゆっくりと追いかける形をとりました。 ただし、これだとキャラクターが画面の半分より先に到達してもどんどん先に進んでしまう形になります。
marurunn

2019/06/05 15:53

であれば「どこまでを画面の右側にするか」という定義が行えていない事が質問者様にとって困っている事だと思いますので、 カメラとキャラクターの相対座標を割り出し、「画面の右端に到達するまで」キャラクターの移動速度をカメラの移動速度に加えない、という具合にif文を追加すれば良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問