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

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

ただいまの
回答率

90.48%

  • JavaScript

    17082questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • C#

    7487questions

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

  • Unity

    4230questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1377questions

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

  • Unity2D

    935questions

Unity5で、ログが重複してしまいます。助けてください。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 806

van-0215

score 56

Unity5を使い自作ゲームを作っているのですが、Debug.logを表示について聞きたいことがあります。

現在複数のステージを作り1つ1つをつなげて1つのゲームを作成しようとしています。

ステージ1(Main)からステージ2(Stage2)に移動する際に画像にありますように左下にルール等を表示しています。

スタート直後のステージ1では、きれいに表示がされるのですが、ステージ1からステージ2に移る際に同じ文章が重複してしまいます。
初心者なものでして、なぜこのようになってしまうのかがわかりません。
重複をなくすにはどうしたらよいか、教えてください。お願いします。

なおこの表示に関しては、Assets Storeより"ScreenLogor"というものをインポートして使っています。

ステージ1
ステージ2

それぞれのスクリプトを下記に貼っていきます。※使用言語はC#です。

<枠と仕組み? ScreenLogger.cs>

using UnityEngine;
using System.Collections.Generic;

public class ScreenLogger : MonoBehaviour
{
    public enum LogAnchor
    {
        TopLeft,
        TopRight,
        BottomLeft,
        BottomRight
    }

    public bool IsPersistent = true;
    public bool ShowInEditor = true;

    [Tooltip("Height of the log area as a percentage of the screen height")]
    [Range(0.3f, 1.0f)]
    public float Height = 0.5f;

    [Tooltip("Width of the log area as a percentage of the screen width")]
    [Range(0.3f, 1.0f)]
    public float Width = 0.5f;

    public int Margin = 20;

    public LogAnchor AnchorPosition = LogAnchor.BottomLeft;

    public int FontSize = 14;

    [Range(0f, 01f)]
    public float BackgroundOpacity = 0.5f;
    public Color BackgroundColor = Color.black;

    public bool LogMessages = true;
    public bool LogWarnings = true;
    public bool LogErrors = true;

    public Color MessageColor = Color.white;
    public Color WarningColor = Color.yellow;
    public Color ErrorColor = new Color(1, 0.5f, 0.5f);

    public bool StackTraceMessages = false;
    public bool StackTraceWarnings = false;
    public bool StackTraceErrors = true;

    static Queue<LogMessage> queue = new Queue<LogMessage>();

    GUIStyle styleContainer, styleText;
    int padding = 5;

    public void Awake()
    {
        Texture2D back = new Texture2D(1, 1);
        BackgroundColor.a = BackgroundOpacity;
        back.SetPixel(0, 0, BackgroundColor);
        back.Apply();

        styleContainer = new GUIStyle();
        styleContainer.normal.background = back;
        styleContainer.wordWrap = true;
        styleContainer.padding = new RectOffset(padding, padding, padding, padding);

        styleText = new GUIStyle();
        styleText.fontSize = FontSize;

        if (IsPersistent)
            DontDestroyOnLoad(this);
    }

    void OnEnable()
    {
        if (!ShowInEditor && Application.isEditor) return;

        queue = new Queue<LogMessage>();

#if UNITY_4_5 || UNITY_4_6
        Application.RegisterLogCallback(HandleLog);
#else
        Application.logMessageReceived += HandleLog;
#endif
    }

    void OnDisable()
    {
        if (!ShowInEditor && Application.isEditor) return;

#if UNITY_4_5 || UNITY_4_6
        Application.RegisterLogCallback(null);
#else
        Application.logMessageReceived -= HandleLog;
#endif
    }

    void Update()
    {
        if (!ShowInEditor && Application.isEditor) return;

        while (queue.Count > ((Screen.height - 2 * Margin) * Height - 2 * padding) / styleText.lineHeight)
            queue.Dequeue();
    }

    void OnGUI()
    {
        if (!ShowInEditor && Application.isEditor) return;

        float w = (Screen.width - 2 * Margin) * Width;
        float h = (Screen.height - 2 * Margin) * Height;
        float x = 1, y = 1;

        switch (AnchorPosition)
        {
            case LogAnchor.BottomLeft:
                x = Margin;
                y = Margin + (Screen.height - 2 * Margin) * (1 - Height);
                break;

            case LogAnchor.BottomRight:
                x = Margin + (Screen.width - 2 * Margin) * (1 - Width);
                y = Margin + (Screen.height - 2 * Margin) * (1 - Height);
                break;

            case LogAnchor.TopLeft:
                x = Margin;
                y = Margin;
                break;

            case LogAnchor.TopRight:
                x = Margin + (Screen.width - 2 * Margin) * (1 - Width);
                y = Margin;
                break;
        }

        GUILayout.BeginArea(new Rect(x, y, w, h), styleContainer);

        foreach (LogMessage m in queue)
        {
            switch (m.Type)
            {
                case LogType.Warning:
                    styleText.normal.textColor = WarningColor;
                    break;

                case LogType.Log:
                    styleText.normal.textColor = MessageColor;
                    break;

                case LogType.Assert:
                case LogType.Exception:
                case LogType.Error:
                    styleText.normal.textColor = ErrorColor;
                    break;

                default:
                    styleText.normal.textColor = MessageColor;
                    break;
            }

            GUILayout.Label(m.Message, styleText);
        }

        GUILayout.EndArea();
    }

