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

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

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

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

Q&A

解決済

1回答

749閲覧

キャラの画像が突然消えて、当たり判定も消えてしまいます

Minobato.com

総合スコア7

C#

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

0グッド

0クリップ

投稿2020/01/20 05:56

下記に載っている2Dのパラパラアニメーションを使って、Unityのキャラクターの2Dアニメーションを作ろうと思っていたのですが、移動するために矢印キーを押した途端、押すまで表示されていた画像と当たり判定も消えるというバグが起こりました。

今まで調べていましたがレイヤーも問題なかったり、画像と背景の座標も全て問題が無かった他、スクリプトをプロジェクトから消しても状況が変わらなかったので正直今の自分に打つ手がありません。
助けて下さい、お願いします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditorInternal;
#endif

public class PlayerAnimationScript : MonoBehaviour
{

//アニメーション [SerializeField] Image spriteImage; [SerializeField, HideInInspector] Sprite[] spriteTextures; [SerializeField] public float animationFrameSeconds; [SerializeField] public bool debug; public bool loop; Coroutine runCoroutine; // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.T) && debug) { SpriteAnimeStart(); } } public void SpriteAnimeStart() { if (runCoroutine == null) { runCoroutine = StartCoroutine(SpriteAnimeCoroutine()); } } IEnumerator SpriteAnimeCoroutine() { if(loop) { while(loop) { for (int i = 0; i < spriteTextures.Length; i++) { spriteImage.sprite = spriteTextures[i]; yield return new WaitForSeconds(animationFrameSeconds); } } runCoroutine = null; yield break; } else { for (int i = 0; i < spriteTextures.Length; i++) { spriteImage.sprite = spriteTextures[i]; yield return new WaitForSeconds(animationFrameSeconds); } runCoroutine = null; } }

#if UNITY_EDITOR

[CustomEditor(typeof(PlayerAnimationScript))] public class SpriteAnimationEditor:Editor { ReorderableList reorderableList; void OnEnable() { SerializedProperty prop = serializedObject.FindProperty("spriteTextures"); reorderableList = new ReorderableList(serializedObject, prop); reorderableList.drawHeaderCallback = (rect) => EditorGUI.LabelField(rect, "Player"); reorderableList.drawElementCallback = (rect, index, isActive,isFocused) => { SerializedProperty element = prop.GetArrayElementAtIndex(index); rect.height -= 4; rect.y += 2; EditorGUI.PropertyField(rect, element, new GUIContent("フレーム" + index)); }; } public override void OnInspectorGUI() { base.OnInspectorGUI(); serializedObject.Update(); reorderableList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); } }

#endif

}

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

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

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

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

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

RyotaroIsoyama

2020/01/20 06:31

ちょっと見辛いのでマークダウン使ってもらってもいいですか。 あと[SerializeField]で定義されてる変数は初期値に何がはいってるんでしょうか?
Minobato.com

2020/01/20 06:45

無知すみません。マークダウン使ってとは具体的に何をすれば…。 一度調べてみたら箇条書きには「-」か「*」しろとかあったのですが、それでしょうか? [SerializeField]で定義されている変数に初期値は無かったです。
RyotaroIsoyama

2020/01/20 07:00

``` この3点リードみたいなのでコードを包むことで、コードが見やすくなります。コードを貼る場合はこれを使ってください。 ```
Minobato.com

2020/01/20 07:04

こうでしょうか? 、、、 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; if UNITY_EDITOR using UnityEditor; using UnityEditorInternal; endif public class PlayerAnimationScript : MonoBehaviour { //アニメーション [SerializeField] Image spriteImage; [SerializeField, HideInInspector] Sprite[] spriteTextures; [SerializeField] public float animationFrameSeconds; [SerializeField] public bool debug; public bool loop; Coroutine runCoroutine; // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.T) && debug) { SpriteAnimeStart(); } } public void SpriteAnimeStart() { if (runCoroutine == null) { runCoroutine = StartCoroutine(SpriteAnimeCoroutine()); } } IEnumerator SpriteAnimeCoroutine() { if(loop) { while(loop) { for (int i = 0; i < spriteTextures.Length; i++) { spriteImage.sprite = spriteTextures[i]; yield return new WaitForSeconds(animationFrameSeconds); } } runCoroutine = null; yield break; } else { for (int i = 0; i < spriteTextures.Length; i++) { spriteImage.sprite = spriteTextures[i]; yield return new WaitForSeconds(animationFrameSeconds); } runCoroutine = null; } } if UNITY_EDITOR [CustomEditor(typeof(PlayerAnimationScript))] public class SpriteAnimationEditor:Editor { ReorderableList reorderableList; void OnEnable() { SerializedProperty prop = serializedObject.FindProperty("spriteTextures"); reorderableList = new ReorderableList(serializedObject, prop); reorderableList.drawHeaderCallback = (rect) => EditorGUI.LabelField(rect, "Player"); reorderableList.drawElementCallback = (rect, index, isActive,isFocused) => { SerializedProperty element = prop.GetArrayElementAtIndex(index); rect.height -= 4; rect.y += 2; EditorGUI.PropertyField(rect, element, new GUIContent("フレーム" + index)); }; } public override void OnInspectorGUI() { base.OnInspectorGUI(); serializedObject.Update(); reorderableList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); } } endif } 、、、
RyotaroIsoyama

2020/01/20 07:16

そうです。ただそれはおそらく全角なので半角にしてください。 それとコメント欄でマークダウン方式は無効なので、質問を編集するか次回以降の参考にでもしていただければ大丈夫です
guest

回答1

0

ベストアンサー

debugやloopに初期値を与えていないのにUpdateで呼び出しているから止まってしまうのかもしれません。
初期値が与えられてないもの全てに一度値を持たせてみてください。

投稿2020/01/20 07:02

RyotaroIsoyama

総合スコア183

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

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

Minobato.com

2020/01/20 08:20

出来ました! 一度初期値を入力して出来たらパラパラ漫画のようなアニメーションができました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問