помогите найти ошибку в коде C# Unity
пытаюсь написать код , перемещения объекта курсором мыши при зажатой ЛКМ Но , после клика кнопкой мыши , опрос функций OnMouseExit и OnMouseEnter прекращается Из модулей подключен BoxCollider2D. Подскажите в чем ошибка?
public class scr_obj : MonoBehaviour
{
bool flag_mouse = false;
void OnMouseEnter()
{
flag_mouse = true;
print("flag_mouse " + flag_mouse);
}
void OnMouseExit()
{
flag_mouse = false;
print("flag_mouse " + flag_mouse);
}
void Update()
{
print("update");
if (flag_mouse==true)
{
Vector2 mouse_pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 obj_pos = transform.position;
Vector2 new_obj_pos = new Vector2(mouse_pos.x, mouse_pos.y);
transform.position = new_obj_pos;
}
}
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
как-то так:
private Vector3 _screenPoint;
private Vector3 _offset;
void OnMouseDown() {
_offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, _screenPoint.z));
}
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + _offset;
transform.position = curPosition;
}
или так:
private Vector2 _previousPos;
private bool _isMouseDown;
void OnMouseDown() {
_isMouseDown = true;
_previousPos = Input.mousePosition;
}
void OnMouseDrag(){
if(!_isMouseDown)
return;
Vector2 currentPos = Input.mousePosition;
Vector2 paddlePos = currentPos - previousPos;
transform.position = paddlePos;
_isMouseDown = false;
_previousPos = currentPos;
}
код не проверял
А для 3д перетаскивания в юнити раньше был отдельный стоковый скрипт. Уже не помню как назывался, но, вероятно гугл подскажет если понадобится.