Я хочу иметь возможность перетаскивать gameObject
в другую (2D-игру), чтобы перетаскивать объекты, я использую этот скрипт:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Dragger : MonoBehaviour
{
float tempZAxis;
public SpriteRenderer selection;
void Start()
{
}
void Update()
{
Touch[] touch = Input.touches;
for (int i = 0; i < touch.Length; i++)
{
Vector2 ray = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
RaycastHit2D hit = Physics2D.Raycast(ray, Vector2.zero, 100f, (1 << 8 | 1 << 9 | 1 << 10 | 1 << 11));
switch (touch[i].phase)
{
case TouchPhase.Began:
if (hit)
{
selection = hit.transform.gameObject.GetComponent<SpriteRenderer>();
if (selection != null)
{
tempZAxis = selection.transform.position.z;
}
}
break;
case TouchPhase.Moved:
Vector3 tempVec = Camera.main.ScreenToWorldPoint(touch[i].position);
tempVec.z = tempZAxis;
if (selection != null)
{
selection.transform.position = tempVec;
}
break;
case TouchPhase.Ended:
selection = null;
break;
}
}
}
}
Проблема в том, что мне пришлось прикрепить BoxCollider2D
к каждому gameObject
, чтобы использовать RaycastHit2D
, и теперь, когда я перетаскиваю объект1 на объект2, он толкает объект2, когда они сталкиваются. У меня есть 4 слоя до gameObjects
, я пытался вызвать Physics.IgnoreLayerCollision(9, 10);
в скрипте, прикрепленном к основной камере (запускается при запуске), но это не помогло.