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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

3回答

4932閲覧

Unityでスクロールする背景

milkteadaisuki

総合スコア8

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2016/02/08 11:53

ネットにあったコードを参考にして背景をスクロールさせたのですが、
なぜか微妙にカクカクしてしまいます。
どこがもんだいなのでしょうか?

public class BackScrolle : MonoBehaviour {

MeshRenderer meshrend; float speed = 0.25f; // Use this for initialization void Start () { meshrend = GetComponent<MeshRenderer>(); } // Update is called once per frame void Update () { Move(); } void Move() { float scroll = Mathf.Repeat(Time.time*speed, 1); Vector2 offset = new Vector2(scroll, 0); meshrend.material.SetTextureOffset("_MainTex", offset); }

}

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

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

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

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

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

guest

回答3

0

どういう画像でやっているかわからないのでなんとも言えませんが
Mathf.Repeatで1を超えたら0に戻る(+超えた分)ようになってるのでカクカクするのではないでしょうか

投稿2016/02/17 07:40

wtnb

総合スコア12

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

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

0

おそらくTime.timeの微妙なずれ、もしくはフレームレートを固定していないことによる更新頻度のずれが原因ではないかと思われます。

後者の可能性が高いので、Startメソッド内に
Application.targetFrameRate = 60
などと入れてUnityを再起動してから実行してみてください。
それで改善されるようなら、この記述をゲーム開始時にどこかで1回呼ぶようにすることで解決できるかもしれません

投稿2016/02/09 07:18

hiramaru

総合スコア48

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

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

milkteadaisuki

2016/02/09 07:26

回答ありがとうございます! 試してみましたが、変化なしです。。。
hiramaru

2016/02/09 07:55

上記のコメントを見るにもしや背景のスクロールだけでなくゲーム全体が処理落ちするということでしょうか。 そうであればあやしいのは meshrend.material.SetTextureOffset("_MainTex", offset); の行なので、この行のみをコメントアウトして実行してみてください。 これで改善されるようなら、UVスクロールのより高速な方法を模索する必要がありそうです。
milkteadaisuki

2016/02/09 08:09

いえ、今背景の処理しかないプロジェクトで試してます。
guest

0

SetTextureOffsetの負荷が高いか、別のコードが原因でフレーム落ちしているものかと思います。
「このコードを入れない状態」「このコードだけを入れた状態」でそれぞれどんな動きをするか確認してみてください。

どうしても改善しない場合、やや力技ですが「Update」ではなく「FixedUpdate」を使うとスムーズにいくかと思います。
(Updateは負荷により周期時間が変動し、その間は止まるのでカクついて見えます。
FixedUpdateは限りなく同周期で実行されるので、カクつきが抑えられるかと思います。本来は物理演算で使います)

投稿2016/02/09 06:49

sakura_hana

総合スコア11427

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

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

milkteadaisuki

2016/02/09 07:19

回答ありがとうございます! 早速試したので結果をお伝えしますね。 まず、「コードを入れない状態」 コードを入れていないのでもちろん動きません。 次に「このコードだけを入れた状態」 やはりかくつきました。 そして「FixedUpdateを使ってみる」 むしろ常にかくつくようになりました。。。 うーん 原因がわかりません。。。
sakura_hana

2016/02/09 07:51

「コードを入れていない状態」というのは、このコードを含まない状態でゲームがスムーズに進行するのか、という意味でした。(もしスムーズに動くなら、他のコードではなくこのコードが原因と絞り込めます) あまり変化は無いと思うのですが、Time.timeではなくTime.deltaTimeを使う方法もお試しください。(同じ動きにするには加算していく処理が必要かと思いますが) また、speedの値を変化させてみて、見え方に差があるかも確認してみてください。
milkteadaisuki

2016/02/09 08:08

なるほどそういうことでしたか^^; このコードしかないプロジェクトで試してました。 なのでこのコードが原因?ではないのかなと思ってます。。。 ちなみにdeltatime使ってみましたが、特に変化はありませんでした。 public class BackScrolle : MonoBehaviour { private Renderer meshrend; float speed = 0.125f; float scroll; // Use this for initialization void Start () { meshrend = GetComponent<Renderer>(); //Application.targetFrameRate = 60; } // Update is called once per frame void Update () { Move(); } void Move() { //float scroll = Mathf.Repeat(Time.deltaTime*speed, 1); scroll += speed * Time.deltaTime; Vector2 offset = new Vector2(scroll, 0); meshrend.material.SetTextureOffset("_MainTex", offset); } }
sakura_hana

2016/02/15 07:58

他の方のプロジェクトを見る限り、SetTextureOffsetを使用しても大きくカクつくことは無さそうです。 「微妙にカクカクする」とのことですが、それは再生した直後だけ発生していますか? それとも再生後暫くした後も発生しますか? もし再生直後だけでしたら、Unityの仕様の可能性が高いです(起動直後はシーン読み込み後の処理などが行われ、負荷が高くなる為フレーム落ちが発生しやすいです)。 発生頻度、発生した場合どれぐらい続くかを記載頂けるとヒントになるかもしれません。 可能ならProfilerを使って負荷状況も確認するとよいかと思います。 しっかりお力になれず申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問