求助!!Unity中关于脚本中对象实例化失败的问题

田秦 2021-04-23 09:07:40
最近毕设做个小游戏,需要做一个点击按钮响应的功能,需要调用其他脚本,但是我在start函数中实例化后,在响应事件函数中调用却显示空对象异常,着实不明白怎么回事。
之前有个int【】number的问题,后来我硬是弄出来了,但是现在这个playerAttack我确实没办法了。
上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AbilityUp : MonoBehaviour
{
public Image[] dialogBox;
public Text[] dialogBoxText;
public Button[] buttons;
int a, b, c;
public int[] number;
private PlayerAttack playerAttack;
private PlayerHealth playerHealth;
private GameData gameData;
private PlayerUp playerUp;
private string[] texts;
private int caseuse;
// Start is called before the first frame update
void Start()
{
gameData = GameObject.FindGameObjectWithTag("GameData").GetComponent<GameData>();
playerUp = GameObject.FindGameObjectWithTag("PlayerAttack").GetComponent<PlayerUp>();
playerAttack = GameObject.FindGameObjectWithTag("PlayerAttack").GetComponent<PlayerAttack>();
playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
doRange();
}

// Update is called once per frame
void Update()
{

}
void p()
{
print(playerAttack.name);
}
void doRange()
{
for (int i = 0; i < 3; i++)
{
number[i] = Random.Range(0, 4);
//判断没有获取相同的key值
if (i != 0)
{
for (int j = 0; j < i; j++)
{
if (number[i] == number[j])
{
i -= i;
}
}
}
}
}
public void SetWords()
{

for(int i=0;i<3;i++)
{

dialogBoxText[i].text = gameData.Load(number[i]);
if(i==0)
{
a = number[i];
}
if(i==1)
{
b = number[i];
}
if(i==2)
{
c = number[i];
}
}
}
public void button1()
{
// playerUp.Up(number[0]);
this.gameObject.SetActive(false);
}
public void button2()
{
p();
Up(b);
this.gameObject.SetActive(false);
}
public void button3()
{
Up(c);
this.gameObject.SetActive(false);
}
private void A()
{

}
private void Up(int i)
{
if (i == 0)
{
playerAttack.attackToHealth += 2;
}
if (i == 1)
{
playerAttack.Critcal += 0.1f;
}
if (i == 2)
{
playerAttack.Critcal_Hit += 0.2f;
}
if (i == 3)
{
playerHealth.maxHealth = (int)((int)playerHealth.maxHealth * 1.2);
}
if (i == 4)
{
playerAttack.PlayerDamage += 1;
}
if(i==5)
{
print("yes");
}

}

}




最离谱的是,我在start函数中实例化后debug是有输出的,特么到下面就没了
...全文
729 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
田秦 2021-04-30
  • 打赏
  • 举报
回复
试过在start中初始化了,还是只有在dorange函数中赋值完之后有值,下面再调用就又变成了空。 另外请问一下不使用tag方法找组件是为什么呢,不太明白,能解释一下嘛,谢谢了
带酒书生 2021-04-29
  • 打赏
  • 举报
回复
number数组不初始化?另外不建议用gameobject.find这类方法。

2,543

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