我希望能夠在另一個腳本中使用一個腳本中的變數。我的目標是允許我參考particleScale 變數并使用它來影響連接到第二個腳本的物件的大小。我也想稍后從其他腳本中參考其他變數。每個物件也會有幾個實體。這是我的第一個腳本;
public class Particle : MonoBehaviour
{
public float particleSize;
public Transform particle;
void Start()
{
particle.localScale *= particleSize;
}
}
這是我的第二個;
public class Magnetic : MonoBehaviour
{
public Transform magnetic;
void Start()
{
magnetic.localscale *= Particle.particleSize;
}
}
幫助!
uj5u.com熱心網友回復:
有幾種方法可以做到,
- 使用
FindObjectOfType()
public class Magnetic : MonoBehaviour
{
public Transform magnetic;
Particle particle
void Start()
{
particle = FindObjectOfType<Particle>();
magnetic.localscale *= particle.particleSize;
}
}
- 使用單例模式(僅當您只需要一個 Particle 型別的物件時)
public class Particle : MonoBehaviour
{
public static Particle Instance;
public float particleSize;
public Transform particle;
void Awake() {
if (Instance != null) {
Destroy(gameObject);
} else {
Instance = this;
}
}
void Start()
{
particle.localScale *= particleSize;
}
}
那么該類將從全域訪問,Particle.Instance
因此您可以使用其中的任何公共方法,或者在您的情況下Particle.Instance.particleSize
uj5u.com熱心網友回復:
嘗試這個:
public class Particle : MonoBehaviour
{
public static Particle instance;
public float particleSize;
public Transform particle;
void Awake()
{
instance = this;
}
void Start()
{
particle.localScale *= particleSize;
}
}
public class Magnetic : MonoBehaviour
{
public Transform magnetic;
void Start()
{
magnetic.localscale *= Particle.instance.particleSize;
}
}
uj5u.com熱心網友回復:
一般來說,你不希望你的變數是公開的
您真正想要做的是將這些變數設為私有并通過公共方法訪問它們。
如果您需要從 Unity Inspector 訪問您的變數,使用 [SerializeField] 仍然是一個更好的主意
public class Particle : MonoBehaviour
{
private float particleSize;
[SerializeField] private Transform particle;
void Start()
{
particle.localScale *= particleSize;
}
public float GetParticleSize() {
return particleSize;
}
}
你從不同的類中呼叫它們的方式可能是通過使用 FindObjectOfType<> 就像其他人所說的那樣,或者你可以創建一個帶有腳本的游戲物件,并在你的第二個游戲物件的腳本中創建對它的公共參考和在檢查員中分配它!
public class Magnetic : MonoBehaviour
{
public Transform magnetic;
public GameObject particleOb;
void Start()
{
magnetic.localscale *= particleOb.GetComponent<Particle>().GetParticleSize;
}
}
在最后一種方法中,您基本上在檢查器中分配粒子 GameObject 并從它的組件中獲取腳本。此方法還允許您擁有多個物件,對每個物件進行少量修改,但仍呼叫相同的方法!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485837.html
上一篇:Assets\Scripts\PlayerMovement.cs(18,9):錯誤CS0029:無法將型別“void”隱式轉換為“System.Action...”