我正在尋找一種從我在游戲中“選擇/定位”的物件獲取資料的方法。示例:我想選擇一個要攻擊的敵人,然后從附加到他們的腳本中獲取 hp 值,并將其與玩家腳本上的攻擊值進行比較。我在 google 和 youtube 上環顧四周,但沒有找到運氣。希望有人可以幫助我或指點我看的指南。
代碼形式的示例:腳本 1:
public class Enemy : MonoBehaviour
{
public int enemyHealth;
}
腳本 2:
public class Player : MonoBehaviour
{
public Enemy enemy;
public int playerAtk;
}
public void Attack()
{
"Selected enemy's enemy script".health -= playerAtk;
}
uj5u.com熱心網友回復:
您必須通過特定事件訪問敵人。例如,當擊中子彈或在其上單擊滑鼠時。下面是一些如何獲得敵人的示例,但請記住,有無數種方法可以接近敵人。
觸發輸入
這是一種非常簡單的方法,此代碼在播放器類中作業。collider 鍵使您可以訪問敵人,現在您可以通過持有其組件來訪問方法。
public void OnTriggerEnter(Collider other)
{
var _enemy = other.GetComponent<Enemy>(); // // Get Enemy class
_enemy?.Damage(10); // damage method run.
_enemy?.Damage(this, 10f); // Send player to method and cause damage
}
物理射線投射
這將通過從相機中投射光線來實作,光線投射代碼所做的是以 raycastHit 格式回傳撞擊點。獲取后,您可以訪問您的其他 raycastHit 組件,如下所示。
public void Update()
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (!Input.GetKeyDown(KeyCode.Mouse0)) return;
if (Physics.Raycast(ray, out var RaycastHit))
{
var _enemy = RaycastHit.transform.GetComponent<Enemy>();
_enemy?.Damage(10);
}
}
在檢查器中指定
在這個方法中,你可以將所有的敵人放在一個陣列中,并通過呼叫索引對其造成傷害。
public Enemy[] myEnemy;
public void Damage(int index)
{
myEnemy[index].Damage(10);
}
按型別查找
另一種流行的方法是捕獲所有敵人并根據特定條件過濾它們。該方法也以這種方式執行。
var enemies = FindObjectsOfType<Enemy>();
foreach (var _enemy in enemies.Where(e => e.health >= 40f))
{
_enemy.Damage(100);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482041.html