【发布时间】:2017-07-02 17:49:37
【问题描述】:
我正在使用事件 OnTriggerStay2D 来销毁一个对象,我使用它而不是 OnTriggerEnter2D 的原因是因为我正在使用触摸屏拖动对象,并且我想在它被释放后销毁它,问题我有的是 OntriggerStay2D 并不总是被调用,所以有时对象在被释放后并没有被销毁,它必须再次移动才能工作,我已经阅读了 Unity 的文档
OnTriggerStay 几乎在所有触碰触发器的 Collider 的所有帧中都被调用。
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;
}
}
【问题讨论】:
-
OnTriggerStay2D与拖动对象有什么关系? -
我正在拖动物体与另一个物体发生碰撞,但我不想在它们碰撞时破坏它,我想在它们仍然接触时释放它时破坏它。跨度>
-
现在说得通了。请也添加您的拖动代码。这将有助于给你一个答案。
-
我编辑了问题,我添加了拖动代码。
-
您可以在释放对象后执行 RayCast。所以你不必使用 OnColliderStay 方法。
标签: c# android unity3d unity5 game-engine