unity 单击移动

来源:互联网 发布:中国国家标准数据库 编辑:程序博客网 时间:2024/06/16 21:00


使用方式:



isCanMove是否可以移动对象Camera当前摄像机Length射线长度Move Speed移动速度End Distance结束距离Ground Floor Name碰撞层的名字Mouse Click检测的鼠标按键事件
StartMove开始移动事件Moveing正在移动事件EndMove结束移动事件



using UnityEngine.EventSystems;using UnityEngine;using System;public enum MouseCode{    LeftButton,    RightButton,    MiddleButton}public class ClickMove : MonoBehaviour {        public bool isCanMove = true;    public new Camera camera;    public int length = 1000;    public float moveSpeed;    public float endDistance=0.5f;    public string groundFloorName;    public MouseCode mouseClick;    public delegate void MoveEvent(Vector3 posintion);    public event MoveEvent StartMove;    public event MoveEvent Moveing;    public event MoveEvent EndMove;        private Vector3 offset;    private Vector3 targetPosition;    private RaycastHit info;    private bool isMove = false;    private Transform myTr = null;        private Transform MyTr    {    get{            return myTr ?? (myTr = transform);        }    }    public void SetTargetPosition(Vector3 position)    {        isMove = true;        targetPosition = position;        if (null != StartMove)            StartMove(MyTr.position);    }        private void Update()    {        if (!isCanMove)            return;        if (null == camera || string.Empty == groundFloorName)            return;        if (Input.GetMouseButtonDown((int)mouseClick))        {            if(null != EventSystem.current)            {                if (EventSystem.current.IsPointerOverGameObject())                    return;            }            Ray ray = camera.ScreenPointToRay(Input.mousePosition);            if (Physics.Raycast(ray, out info, length, LayerMask.GetMask(groundFloorName)))                SetTargetPosition(info.point);        }        if (isMove)        {            offset = targetPosition - MyTr.position;            MyTr.position += offset.normalized * Time.deltaTime * moveSpeed;            if (null != Moveing)                Moveing(MyTr.position);            if (Vector3.Distance(targetPosition, MyTr.position) <= endDistance)            {                isMove = false;                targetPosition.y = MyTr.position.y;                MyTr.position = targetPosition;                if (null != EndMove)                    EndMove(MyTr.position);            }        }    }}


原创粉丝点击