【问题标题】:set gameobject inactive with smallest value用最小值设置游戏对象不活动
【发布时间】:2017-12-15 23:16:15
【问题描述】:

我似乎找不到答案,我相信现在不可能。

我有一个收集游戏对象的玩家,当收集游戏对象时,它们成为玩家的孩子。所有游戏对象都有一个具有不同质量的刚体,但重复的游戏对象具有相同的质量偏离。

收集游戏对象时玩家的数量会增加。

我想做的是当玩家达到一定的质量并收集另一个游戏对象时,我希望质量最小的游戏对象设置为非活动状态。

我已经得到了这个:

                     Component[] objects = GetComponentsInChildren(typeof(Rigidbody), false);
                     foreach (Rigidbody joint in objects)
                     {
                         float smallest = Mathf.Min(joint.mass);
                         if (smallest <= mass / 100 && joint.gameObject.activeInHierarchy)
                         {
                             int i = 0;
                             bool plus = false;
                             while (i < transform.childCount)
                             {
                                 if (transform.GetChild(i).gameObject.activeInHierarchy && plus == false)
                                 {

                                     transform.GetChild(i).gameObject.SetActive(false);
                                     Debug.Log("disabled");
                                     plus = true;
                                 }

                                     i++;
                             }
                         }
                     }

这会设置玩家的第一个子游戏对象在达到一定质量后处于非活动状态。

但这不是我真正想要的,我想让质量最小的游戏对象设置为非活动状态,但我无法转换“float minimum = Mathf.Min(joint.mass);”回到游戏对象。

这可能实现还是不可能?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    当然有可能我的朋友

    using System.Linq // < --- at top of script
    
    List<Rigidbody> objects = GetComponentsInChildren<Rigidbody>(false)
        .OrderBy(i => i.mass)
        .ToList();
    Rigidbody smallest = objects.FirstOrDefault();
    

    【讨论】:

    • 天哪,我不知道 System.Linq。我想我必须学习更多。这完全有效,为此被困了 2 天,非常感谢您竖起大拇指!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多