有没有办法使用 Vector3 制作 switch/case?

mos*_*alf 6 c# unity-game-engine

我想做的是当我的角色(ThirdPerSonController)触摸立方体时检测每一面。事实上,我的主要目标是检测我的玩家何时站在顶部的立方体表面上。这是我的脚本:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    void OnCollisionEnter(Collision collision)
    {
        ContactPoint contact = collision.contacts[0];
        Vector3 normal = contact.normal;
        Vector3 inverseNormal = transform.InverseTransformDirection(normal);
        Vector3 roundNormal = RoundVector3(inverseNormal);

        ReturnSide(roundNormal);
    }

    Vector3 RoundVector3(Vector3 convertThis)
    {
        int x = (int)Mathf.Round(convertThis.x);
        int y = (int)Mathf.Round(convertThis.y);
        int z = (int)Mathf.Round(convertThis.z);
        Vector3 returnVector = new Vector3(x, y, z);
        return returnVector;
    }



void ReturnSide(Vector3 side)
{
    string output = null;
    switch (side)
    {
        case Vector3.down:
            output = "Down";
            break;
        case Vector3.up:
            output = "Up";
            break;
        case Vector3.back:
            output = "Back";
            break;
        case Vector3.forward:
            output = "Front";
            break;
        case Vector3.left:
            output = "Left";
            break;
        case Vector3.right:
            output = "Right";
            break;
    }
    Debug.Log(output + " was hit.");
}

// Use this for initialization
void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
}
Run Code Online (Sandbox Code Playgroud)

我在线上遇到错误:

switch (side)
Run Code Online (Sandbox Code Playgroud)

严重性代码 说明 项目文件行抑制状态错误 CS0151 switch 表达式或 case 标签必须是 bool、char、string、integral、enum 或相应的可空类型 test.cs 33 Active

小智 0

不,你不能在 vector3 上使用 switch/case,但是你可以做的(这不是最好的解决方案,但可以完成工作)是转换 vector3d.x ,z 和 y 并在 switch case 上运行它们。不过我认为它看起来不会很好。