提问人:Mr Glub 提问时间:6/24/2023 最后编辑:Rufus LMr Glub 更新时间:6/24/2023 访问量:57
如何访问我在另一个函数中定义的另一个变量?
How can I access another variable I defined in another function?
问:
该方法将用于按钮,并希望在开始时定义变量,但我不确定该怎么做(Unity 2D):Attack()
using System.Collections;
using System.Collections.Generic;
using UnityEditor.SearchService;
using UnityEngine;
using TMPro;
public class DefaultEnemy : MonoBehaviour
{
public static void DefineVariables()
{
int phealth = GameObject.Find("VStorage").GetComponent<VStorage>().phealth;
int pdamage = GameObject.Find("VStorage").GetComponent<VStorage>().pdamage;
int ehealth = GameObject.Find("VStorage").GetComponent<VStorage>().ehealth;
}
public static void Attack()
{
ehealth = ehealth - pdamage
}
private void Update()
{
}
private void Start()
{
DefineVariables();
}
}
我尝试了一些东西,比如为变量制作方法。我希望这会做一些事情,但我只是得到一个不同的错误 :/
答:
0赞
akaBase
6/24/2023
#1
您正在更新该脚本中的值,而不是组件中的值,为此,您希望使用对组件的引用。VStorage
VStorage
请参阅下面的示例
// Reference to the VStorage component
private VStorage vStorage;
public static void Attack()
{
//Update the value on the component like so
vStorage.ehealth = vStorage.ehealth - vStorage.pdamage;
//But it can be made simpler by using -= which does the same thing (+= will add a value)
// vStorage.eHealth -= vStorage.pdamage;
}
private void Awake()
{
// Setup the VStorage reference, you can find it using this method rather than looking for the GameObject and then getting the component
vStorage = FindObjectOfType<VStorage>();
}
看看这些关于运算符和表达式的文档,以更好地理解,等等-=
评论
0赞
Mr Glub
6/24/2023
现在我只是收到一个错误,说非静态字段需要对象引用。此外,VStorage 是一个游戏对象,附加了一个脚本来携带变量
0赞
akaBase
6/24/2023
你在方法中创建引用,这就是Awake
FindObjectOfType
0赞
Mr Glub
6/24/2023
我仍然收到错误,但是当io将Awake()更改为Start()时,它工作正常:/
0赞
Rufus L
6/24/2023
#2
我对Unity一无所知,但您的问题与变量SCOPE有关。变量可以从定义它们的块内访问,因此如果要从多个方法访问变量,则需要在单个方法的范围之外(在类级别)定义它们:
public class DefaultEnemy : MonoBehaviour
{
// Variables defined at the class level can
// be accessed from any method in the class
int phealth = 0;
int pdamage = 0;
int ehealth = 0;
public static void DefineVariables()
{
phealth = GameObject.Find("VStorage").GetComponent<VStorage>().phealth;
pdamage = GameObject.Find("VStorage").GetComponent<VStorage>().pdamage;
ehealth = GameObject.Find("VStorage").GetComponent<VStorage>().ehealth;
}
public static void Attack()
{
ehealth = ehealth - pdamage;
}
private void Start()
{
DefineVariables();
}
}
上一个:有没有办法根据另一个变量的值动态更改正在设置的变量?
下一个:变量保持静态
评论