    void HandleLog(string message, string stackTrace, LogType type)
    {
        if (type == LogType.Assert && !LogErrors) return;
        if (type == LogType.Error && !LogErrors) return;
        if (type == LogType.Exception && !LogErrors) return;
        if (type == LogType.Log && !LogMessages) return;
        if (type == LogType.Warning && !LogWarnings) return;

        queue.Enqueue(new LogMessage(message, type));

        if (type == LogType.Assert && !StackTraceErrors) return;
        if (type == LogType.Error && !StackTraceErrors) return;
        if (type == LogType.Exception && !StackTraceErrors) return;
        if (type == LogType.Log && !StackTraceMessages) return;
        if (type == LogType.Warning && !StackTraceWarnings) return;

        string[] trace = stackTrace.Split(new char[] { '\n' });

        foreach (string t in trace)
            if (t.Length != 0) queue.Enqueue(new LogMessage("  " + t, type));
    }
}

class LogMessage
{
    public string Message;
    public LogType Type;

    public LogMessage(string msg, LogType type)
    {
        Message = msg;
        Type = type;
    }
}
<ステージ1用 Test.cs>
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
    float timeout = 5, lasttime = -1;
    int i = 0;

    void Start()
    {
        TestMessageTypes();
    }

    void TestMessageTypes()
    {
        Debug.Log("スタート地点に立ちました。");
        Debug.Log("ゴールを目指して頑張ってください");
        Debug.LogWarning("十字キーで移動できます。");
    }
}
<ステージ2用 Stage2.cs>
using UnityEngine;
using System.Collections;

public class Stage2 : MonoBehaviour
{
    float timeout = 5, lasttime = -1;
    int i = 0;

    void Start()
    {
        TestMessageTypes();
    }
    void TestMessageTypes()
    {
        Debug.Log("第2ステージです。");
        Debug.LogWarning("Spaceでジャンプできます。");
        Debug.LogWarning("助走が必要です。");
        ClearConsole();
    }

    static void ClearConsole() {
        var logEntries = System.Type.GetType("UnityEditorInternal.LogEntries,UnityEditor.dll");
        var clearMethod = logEntries.GetMethod("Clear", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
        clearMethod.Invoke(null,null);
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

可能性があるとすれば……
・Stage2.csがシーン上に2つ存在している(複数のオブジェクトに付いているとか)
・clearMethodが悪さしている
上記のどちらかかと思います。

なお、これは余計なお世話かつ非常に今更感のある指摘なのですが……
Debug.Logをヘルプ用のテキスト表示に使うのはあまりよくないかと思います。(デバッグログを画面上で確認する為に表示させているなら分かりますが)
また、OnGUIは負荷が高く、実用には適しません。
uGUIと通常のstring変数(またはList<string>等)を用いた方が簡潔で安定性のあるコードになるかと思います。ご参考までに。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 13:30

    ご指摘の通りだと思いました。
    ありがとうございました。

    キャンセル

関連した質問

  • 解決済

    ドーナツの画像の背景色を塗りつぶしたいです。

    いつもお世話になります。 画像処理をしています。使っているのはC#ですが、ごく汎用的な話かもしれません。 ドーナツの画像の背景色を塗りつぶしたいです。 背景色は、R=25

  • 解決済

    Androidでタップして図形を複数描画するアプリケーション

    ご覧頂き ありがとうございます。 現在タップをした座標に円形を描画するアプリケーションを制作しています。 そこでつまづいてしまっている部分が、今回ご教示いただきたい内容

  • 解決済

    jQueryを使ってボタン操作でsection移動をうまくしたい

    現状・目標 シンプルに下ボタンを押せば下に、上ボタンを押せば上に 指定したクラスに一個ずつスクロールするjsを組みたいです。 参考URLを参考に作りました。 これの、逆

  • 解決済

    untiy terrain機能で作った壁が登れてしまう

    unityで、terrainで作った壁を登れなくしたいです。 キャラクターがジャンプ中に移動方向に進むと、terrainで作った急斜面な山や壁を登れてしまいます。 滑り落ち

  • 解決済

    ジャパンネット銀行のスクリピング

    「Google Apps Scriptでクレジットカード利用明細を毎月自動で奥さんにメール送信する」 を参考に、ジャパンネット銀行の明細取得を行いたいと思ったのですが、 スクリ

  • 解決済

    C#のcomboboxの要素による条件分岐

    現在C#を用いて、 マウスのドラッグで矩形を描くプログラムを作成しています。 描く矩形の形は、comboboxによって変えようと思います。 ObjSelectFrm.cs

  • 解決済

    Unity5.6 パスワード入力実装について

    Unity5.6を使用しています。 4桁のパスワード機能を実装しようと思っております。 GUIは完成して、あとはプログラムのところなのですが わからいない点が何点かあり、質問さ

  • 受付中

    teratail3周年おめでとうございます

    alert("teratail3周年おめでとうございます"); みなさんの得意な言語での祝福のメッセージの出力方法を教えてください。

同じタグがついた質問を見る

  • JavaScript

    17082questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • C#

    7487questions

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

  • Unity

    4230questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    1377questions

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

  • Unity2D

    935questions