一段代码之仿LOL移动方式

创建个动画

 public Animator anim;

设置位置目标

private Vector3 target;

判定是否移动

private bool m_IsOver = true;

//封装目标位置

    private bool isOver

    {

        get

        {

            return m_IsOver;

        }

        set

        {

            m_IsOver = value;

            TargetGo.SetActive(!m_IsOver);

            TargetGo.transform.position = target;

        }

}

封装是否攻击

    private bool m_attckOver = true;

    private bool attckOver

    {

        get

        {

            return m_attckOver;

        }

        set

        {

            m_attckOver = value;

            MagicGo.SetActive(!m_attckOver);

        }

    }

设置移动的速度

public float PlayerSpeed;

设置技能的速度

public float MagicSpeed;

鼠标点击位置生成的物体

public GameObject TargetGo;

技能物体

    public GameObject MagicGo;

    void Update()

{

如果按下W键

        if (Input.GetKeyDown(KeyCode.W))

        {

播放攻击动画

            Attack();

生成攻击特效物体

            GetMousePos();

        }

如果按下左键

        if (Input.GetMouseButtonDown(0))

        {

获取射线的方法识别鼠标的位置

            GetMousePos();

静止状态取消

            isOver = false;

播放跑步动画

            anim.SetBool("run", true);

攻击动画取消

            attckOver = true;

        }

    }

获取鼠标位置让人物移动过去的方法

    private void GetMousePos()

{

摄像机的射线照等于鼠标的位置

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

计算出方向

        RaycastHit hitInfo = new RaycastHit();

射线的方向判定

        if (Physics.Raycast(ray, out hitInfo))

        {

如果射线点击的名字是plane面板

            if (hitInfo.collider.name == "Plane")

            {

位置等于射线的位置

                target = hitInfo.point;

y左边为0

                target.y = 0;

人物看向位置

                transform.LookAt(target);

            }

        }

    }

    void FixedUpdate()

{

人物移动到位置

        MoveTo(target);

    }

攻击方法

    private void Attack()

    {播放攻击动画

        anim.SetTrigger("attack");

技能物体的位置等于人物的位置

        MagicGo.transform.position = transform.position;

开启移动

        isOver = true;

取消播放动画

        attckOver = false;

}

移动方法

    private void MoveTo(Vector3 tar)

{

如果不是静止

        if (!isOver)

        {

人物的距离位置

            Vector3 offSet = tar - transform.position;

位置相加

            transform.position += offSet.normalized * PlayerSpeed * Time.deltaTime;

如果距离小于0.5

            if (Vector3.Distance(tar, transform.position) < 0.5f)

            {

播放跑步动画

                anim.SetBool("run", false);

开启运动

                isOver = true;

位置为鼠标的位置

                transform.position = tar;

            }

        }

如果开始攻击

        if (!attckOver)

        {

距离等于鼠标位置减去技能的位置

            Vector3 offSet = tar - MagicGo.transform.position;

实现技能的位置移动

            MagicGo.transform.position += offSet.normalized * MagicSpeed * Time.deltaTime;

如果鼠标和技能之间的间距小于0.5

            if (Vector3.Distance(tar, MagicGo.transform.position) < 0.5f)

            {

攻击结束

                attckOver = true;

技能位置等于鼠标位置

                MagicGo.transform.position = tar;

            }

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值