[英]How do i scale an object based on a variable from a different script?
我為我的第三人稱玩家創建了一個力場——基本上是一個圍繞他的球體。 我的球員有耐力浮動(curStamina 和 maxStamina)。
我試圖弄清楚如何根據玩家當前的耐力自動縮放球體的大小。 因此,力場(球體)基本上是對玩家當前擁有的耐力(curStamina)量的視覺解釋,並且基於 curStamina 的大小增加或減少。
這是我的耐力腳本供參考。 任何有關我將如何解決此問題的幫助表示贊賞!
public class Stamina : MonoBehaviour
{
public float stamina = 100;
public float maxStamina = 100;
public float drainPerSecond = 2.0f, gainPerSecond = 1.0f;
public bool online = false, usingStamina = false;
//public int lives;
public GameObject staminaImagePrefab;
private Transform staminaPanel;
private Image staminaImage;
//private Color lerpedColor; // Not currently used
// Start is called before the first frame update
void Start()
{
if (transform.CompareTag("Player"))
{
staminaPanel = GameObject.FindGameObjectWithTag("StaminaPanel").transform;
GameObject staminaObject = Instantiate(staminaImagePrefab, staminaPanel);
staminaImage = staminaObject.transform.GetChild(1).GetComponent<Image>();
}
}
// Update is called once per frame
void Update()
{
if (usingStamina)
{
DrainStamina();
}
else
{
RegenerateStamina();
}
if (transform.CompareTag("Player"))
{
staminaImage.fillAmount = (float)stamina / maxStamina;
}
}
private void RegenerateStamina()
{
stamina += gainPerSecond * Time.deltaTime;
if (stamina > maxStamina) stamina = maxStamina;
}
public void StaminaDamage(float value)
{
stamina -= value;
}
private void DrainStamina()
{
stamina -= drainPerSecond * Time.deltaTime;
if (stamina < 0)
{
// Out of stamina
stamina = 0;
}
}
public void ResetStamina(float _stamina, float _maxStamina)
{
stamina = _stamina;
maxStamina = _maxStamina;
if (transform.CompareTag("Player"))
{
staminaImage.fillAmount = (float)stamina / maxStamina;
}
}
}
這是一個如何實現它的例子:
public float MinForceFieldScale = 1f;
public float MaxForceFieldScale = 4f;
[SerializeField]
private Transform forceFieldTransform;
private float DeltaForceFieldScale => MaxForceFieldScale - MinForceFieldScale;
// Update is called once per frame
void Update()
{
if (usingStamina)
{
DrainStamina();
}
else
{
RegenerateStamina();
}
if (transform.CompareTag("Player"))
{
staminaImage.fillAmount = (float)stamina / maxStamina;
}
UpdateForceFieldSize();
}
private void UpdateForceFieldSize()
{
float actualStaminaPercent = stamina / maxStamina;
float forceFieldSize = MinForceFieldScale + DeltaForceFieldScale * actualStaminaPercent;
forceFieldTransform.localScale = Vector3.one * forceFieldSize;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.