首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Debug.Log只有一次,而不是有对象那么多次

Debug.Log只有一次,而不是有对象那么多次
EN

Stack Overflow用户
提问于 2020-02-11 15:05:03
回答 1查看 445关注 0票数 0

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

希望:多维数据集的名称只记录一次。现实:多维数据集的名称记录了9次(每个多维数据集一次),这是有意义的。它在所有9个立方体上都有相同的脚本。见下面的脚本:

代码语言:javascript
复制
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);
            }
        }
    }
}

问题:是否可以修改上面的脚本,以便只记录一次,即使它是附加到几个游戏对象?

谢谢,亲爱的社区!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 15:09:59

就像你自己说的:你的脚本正在所有9个立方体上运行!

所以,9次你做一个Raycast,9次你点击总是相同的物体,并打印它的名字9次。

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

代码语言:javascript
复制
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);
    }
}

但这是非常多余的=>无效!

相反,只让这个脚本在场景中的某个地方运行,一次运行一次,因为它已经可以跟踪,任何接触过的对象,所以不需要多次运行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60171856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档