Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据多维数据集I';我离你更近了?_C#_Unity3d - Fatal编程技术网

C# 如何根据多维数据集I';我离你更近了?

C# 如何根据多维数据集I';我离你更近了?,c#,unity3d,C#,Unity3d,立方体形成一个大正方形,以创建某种边界,因此玩家不能再往前移动。 transform是脚本附加到播放器的播放器 当我将播放器移动到靠近它的一个立方体时,距离约为95,但应该为0.1f或0 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityStandardAssets.Characters.ThirdPerson; public class

立方体形成一个大正方形,以创建某种边界,因此玩家不能再往前移动。 transform是脚本附加到播放器的播放器

当我将播放器移动到靠近它的一个立方体时,距离约为95,但应该为0.1f或0

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityStandardAssets.Characters.ThirdPerson;

public class DistanceCheck : MonoBehaviour
{
    public Transform[] cubes;
    public GameObject descriptionTextImage;
    public TextMeshProUGUI text;

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

    }

    // Update is called once per frame
    void Update()
    {
        for (int i = 0; i < cubes.Length; i++)
        {
            var dist = Vector3.Distance(transform.position, cubes[i].transform.position);

            if (dist <= 0.1f)
            {
                descriptionTextImage.SetActive(true);
                text.text = "I can't move.";
            }
            else
            {
                text.text = "";
                descriptionTextImage.SetActive(false);
            }
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用TMPro;
使用UnityEngine;
使用UnityStandardAssets.Characters.ThirdPerson;
公共类距离检查:单行为
{
公共转换[]立方体;
公共游戏对象描述文本图像;
公共文本;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
for(int i=0;i如果(dist您每次都检查所有多维数据集,并且每次都使用相同的“dist”变量。
因此,它检测到deistance小于0.1f,但继续并更改dist的值以测试另一个多维数据集。这就是为什么尽管您正好位于多维数据集的旁边,但仍然会得到更高的值。
您需要4个距离变量,每个变量测量到其特定立方体的距离,如果其中一个太短,请执行某些操作。

另一个缺陷是,您正在测量到框中某个点的距离,因此根据框的哪一侧,它将显示不同的值。

您每次都检查所有立方体,并且每次都使用相同的“dist”变量。 因此,它检测到deistance小于0.1f,但继续并更改dist的值以测试另一个多维数据集。这就是为什么尽管您正好位于多维数据集的旁边,但仍然会得到更高的值。 您需要4个距离变量,每个变量测量到其特定立方体的距离,如果其中一个太短,请执行某些操作。
另一个缺陷是,您正在测量到长方体中某个点的距离,因此根据要显示的长方体的哪一侧,它将显示不同的值。

我建议不要使用立方体变换,而是使用它们的碰撞器。然后我将在碰撞器边界上查找最近的点。目前,您正在检查r这个物体到立方体原点的距离,在我看来,你只是想找到到立方体/对撞机的距离

首先,更改多维数据集的字段类型:

public BoxCollider[] cubes;
然后像这样计算距离:

var closestPoint = cubes[ i ].ClosestPointOnBounds ( transform.position );
var distance = Vector3.Distance( transform.position, closestPoint );
现在,您应该获得到立方体/碰撞器最近点的距离


有关
ClosestPointOnBounds
的更多信息,请参见Unity文档。

我建议不要使用立方体变换,而是使用它们的碰撞器。然后我会在碰撞器边界上查找最近的点。目前,您正在检查此对象到立方体原点的距离,以及对我来说,听起来你只是想找到到立方体/对撞机的距离

首先,更改多维数据集的字段类型:

public BoxCollider[] cubes;
然后像这样计算距离:

var closestPoint = cubes[ i ].ClosestPointOnBounds ( transform.position );
var distance = Vector3.Distance( transform.position, closestPoint );
现在,您应该获得到立方体/碰撞器最近点的距离


有关
ClosestPointOnBounds
的更多信息,请参见Unity文档。

所有立方体的距离都是95吗?如果您一直单击断点,在循环过程中,您应该会得到不同立方体的不同值。此外,我确信Unity中有一个测量工具,您可以检查距离是否准确。也许吧ps这是一个单位问题?@QrowSaki距离不一样,我只是添加了一些立方体来创建一种正方形作为边界,玩家将无法在其上移动。我可以稍后使正方形完全精确,但现在它不是批评家。我只想使它无论玩家要去哪里,在c中的任何一点碰撞ubes显示一些文本。我在脚本中也尝试了OnTiggerEnter,但只有在我检查所有立方体时它才起作用。IsTrigger为true,但玩家不会停止,他将能够在立方体中行走。它将进入OnTiggerEnter,但玩家将在立方体中移动。你是否尝试手动执行碰撞检测?有没有你试过使用刚体吗?所有立方体的距离都是95吗?如果你一直点击断点,你应该会在循环过程中得到不同立方体的不同值。另外,我相信unity中有一个测量工具,你可以检查距离是否准确。也许这是一个单位问题?@QrowSaki距离不是相同的I just添加了一些立方体,以创建一种正方形作为边界,玩家将无法在其上移动。我可以稍后使正方形完全准确,但现在它不是批评。我只想使它无论玩家要去哪里,并在任何立方体中的任何点碰撞以显示一些文本。我还尝试在脚本中使用OnTiggerEnter但是,只有当我检查所有立方体时,它才起作用。IsTrigger为true,但玩家不会停止,他将能够在立方体中行走。它将进入OnTiggerCenter,但玩家将在立方体中移动。你是否尝试手动执行碰撞检测?你尝试过使用刚体吗?