duojiduojiduoji295 2023-02-20 00:15 采纳率: 95%
浏览 93
已结题

unity如何选中物体并显示距离?

如图是已经显示了用粒子效果做的火焰,如何选中火焰并显示距离呢?如果要添加脚本,是要新建一个脚本还是在生成火焰的脚本上修改呢?

img

这是火焰生成脚本


using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class RandomPlace : MonoBehaviour

{

    public Transform[] SpawnPoints;//存放生成位置

    public GameObject prefab;//生成的物体

    public float heightOffset;






    public float spawnTime = 3f;//多长时间后调用

    public float nextSpawnTime = 2f;//下一个物体生成的时间



    // Start is called before the first frame update

    void Start()

    {

        InvokeRepeating("SpawnPrefab", spawnTime, nextSpawnTime);

        //"SpawnPrefabs" : 调用的方法名称

        //spawnTime: 多长时间后调用

        //nextSpawnTime: 下一个物体生成的时间

    }

    private void SpawnPrefab()

    {

        int Index = Random.Range(0, SpawnPoints.Length);//生成位置数组下标
        Vector3 spawnPosition = SpawnPoints[Index].position + new Vector3(0f, heightOffset, 0f);
        Instantiate(prefab, spawnPosition, SpawnPoints[Index].rotation);

        //prefab: 生成的物体

        //SpawnPoint[Index].position: 生成的物体所在的位置

        //SpawnPoint[Index].rotation: 生成物体的角度

    }
  • 写回答

12条回答 默认 最新

  • zmy1127 2023-02-20 11:24
    关注

    要实现选中物体并显示距离,您需要编写一个脚本,该脚本将放置在Unity的某个游戏对象上,该游戏对象充当跟踪距离的管理器。您可以选择将脚本附加到现有游戏对象或创建一个新游戏对象来包含此脚本。在此示例中,我们将创建一个新的空游戏对象并将脚本附加到该对象上。

    下面是一个示例脚本,该脚本跟踪到主摄像机中鼠标的点击位置,并确定与最近的火焰之间的距离。它还将在场景中显示距离文本。

    
    
    using UnityEngine;
    using UnityEngine.UI;
     
    public class DistanceManager : MonoBehaviour
    {
        public Text distanceText;
        private GameObject selectedObject;
     
        void Update()
        {
            // 点击鼠标左键选中物体
            if (Input.GetMouseButtonDown(0))
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
     
                if (Physics.Raycast(ray, out hit))
                {
                    if (hit.transform.tag == "Fire")
                    {
                        selectedObject = hit.transform.gameObject;
                    }
                }
            }
     
            // 更新距离文本
            if (selectedObject != null)
            {
                float distance = Vector3.Distance(selectedObject.transform.position, transform.position);
                distanceText.text = "Distance: " + distance.ToString("F2") + " units";
            }
            else
            {
                distanceText.text = "";
            }
        }
    }
    

    将此脚本添加到场景中的一个空游戏对象上,然后将 distanceText 变量设置为文本UI元素,该元素将显示距离信息。接下来,将此脚本与火焰预制件标记为 "Fire" 的标记一起使用,以便在点击火焰时选中它。最后,将此脚本放置在您的场景中,以便可以跟踪所选火焰与游戏对象之间的距离。

    在您提供的生成火焰脚本中,不需要修改它,只需在场景中将此脚本与火焰预制件标记为 "Fire" 的标记一起使用即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行