查找、标记子物体+搜索最近物体

本文探讨了在复杂场景中如何有效地查找和标记特定的子物体,并详细介绍了搜索最近物体的方法,涵盖了信息技术在物体识别和距离计算中的应用。
摘要由CSDN通过智能技术生成
using System.Collections;
using UnityEngine;

///<summary>
/// 变换组件助手类
///</summary>

public class TransformHelper
{
   

   // public static Transform Get
    /// <summary>
    /// 在层级未知情况下查找子物体
    /// </summary>
    /// <param name="parentTF">父物体变换组件</param>
    /// <param name="childName">子物体名</param>
    /// <returns></returns>
    public static Transform GetChild(Transform parentTF,string childName)
    {
   
        //在子物体中查找
        Transform childTF = parentTF.Find(childName);
        if(childTF != null)
        {
   
            return childTF;
        }
        int count = parentTF.childCount;
        for(int i = 0;i < count; i++)
        {
   
            //将问题交由子物体 在孙物体中查找
            childTF = GetChild(parentTF.GetChild(i), childName);
            if (childTF != null)
下面是一个示例代码,用于设定多个游戏物体的血量值,并基于血量和距离来标记游戏物体的颜色: ```csharp using UnityEngine; using System.Collections.Generic; public class HealthManager : MonoBehaviour { public GameObject[] objects; // 存储所有游戏物体 private Color defaultColor; // 默认颜色 private Color redColor; // 血量最少的颜色 private Color blueColor; // 距离最近的颜色 void Start() { defaultColor = Color.white; // 默认颜色为白色 redColor = Color.red; // 血量最少的颜色为红色 blueColor = Color.blue; // 距离最近的颜色为蓝色 // 初始化每个游戏物体的血量值 foreach (GameObject obj in objects) { obj.AddComponent<Health>().value = Random.Range(0, 100); } } void Update() { // 查找血量最少的游戏物体 GameObject minHealthObj = objects[0]; foreach (GameObject obj in objects) { Health health = obj.GetComponent<Health>(); if (health.value < minHealthObj.GetComponent<Health>().value) { minHealthObj = obj; } } // 标记血量最少的游戏物体为红色 foreach (GameObject obj in objects) { if (obj == minHealthObj) { obj.GetComponent<Renderer>().material.color = redColor; } else { obj.GetComponent<Renderer>().material.color = defaultColor; } } // 查找距离最近的游戏物体 GameObject minDistanceObj = objects[0]; float minDistance = Vector3.Distance(transform.position, minDistanceObj.transform.position); foreach (GameObject obj in objects) { float distance = Vector3.Distance(transform.position, obj.transform.position); if (distance < minDistance) { minDistance = distance; minDistanceObj = obj; } } // 标记距离最近的游戏物体为蓝色 foreach (GameObject obj in objects) { if (obj == minDistanceObj) { obj.GetComponent<Renderer>().material.color = blueColor; } else { obj.GetComponent<Renderer>().material.color = defaultColor; } } } } // Health 组件,用于存储游戏物体的血量值 public class Health : MonoBehaviour { public int value; } ``` 这个示例代码中,我们使用了 `GameObject[] objects` 数组来存储所有的游戏物体,并在 `Start()` 方法中为每个游戏物体添加了 `Health` 组件,用于存储血量值。在 `Update()` 方法中,我们首先查找血量最少的游戏物体,并将其标记为红色,然后查找距离最近的游戏物体,并将其标记为蓝色。最后,我们将所有其它游戏物体的颜色设置为默认颜色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值