我试图在Unity中检查一个点(触摸的x位置,触摸的y位置)是否在创建的游戏对象内(矩形),如果是,则启动并旋转它。
我对Unity很新,但我自己尝试过,这就是
Rigidbody rb;
float x, y;
MeshCollider col;
Vector3 v;
bool bo = true;
// Use this for initialization
void Start()
{
rb = GetComponent<Rigidbody>();
col = rb.GetComponent<MeshCollider>();
}
void Update()
{
if (bo != true)
rb.transform.Rotate(Vector3.back, Time.deltaTime * 200, Space.World);
if (Input.touchCount == 1)
{
x = Input.GetTouch(0).position.x;
y = Input.GetTouch(0).position.y;
Debug.Log(x + "DOTS " + y);
v = new Vector3(x, y, 0);
if (col.bounds.Contains(v))
bo = false;
}
}
我的控制台没有显示任何内容,如果我输入Debug.Log("HELLO");
并且我几乎无法检查自己,所以这几乎是我的代码,感谢任何帮助。
答案 0 :(得分:1)
我认为由于您在PC上而不是在移动设备上进行测试,因此您无法获取日志。
为了检查触摸点是否在gameObject的范围内,从相机发射光线:
#if UNITY_EDITOR
if(Input.GetMouseButtonUp(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
#else
if(Input.touches.Length == 1 && Input.touches[0].phase == TouchPhase.Ended)
{
Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
#endif
int layerMask = (1 << YOUR_TARGET_LAYER_ID);
RaycastHit[] hits = Physics.RaycastAll(ray, 100f, layerMask);
foreach(RaycastHit hit in hits)
{
if(hit.collider == col)
{
Debug.Log("Bingo!!");
break;
}
}
}
请注意,我使用预编译器指令使此代码可以在移动设备和PC上运行。
YOUR_TARGET_LAYER_ID 是您希望仅对光线投射进行转贴的目标的图层ID。这将确保如果某个其他对象覆盖目标,它将被忽略。