我有9个三维立方体。每个多维数据集都有一个脚本组件,检查多维数据集是否被触摸。如果是这样的话,它会记录被触摸的多维数据集的名称。
希望:多维数据集的名称只记录一次。现实:多维数据集的名称记录了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);
}
}
}
}问题:是否可以修改上面的脚本,以便只记录一次,即使它是附加到几个游戏对象?
谢谢,亲爱的社区!
发布于 2020-02-11 15:09:59
就像你自己说的:你的脚本正在所有9个立方体上运行!
所以,9次你做一个Raycast,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);
}
}但这是非常多余的=>无效!
相反,只让这个脚本在场景中的某个地方运行,一次运行一次,因为它已经可以跟踪,任何接触过的对象,所以不需要多次运行它。
https://stackoverflow.com/questions/60171856
复制相似问题