OnControllerColliderHit方法檢測每一幀的碰撞。我希望它在我用碰撞器接觸另一個物體時只被呼叫一次。
這是我現在所擁有的一個例子。看看下面的碰撞計數器:https : //youtu.be/-2t45tkWTc8
我希望OnControllerColliderHit方法像OnCollisionEnter一樣。
我的碰撞檢測腳本:
public class SphereCollisionHandler : MonoBehaviour
{
private int collisionCounter;
[SerializeField] private GameObject gameObj;
private TMP_Text textMesh;
void Start ()
{
textMesh = gameObj.GetComponent<TMP_Text>();
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
if (hit.gameObject.tag == "Cube")
{
collisionCounter = collisionCounter 1;
textMesh.text = collisionCounter.ToString();
}
}
}
我已經嘗試過使用OnCollisionEnter,但它對具有 CharacterController的Player 物件效果不佳。
uj5u.com熱心網友回復:
APIOnControllerColliderHit聽起來確實很有意義,在移動時每幀都呼叫它。
這可用于在物體與角色碰撞時推動物體。
如果您只想獲得一次,只需添加一個標志
private bool alreadyHit;
然后做
void OnControllerColliderHit(ControllerColliderHit hit)
{
if(alreadyHit) return;
if (hit.gameObject.CompareTag("Cube"))
{
alreadyHit = true;
collisionCounter = collisionCounter 1;
textMesh.text = collisionCounter.ToString();
}
}
或者,如果您的目標是跟蹤每個物件的每次點擊,一旦您可以使用類似的東西
private readonly HashSet<GameObject> alreadyCollidedWith = new HashSet<GameObject>();
接著
void OnControllerColliderHit(ControllerColliderHit hit)
{
if (hit.gameObject.CompareTag("Cube") && !alreadyCollidedWith.Contains(hit.gameObject))
{
alreadyCollidedWith.Add(hit.gameObject);
collisionCounter = collisionCounter 1;
textMesh.text = collisionCounter.ToString();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397766.html
上一篇:如何停止帶有方法的方法?
