我正在 Unity 中開發 FPS。
玩家HP為100(滿)時,如何防止玩家拾取恢復物品?目前,玩家即使HP已滿也可以拾取恢復物品,我想限制獲得它們的條件。我能想到的第一件事是暫時禁用恢復專案側的碰撞,當玩家的HP為100時。
我想collider.enabled = false;在if陳述句中使用,我該怎么寫?還是我做錯了?
請支持我。
HPItem.cs(這是一個 HPItem)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HPItem : MonoBehaviour
{
public FPSController fPSController;
public int reward = 100;
public AudioClip getSound;
<summary>
</summary>
<param name="collision"></param>
[SerializeField]
public Vector3 speed;
void Start()
{
fPSController = GameObject.Find("Player").GetComponent<FPSController>();
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
AudioSource.PlayClipAtPoint(getSound,transform.position);
Destroy(gameObject, getSound.length);
fPSController.AddHP(reward);
}
}
}
FPSController.cs(這是一個播放器)
int playerHP = 100, maxPlayerHP = 100;
public Slider hpBer;
public void AddHP(int amount)
{
playerHP = amount;
if (playerHP > 100)
{
playerHP = 100;
}
}
uj5u.com熱心網友回復:
查一下onTriggerEnter函式就更好了,一旦知道是玩家就查生命值,如果是100就不收了
uj5u.com熱心網友回復:
碰撞發生時檢查玩家的生命值,只有在生命值未滿時才收集。
不是一個完美的解決方案(即如果玩家站在健康物品上時失去健康,他們不會撿起它),但您可以使用OnTriggerStay()它。
FPSController.cs:
// Add public getter for heath
public int Health => playerHP;
HPItem.cs:
...
void OnTriggerEnter(Collider other)
{
// Add check for health to this if statement.
// && statements are evaluated left to right, so
// no danger of NullReferenceException
if (other.gameObject.tag == "Player" &&
other.GetComponent<FPSController>().Health != 100)
{
AudioSource.PlayClipAtPoint(getSound,transform.position);
Destroy(gameObject, getSound.length);
fPSController.AddHP(reward);
}
}
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405083.html
標籤:
下一篇:沒有物理引擎的統一彈跳球
