実現したいこと
オブジェクトが生成されたときに、ScriptableObjectから対応するスプライトを持ってきて貼り付ける機能の実現
発生している問題・分からないこと
オブジェクトが生成されたときに、ScriptableObjectから対応するスプライトを持ってきて貼り付ける機能をプログラムしたいのですが、なぜか最初に生成されたオブジェクトにはスプライトが反映されず、その次に生成されたオブジェクトにはひとつ前に生成されたオブジェクトに反映されるはずのスプライトが反映されている状態になってしまいます。
Debug.Log等を使用した結果、このような現象が発生していることは分かったのですが、解決法がわかりません。
エラーメッセージも出ないので使用しているすべてのソースコードを貼らせていただきます。
該当のソースコード
TargetGenerator
1using System; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TargetGenerator : MonoBehaviour 6{ 7 public GameObject targetPrefab; 8 9 // Start is called before the first frame update 10 void Start() 11 { 12 Application.targetFrameRate = 60; 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 19 } 20 21 public void InstantiateTarget() 22 { 23 GameObject go = Instantiate(targetPrefab); 24 go.transform.position = new Vector3(16, 0, 0); 25 GameObject director = GameObject.Find("SpriteDirector"); 26 director.GetComponent<SpriteDirector>().ChangeSprite(); 27 } 28} 29
TargetController
1using System; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TargetController : MonoBehaviour 6{ 7 8 9 // Start is called before the first frame update 10 void Start() 11 { 12 Application.targetFrameRate = 60; 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 19 transform.Translate(-0.1f, 0, 0); 20 21 if (transform.position.x < -12.0f) 22 { 23 Destroy(gameObject); 24 Debug.Log("destroy"); 25 26 GameObject generator = GameObject.Find("TargetManager"); 27 generator.GetComponent<TargetGenerator>().InstantiateTarget(); 28 } 29 30 31 32 } 33} 34
SpriteDirector
1using JetBrains.Annotations; 2using System.Collections; 3using System.Collections.Generic; 4using Unity.VisualScripting; 5using UnityEngine; 6 7public class SpriteDirector : MonoBehaviour 8{ 9 public CharaDataAsset charaDatas; 10 public GameObject cl; 11 GameObject clickedGameObject; 12 13 Dictionary<int, string> charas; 14 Dictionary<int, float> encounter; 15 16 public static int enra; 17 18 void Start() 19 { 20 if (cl.GetComponent<SpriteRenderer>().sprite == null) 21 { 22 GameObject generator = GameObject.Find("TargetManager"); 23 generator.GetComponent<TargetGenerator>().InstantiateTarget(); 24 } 25 else 26 { 27 Debug.Log("sprite remain"); 28 cl.GetComponent<SpriteRenderer>().sprite = null; 29 GameObject generator = GameObject.Find("TargetManager"); 30 generator.GetComponent<TargetGenerator>().InstantiateTarget(); 31 } 32 } 33 34 void Update() 35 { 36 if (Input.GetMouseButtonDown(0)) 37 { 38 clickedGameObject = null; 39 40 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 41 RaycastHit2D hitSprite = Physics2D.Raycast((Vector2)ray.origin, (Vector2)ray.direction); 42 43 if (hitSprite == true) 44 { 45 clickedGameObject = hitSprite.transform.gameObject; 46 if (clickedGameObject.CompareTag("chara")) 47 { 48 if (enra > 12) 49 { 50 Debug.Log("obasan"); 51 } 52 else 53 { 54 Destroy(clickedGameObject); 55 Debug.Log(charaDatas.dataList[enra].charaname + "deleted"); 56 57 GameObject generator = GameObject.Find("TargetManager"); 58 generator.GetComponent<TargetGenerator>().InstantiateTarget(); 59 } 60 } 61 } 62 } 63 } 64 65 public void ChangeSprite() 66 { 67 GetEncounter(); 68 69 if (cl == null) 70 { 71 Debug.Log("null"); 72 } 73 else 74 { 75 cl.GetComponent<SpriteRenderer>().sprite = charaDatas.dataList[enra].graffic; 76 Debug.Log(charaDatas.dataList[enra].charaname); 77 } 78 } 79 80 public void GetEncounter() 81 { 82 InitializeDicts(); 83 84 enra = Choose(); 85 86 string enname = charas[enra]; 87 Debug.Log(enname + "に遭遇"); 88 89 } 90 91 void InitializeDicts() 92 { 93 charas = new Dictionary<int, string>(); 94 charas.Add(0, "キョウトくん"); 95 charas.Add(1, "アラシヤマちゃん"); 96 charas.Add(2, "ウマホリちゃん"); 97 charas.Add(3, "フナオカくん"); 98 charas.Add(4, "アヤベちゃん"); 99 charas.Add(5, "タケノちゃん"); 100 charas.Add(6, "アマルベくん"); 101 charas.Add(7, "キマチくん"); 102 charas.Add(8, "オオダシくん"); 103 charas.Add(9, "マジくん"); 104 charas.Add(10, "アサリちゃん"); 105 charas.Add(11, "ハマダくん"); 106 charas.Add(12, "センザキくん"); 107 charas.Add(13, "絶対違うおばさん"); 108 charas.Add(14, "絶対違うおばさん"); 109 charas.Add(15, "絶対違うおばさん"); 110 charas.Add(16, "絶対違うおばさん"); 111 charas.Add(17, "絶対違うおばさん"); 112 charas.Add(18, "絶対違うおばさん"); 113 charas.Add(19, "絶対違うおばさん"); 114 charas.Add(20, "絶対違うおばさん"); 115 116 encounter = new Dictionary<int, float>(); 117 encounter.Add(0, 10.0f); 118 encounter.Add(1, 10.0f); 119 encounter.Add(2, 7.0f); 120 encounter.Add(3, 7.0f); 121 encounter.Add(4, 7.0f); 122 encounter.Add(5, 5.0f); 123 encounter.Add(6, 5.0f); 124 encounter.Add(7, 4.8f); 125 encounter.Add(8, 3.0f); 126 encounter.Add(9, 3.0f); 127 encounter.Add(10, 3.0f); 128 encounter.Add(11, 3.0f); 129 encounter.Add(12, 0.2f); 130 encounter.Add(13, 4.0f); 131 encounter.Add(14, 4.0f); 132 encounter.Add(15, 4.0f); 133 encounter.Add(16, 4.0f); 134 encounter.Add(17, 4.0f); 135 encounter.Add(18, 4.0f); 136 encounter.Add(19, 4.0f); 137 encounter.Add(20, 4.0f); 138 139 } 140 141 int Choose() 142 { 143 float total = 0; 144 145 foreach (KeyValuePair<int, float> elem in encounter) 146 { 147 total += elem.Value; 148 } 149 150 float randomPoint = Random.value * total; 151 152 foreach (KeyValuePair<int, float> elem in encounter) 153 { 154 if (randomPoint < elem.Value) 155 { 156 return elem.Key; 157 } 158 else 159 { 160 randomPoint -= elem.Value; 161 } 162 } 163 164 return 0; 165 } 166 167} 168
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Googleで「Unity スプライト バグ」や「Unity スプライト 反映されない」と検索しましたが、解決には至りませんでした。
補足
Unity: 2022.3.11f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。