【问题标题】:Unity - get all Collisions without OnCollisionStayUnity - 在没有 OnCollisionStay 的情况下获取所有碰撞
【发布时间】:2021-08-04 23:50:24
【问题描述】:

我有一个球体玩家,我希望他根据它接触到其他东西的所有点朝方向跳跃。

当我跳跃时,我想检测所有接触点(我可以从碰撞中获取它们),但我不知道如何在 OnCollisionStay 之外获取所有碰撞。

我想在跳跃时获得所有主动碰撞。

【问题讨论】:

    标签: unity3d collision


    【解决方案1】:

    从未测试过

    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++;
                   }
              }
         }
    }
    

    我希望它有效。

    【讨论】:

    • 它不会做我需要的,因为我需要接触点来获得跳跃的方向。您可以从碰撞中获取接触点,但不能从对撞机中获取。
    【解决方案2】:

    我可以这样做:

    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 而不是碰撞)

    这不是最好的解决方案,因为您必须在每个物理滴答时更改它。 (而且你不能与一个对撞机发生多次碰撞,如果它是非凸的)

    我仍然要求您提供更好的答案。 (一次获取所有活动的碰撞或接触点。)

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2013-11-16
      相关资源
      最近更新 更多