Visual Studio 我的游戏项目C#代码有问题

g6baxovj  于 2023-05-29  发布在  C#
关注(0)|答案(1)|浏览(228)

我的游戏项目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)
你能解决这个问题吗?
我试着解决它,但我做不到。

ilmyapht

ilmyapht1#

出现的错误表示您正在尝试访问已从场景中销毁或卸载的SpriteRenderer组件。当您更改场景并且对前一场景中对象的引用丢失时,可能会发生这种情况1。
一个可能的解决方案是对敌人对象使用DontDestroyOnLoad,以便它们在场景中持续存在。

相关问题