C# 只记录一次,而不是记录对象的次数

C# 只记录一次,而不是记录对象的次数,c#,unity3d,C#,Unity3d,我有9个3d立方体。每个多维数据集都有一个脚本组件,用于检查多维数据集是否被触摸。如果是这样,它会记录被触摸立方体的名称 want:多维数据集的名称记录一次。事实:多维数据集的名称记录了9次(每个多维数据集记录一次),这很有意义。。这与附加到所有9个多维数据集的脚本相同。请参见下面的脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class main: MonoB

我有9个3d立方体。每个多维数据集都有一个脚本组件,用于检查多维数据集是否被触摸。如果是这样,它会记录被触摸立方体的名称

want:多维数据集的名称记录一次。事实:多维数据集的名称记录了9次(每个多维数据集记录一次),这很有意义。。这与附加到所有9个多维数据集的脚本相同。请参见下面的脚本:

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

public class main: MonoBehaviour

{
    public string touchedObjectsName;

    // Start is called before the first frame update
    void Start()
    {


    }

    // Update is called once per frame
    void Update()
    {
        if ((Input.touchCount > 0) && (Input.GetTouch(0).phase == TouchPhase.Began))
        {
            Ray raycast = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
            RaycastHit raycastHit;

            if (Physics.Raycast(raycast, out raycastHit))
            {
                touchedObjectsName = raycastHit.collider.gameObject.name;
                Debug.Log(touchedObjectsName);
            }
        }
    }
}
问题:即使上面的脚本附加到多个游戏对象上,是否可以将其修改为只记录一次


谢谢,亲爱的社区

正如您自己所说:您的脚本正在所有9个多维数据集上运行

所以,你做了9次光线投射,9次总是击中同一个物体,并打印它的名字9次


当然,你可以简单地检查一下你是否击中了自己:

if (Physics.Raycast(raycast, out raycastHit))
{
    // only do it if the hit object is the same as this script is attached to
    if(raycastHit.gameObject == gameObject)
    {
        touchedObjectsName = raycastHit.collider.gameObject.name;
        Debug.Log(touchedObjectsName);
    }
}
但这是非常多余的=>没有效率


只在场景中的某个地方运行此脚本一次,因为它可以跟踪任何被触摸的对象,因此无需多次运行。

谢谢!看起来我站在那里的水管上(就像德国人说的)。。。出于某种原因,我假设脚本需要附加到我要检查/光线投射到的游戏对象。从立方体中删除脚本并将其连接到主cam,现在可以按需要工作了。