我使用事件OnTriggerStay2D来销毁一个对象,我用它代替OnTriggerEnter2D的原因是我用触摸屏拖动对象,并且我想在它发布后销毁它,问题是OntriggerStay2D并不总是被调用,所以有时这个对象在发布后没有被销毁,它必须再次移动才能工作,我已经阅读了来自统一的文档化。
OnTriggerStay被称为几乎每一个对撞机的所有帧,其他碰触触发器的帧。
public void OnTriggerStay2D(Collider2D other)
{
if (gameObject.tag == other.tag) {
Destroy (other.gameObject);
}
}我想知道每次释放对象时是否有任何方法调用OntriggerStay2D。谢谢。
编辑拖动代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Drag : MonoBehaviour {
private bool draggingItem = false;
private GameObject draggedObject;
private Vector2 touchOffset;
void Update ()
{
if (HasInput)
{
DragOrPickUp();
}
else
{
if (draggingItem)
DropItem();
}
}
Vector2 CurrentTouchPosition
{
get
{
Vector2 inputPos;
inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
return inputPos;
}
}
private void DragOrPickUp()
{
var inputPosition = CurrentTouchPosition;
if (draggingItem)
{
draggedObject.transform.position = inputPosition + touchOffset;
}
else
{
RaycastHit2D[] touches = Physics2D.RaycastAll(inputPosition, inputPosition, 0.5f);
if (touches.Length > 0)
{
var hit = touches[0];
if (hit.transform != null && hit.rigidbody != null)
{
draggingItem = true;
draggedObject = hit.transform.gameObject;
touchOffset = (Vector2)hit.transform.position - inputPosition;
}
}
}
}
private bool HasInput
{
get
{
return Input.GetMouseButton(0);
}
}
public void DropItem()
{
draggingItem = false;
}
}发布于 2017-07-02 19:57:17
避免为此使用OnTriggerStay2D。可以在OnTriggerEnter2D和OnTriggerExit2D函数中使用设置为true和false的布尔变量。
bool isTouching = false;
void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Entered");
if (collision.gameObject.CompareTag("YourOtherObject"))
{
isTouching = true;
}
}
void OnTriggerExit2D(Collider2D collision)
{
Debug.Log("Exited");
if (collision.gameObject.CompareTag("YourOtherObject"))
{
isTouching = false;
}
}现在,您可以在释放对象时检查isTouching变量。
if(isTouching){
....
}请注意,我建议您放弃使用Raycast和Input.GetMouseButton(0);的当前代码,因为您也在移动设备上使用该代码。您应该为此使用联合的新EventSystem,因为它也是移动友好的。
由于您使用的是2D对撞机,请参阅#7中的this答案。
Here是一个完整的示例,演示了如何使用新的EventSystem拖动雪碧。结合上面的答案,你会得到一个更好的解决方案。
https://stackoverflow.com/questions/44873605
复制相似问题