我的游戏项目C#代码有问题。
这是怪物移动的代码。
8 public class enemyMove : MonoBehaviour
9 {
10 Rigidbody2D rigid;
11 Animator anim;
12 public int nextMove;
13 SpriteRenderer spriter;
14 public float monsterSpeed;
15
16 public Transform target; // 타겟 플레이어
17 private play_game instance;
18 private melee mel;
19
20 public int Hp;
21
22 public GameObject gm;
23
24 void Awake()
25 {
26 rigid = GetComponent<Rigidbody2D>();
27 anim = GetComponent<Animator>();
28 spriter = GetComponent<SpriteRenderer>();
29
30 instance = FindObjectOfType<play_game>();
31 mel = FindObjectOfType<melee>();
32
33 Invoke("Think", 4);
34 }
..skip..
169 public void endDmg()
170 {
171 gameObject.layer = 7; #Enemy layer
172 spriter.color = new Color(1, 1, 1, 1);
173 }
174 public void setDmg()
175 {
176 spriter.color = new Color(1, 1, 1, 0.4f);
177
178 int dirc;
179 if (target != null)
180 dirc = transform.position.x - target.position.x > 0 ? 1 : -1;
181 else
182 dirc = transform.position.x - instance.transform.position.x > 0 ? 1 : -1;
183
184 rigid.AddForce(new Vector2(dirc, 1) * 7, ForceMode2D.Impulse);
185 gameObject.layer = 10; #EnemyDamaged layer
186
187 Invoke("endDmg", 1f);
188 }
这是对撞机2d攻击怪物时的代码。
8 public class melee : MonoBehaviour
9 {
10 private enemyMove enemy;
11
12 static public melee instance;
13
14 public Transform self;
15
16 void Awake()
17 {
18 enemy = FindObjectOfType<enemyMove>();
19 self = GetComponent<Transform>();
20 }
21
22 void OnTriggerEnter2D(Collider2D collision)
23 {
24 if (collision.gameObject.layer == 7 || collision.gameObject.layer == 9)
25 {
26 if (collision.gameObject.tag == "Enemy")
27 enemy.setDmg();
28 }
29 }
30 }
此项目有一个移动Map的门户,该门户移动场景。
如果你去下一张Map,回来攻击怪物,你会得到以下错误。
MissingReferenceException:类型为“SpriteRenderer”的对象已被销毁,但您仍在尝试访问它。
您的脚本应该检查它是否为null,或者不应该销毁该对象。
UnityEngine.SpriteRenderer.set_color(UnityEngine.Color值)(at<8744f615ca0c450898baad3219003b45>:0)
setDmg()(在Assets/monster/enemyMove.cs:176)
melee.OnTriggerEnter2D(UnityEngine.Collider2D碰撞)(在Assets/Player/melei.cs:27)
你能解决这个问题吗?
我试着解决它,但我做不到。
1条答案
按热度按时间ilmyapht1#
出现的错误表示您正在尝试访问已从场景中销毁或卸载的SpriteRenderer组件。当您更改场景并且对前一场景中对象的引用丢失时,可能会发生这种情况1。
一个可能的解决方案是对敌人对象使用DontDestroyOnLoad,以便它们在场景中持续存在。