如何在C#/ Unity中访问预定义结构化对象中的其他元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#/ Unity中访问预定义结构化对象中的其他元素?相关的知识,希望对你有一定的参考价值。
我做了一个名为FOOD的预定义对象。 Inside是一个指向PreFab GameObject的GameObject。 GameObject也附加到碰撞脚本。我的问题是,如何在碰撞脚本中访问我的结构的其他元素,如健康,卡路里等?
public class FOODS: ScriptableObject
{
public GameObject preFabFood;
//points to a prefab object that is attached to a collision script
int health;
int calories;
float height;
float width;
}
//this is the script that is attached to the GameObject preFabFood
void OnCollisionEnter2D(Collision2D c)
{
//how do I access elements such as height, weight, etc?
}
You have two problems.
1)属性是private
,意味着它们对其他类不可见。成员字段is private的默认可见性。
2)属性不在预制件附加的脚本中。
修复#2(如Soraphis)建议是正确的做法,但是,如果你将public GameObject preFabFood;
类附加到预制实例(你不需要),你会想要从你的FOODS
类中删除FOODS
字段用实例化来携带实例化对象的副本。在调整代码时请记住这一点(您发布的代码看起来像一个脚本,但我怀疑它应该不止一个,实际上至少应该是2个)。
至于修复#1,你必须公开它们或从同一个脚本访问它们。如果你直接将你的FOODS
类附加到你的实例化预制件并且FOODS
类包含OnCollisionEnter2D
方法,那么一切都很好。
但是,由于我怀疑你在这里有两个课程,你需要这样做:
public int health;
public int calories;
public float height;
public float width;
然后使用GetComponent()
调用从另一个获取一个脚本。例如
FOODS foods = this.gameObject.GetComponent<FOODS>(); //gets the FOODS script attached to this game object.
//Functionally identical to GetComponent<FOODS>();
int hp = foods.health; //etc
请注意,您应该尽可能少地调用GetComponent
,因为它具有非零开销,因此请尽快缓存结果(例如,您可以在Start()
而不是每次在OnCollisionEnter2D
顶部执行此操作),但这是更多的是一般的“小心”标志,因为过度使用会导致帧速率问题。
我的问题是,如何在碰撞脚本中访问我的结构的其他元素,如健康,卡路里等?
你不能。但你可以像这样解决它:
在CollisionScript中,将GameObject PrefabFood
更改为可编写脚本的对象FOODS food
然后在这个课程中你可以访问这样的东西:
food.preFabFood // is the prefab
food.health // is the health variable
看起来你对编码很新,我之前建议学习基础知识,因为这是基本的编程,并不是真正的统一甚至是c#相关的。
以上是关于如何在C#/ Unity中访问预定义结构化对象中的其他元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Unity / C# 中访问 Cinemachine 的相机距离值?