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 上运行它们。不过我认为它看起来不会很好。