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

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

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

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

Unity

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

Q&A

0回答

1149閲覧

ゲーム起動後、最初にその処理を実行した時に重くなります

ft_zack

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2020/11/23 15:49

Unityでandroidゲームを制作しています。

ゲームに 残像表示、 ダメージを受けた時の数値表示 を実装しているのですが、
実機でゲームを起動し、起動後の一番最初にその処理が走るアクションを行った時(二段ジャンプ時や被ダメージ時)に重くなり、一秒ほど固まります。
しかし、重くなるのは最初の一回のみで、その後はシーン移行をしてもその処理で固まることはありませんでした。

該当のソースコード

//二段ジャンプ時などの残像表示
using UnityEngine;
using DG.Tweening;

public class AfterImage : MonoBehaviour
{
[SerializeField] Color color = Color.black;
[SerializeField] Material material = null;
[SerializeField] float fadeoutTime = 0.0f;
[SerializeField] Vector2 imageMagnification = Vector2.one;

private SpriteRenderer sprite; private GameObject obj; private GameObject afterImages; private Vector2 tmp = Vector2.one; void Start() { obj = this.gameObject; sprite = this.gameObject.GetComponent<SpriteRenderer>(); afterImages = new GameObject(this.gameObject.name + "AfterImage"); //残像オブジェクトを入れるからオブジェクトを作る } void Update() { //残像オブジェクトがないときはアクティブにしない if (afterImages.transform.childCount == 0) { afterImages.SetActive(false); } else { afterImages.SetActive(true); } } public void CreateAfterImage() { //オブジェクトを生成してスタート時に生成したオブジェクトの子にする var newObject = new GameObject(); newObject.transform.parent = afterImages.transform; //SpriteRendererコンポーネントを追加して対象オブジェクトのスプライトを代入 var newObjectSprite = newObject.AddComponent<SpriteRenderer>(); newObjectSprite.sprite = sprite.sprite; //positionとlocalScaleを対象オブジェクトに合わせる newObject.transform.position = obj.transform.position; newObject.transform.localScale = obj.transform.localScale * imageMagnification; //色とマテリアルを設定する newObjectSprite.color = color; newObjectSprite.material = material; //StartCoroutine("FadeoutSprite", newObjectSprite); //fadeoutTime秒かけてa = 0にフェードアウトして処理が完了したらデストロイする newObjectSprite.DOFade(0, fadeoutTime).OnComplete(() => { Destroy(newObjectSprite.gameObject); }); }

}

//被ダメージ時のダメージ数値の表示

using UnityEngine;
using TMPro;

public class DamageUICreate : MonoBehaviour
{
public static GameObject damageUIParent = null;
public static GameObject damageUIObj = null;
public static float addY = 0.0f;

[SerializeField] private GameObject _damageUIParent = null; [SerializeField] private GameObject _damageUIObj = null; [SerializeField] private float _addY = 0.0f; private void Awake() { damageUIParent = _damageUIParent; damageUIObj = _damageUIObj; addY = _addY; } public static void CreateDamage(Vector3 position, float damage) { var damageText = Instantiate(damageUIObj); damageText.transform.SetParent(damageUIParent.transform, false); damageText.GetComponent<TextMeshProUGUI>().text = string.Format("{0}", damage); damageText.transform.position = position += new Vector3(0f, addY, 0f); }

}

##試したこと
そのプログラムが呼ばれたときにStartメソッドが実行されているのではと思い、startメソッドに
Debug.Logを書き確認してみたのですが、ちゃんとシーンがスタートした瞬間にログが出た。

補足情報(FW/ツールのバージョンなど)

Unity2020.1.6f1 Personal

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/11/24 02:33 編集

インデントが崩れたりして読みづらくなるので、質問文を編集し、ソースコードは「コードの挿入」で記入してください。細かく経過時間のログを取ってみて実際に重くなっている箇所を特定し、記入しておいた方が回答が得られやすいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問