2D精灵图片跟随鼠标移动
1:创建一个Sprite,并添加Rigidbody组件,然后再创建一个Trail作为它的子物体:
2:将下图所示脚本挂载在创建的Sprite上,然后将Trail赋值过去即可:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowMouse : MonoBehaviour
{
bool isCutting = false;
Rigidbody blade_rb;
Camera cam;
public GameObject trail;
private void Start()
{
blade_rb = GetComponent<Rigidbody>();
cam = Camera.main;
trail.SetActive(false);
}
private void Update()
{
if (Input.GetMouseButtonDown(0)||(Input.touchCount==1&&Input.touches[0].phase==TouchPhase.Began))
{
Start_cut();
}
else if (Input.GetMouseButtonUp(0) || (Input.touchCount == 1 && Input.touches[0].phase == TouchPhase.Ended))
{
Stop_cut();
}
else if (isCutting)
{
UPdateCut();
}
else
{
blade_rb.position = cam.ScreenToWorldPoint(Input.mousePosition);
}
}
void Start_cut()
{
blade_rb.position = cam.ScreenToWorldPoint(Input.mousePosition) + new Vector3(0, 0, 10);
isCutting = true;
}
void Stop_cut()
{
isCutting = false;
trail.SetActive(false);
}
void UPdateCut()
{
trail.SetActive(true);
blade_rb.position = cam.ScreenToWorldPoint(Input.mousePosition) + new Vector3(0, 0, 10);
}
}
2DUI拖拽
在需要进行拖拽功能的Image上添加BoxCollider,然后将控制拖拽的脚本挂载上去即可实现拖拽功能,如下图所示:
拖拽脚本如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DragPanel : MonoBehaviour, IDragHandler
{
public void OnDrag(PointerEventData eventData)
{
float x = Input.mousePosition.x;
float y = Input.mousePosition.y;
//物体拖拽的一个范围 根据实际项目分辨率自行合理设置即可
x = Mathf.Clamp(x, 100, 1800);
y = Mathf.Clamp(y, 100, 900);
transform.position = new Vector3(x, y);
}
private Vector3 StartPos;
private void Start()
{
StartPos = transform.localPosition;
}
public void ChangePos()
{
transform.localPosition = StartPos;
}
}
3D物体拖拽
1:首先给需要被鼠标拖拽的物体上添加碰撞器,然后将下列所示脚本添加上去,即可实现简单的3D物体拖拽功能:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DragPanel : MonoBehaviour
{
//偏移值
Vector3 m_Offset;
//当前物体对应的屏幕坐标
Vector3 m_TargetScreenVec;
private IEnumerator OnMouseDown()
{
//当前物体对应的屏幕坐标
m_TargetScreenVec = Camera.main.WorldToScreenPoint(transform.position);
//偏移值=物体的世界坐标,减去转化之后的鼠标世界坐标(z轴的值为物体屏幕坐标的z值)
m_Offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3
(Input.mousePosition.x, Input.mousePosition.y, m_TargetScreenVec.z));
//当鼠标左键点击
while (Input.GetMouseButton(0))
{
//当前坐标等于转化鼠标为世界坐标(z轴的值为物体屏幕坐标的z值)+ 偏移量
transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,
Input.mousePosition.y, m_TargetScreenVec.z)) + m_Offset;
//等待固定更新
yield return new WaitForFixedUpdate();
}
}
}