【发布时间】:2021-08-04 23:50:24
【问题描述】:
我有一个球体玩家,我希望他根据它接触到其他东西的所有点朝方向跳跃。
当我跳跃时,我想检测所有接触点(我可以从碰撞中获取它们),但我不知道如何在 OnCollisionStay 之外获取所有碰撞。
我想在跳跃时获得所有主动碰撞。
【问题讨论】:
我有一个球体玩家,我希望他根据它接触到其他东西的所有点朝方向跳跃。
当我跳跃时,我想检测所有接触点(我可以从碰撞中获取它们),但我不知道如何在 OnCollisionStay 之外获取所有碰撞。
我想在跳跃时获得所有主动碰撞。
【问题讨论】:
从未测试过
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetCollision : MonoBehaviour {
// The active collider
public Collider[] activeCollider;
// Key to jump
public KeyCode jumpKey;
void Update(){
//Detect if jump key being pressed
if (Input.GetKeyDown(jumpKey)){
//Get all the collider in the scene
Collider[] allColliderInScene = FindObjectsOfType<Collider>();
//Getting all active collider
foreach (Collider collider in allColliderInScene){
//Counter
int count = 0;
if (collider.isActiveAndEnable == true){
activeCollider[count] = collider;
count++;
}
}
}
}
我希望它有效。
【讨论】:
我可以这样做:
private Dictionary<string, Collision> activeCollisions = new Dictionary<string, Collision>();
private void OnCollisionEnter(Collision collision)
{
activeCollisions[collision.collider.name] = collision;
}
private void OnCollisionStay(Collision collision)
{
activeCollisions[collision.collider.name] = collision;
}
private void OnCollisionExit(Collision collision)
{
activeCollisions.Remove(collision.collider.name);
}
你有一本包含所有活动碰撞的字典。我第一次尝试没有OnCollisionStay,但是有错误,所以我添加了它。 (我认为碰撞对象不会改变,没有 OnCollisionStay 有时会出现 null 而不是碰撞)
这不是最好的解决方案,因为您必须在每个物理滴答时更改它。 (而且你不能与一个对撞机发生多次碰撞,如果它是非凸的)
我仍然要求您提供更好的答案。 (一次获取所有活动的碰撞或接触点。)
【讨论】: