Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# 将Vector2Int转换为Vector3_C#_Unity3d - Fatal编程技术网

C# 将Vector2Int转换为Vector3

C# 将Vector2Int转换为Vector3,c#,unity3d,C#,Unity3d,我在游戏中遇到以下情况: 我有一个矩阵6x6,我将玩家的位置存储在矢量2int中,如图所示。 当他被子弹击中时,我会在他的左边、右边、后面和前面实例化一个游戏对象。但是,我无法使用Vector2Int来执行此操作,我已经尝试过这样做,但收到一条错误消息: private void OnTriggerEnter(Collider other) { if (other.transform.tag == "Player2") { pla

我在游戏中遇到以下情况:

我有一个矩阵6x6,我将玩家的位置存储在
矢量2int
中,如图所示。

当他被子弹击中时,我会在他的左边、右边、后面和前面实例化一个游戏对象。但是,我无法使用
Vector2Int
来执行此操作,我已经尝试过这样做,但收到一条错误消息:

private void OnTriggerEnter(Collider other)
    {
        if (other.transform.tag == "Player2")
        {
            player.Health += Healing;

            Instantiate(Flame, player.GridPosition.y+1, Quaternion.identity);
            Instantiate(Flame, player.GridPosition.y -1, Quaternion.identity);
            Instantiate(Flame, player.GridPosition.x + 1, Quaternion.identity);
            Instantiate(Flame, player.GridPosition.x - 1, Quaternion.identity);
            Destroy(this.gameObject);

        }
    }

有没有一种方法可以将这个
Vector2Int
转换成
Vector3

那么
Vector3
有一个构造函数,它接受两个浮点数,并将另一个浮点数初始化为零
Vector2Int
有两个属性
.x
.y
表示向量的x和y部分

结合这些,我们得到
Vector3 Vector3=new Vector3(player.GridPosition.x,player.GridPosition.y)
作为一个向量3,其x和y分量与Vector2Int相同

现在,当您在自己的自定义坐标系和Unity坐标系之间进行转换时,这是否会如您所期望的那样进行操作是另一回事。如果栅格的大小不是1x1 Unity units per tile,则可能需要按栅格的大小进行缩放


编辑:由于y位于Unity中,您可能需要的是
Vector3(player.GridPosition.x,0,player.GridPosition.y)
以便网格y位置成为世界z位置。

您可以做的是使用Vector2中的值创建一个新的Vector3:

float defaultZValue;

private void OnTriggerEnter(Collider other)
{
    if (other.transform.tag == "Player2")
    {
        player.Health += Healing;

        Instantiate(Flame, new Vector3(player.GridPosition.x, player.GridPosition.y+1, defaultZValue), Quaternion.identity);
        Instantiate(Flame, new Vector3(player.GridPosition.x, player.GridPosition.y-1, defaultZValue), Quaternion.identity);
        Instantiate(Flame, new Vector3(player.GridPosition.x+1, player.GridPosition.y, defaultZValue), Quaternion.identity);
        Instantiate(Flame, new Vector3(player.GridPosition.x-1, player.GridPosition.y, defaultZValue), Quaternion.identity);
        Destroy(this.gameObject);

    }
}


据我所知,您的z位置不会改变,因此您可以对每个
实例化使用相同的值,您可以在类中定义它。此外,您可能还需要为实例化过程创建另一个方法,以使代码更清晰。

player.GridPosition.y+1甚至不是矢量2int,而是int?对于OP,其矢量的y可能是Z轴,而不是y已添加了一个编辑,以澄清y在单位中指向哪个方向。