美文网首页
Unity3d人物移动/旋转/技能释放

Unity3d人物移动/旋转/技能释放

作者: 潇千忘 | 来源:发表于2019-04-14 10:34 被阅读0次

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Player: MonoBehaviour {

    public Animator ani;

    public Transform pos;

    public LineRenderer lineRenderer;

    public UIButton shootBtn;//射击按钮

    public UIButton skillBtn_1, skillBtn_2, skillBtn_3;//1技能按钮

    public Camera ca;

    public int enemyCount = 0;//当前击杀的怪物数量

    public float survivalTime = 0;//存活时间

    public double hp = 20;//人物血量

    public double maxHp = 20;//人物最大血量

    public GameManager gameManager;

    public bool isDie = false;

    public static Player instance;

    //public UISprite skillMaskSprite_1;//1技能遮罩图片

    //public UILabel skillTimeText_1;//1技能冷却时间文本

    //public float collingTime = 5;//冷却时间

    private void Awake()

    {

        instance = this;

    }

    // Use this for initialization

    void Start () {

        maxHp = hp = SaveDate.instance.currentAcc.hp;

        ani = GetComponent<Animator>();

        pos = transform.Find("GunBarrelEnd");

      // lineRenderer = GameObject.Find("LineRenderer").GetComponent<LineRenderer>();

        //lineRenderer.gameObject.SetActive(false);

        //shootBtn = GameObject.Find("UI Root").transform.Find("ShootButton").GetComponent<UIButton>();

      // shootBtn.onClick.Add(new EventDelegate(ShootBtnEvent));

        //skillBtn_1 = GameObject.Find("UI Root").transform.Find("skill_1").GetComponent<UIButton>();

      //  skillBtn_2 = GameObject.Find("UI Root").transform.Find("skill_2").GetComponent<UIButton>();

      // skillBtn_3 = GameObject.Find("UI Root").transform.Find("skill_3").GetComponent<UIButton>();

      // skillBtn_1.onClick.Add(new EventDelegate(Skill_1));

      //  skillBtn_2.onClick.Add(new EventDelegate(Skill_1));

        //skillBtn_3.onClick.Add(new EventDelegate(Skill_5));

        gameManager = GameObject.Find("Main Camera").GetComponent<GameManager>();

        ca = GameObject.Find("Main Camera").GetComponent<Camera>();

    }

// Update is called once per frame

void Update () {

        if (!isDie)

        {

            if (Rocker.ins.isPress)

            {

                PlayerMouseMove();

            }

            else

            {

                PlayerKeyMove();

            }

            //Skill_2();

            //Skill_4();

            //PlayerShoot();

            //gameManager.taskManager.taskCtrl.Timer();

        }

       

    }

    //键盘移动人物事件

    void PlayerKeyMove() {

        float h = Input.GetAxis("Horizontal");//获取水平轴

        float v = Input.GetAxis("Vertical");//获取垂直轴

        transform.Translate(new Vector3(h, 0, v) * Time.deltaTime * 3);

        //print(h + "--v--" + v);

        //当h或v不等于0处于运动状态

        if (h != 0 || v != 0)

        {

          // ani.SetBool("IsMove", true);

        }

        else

        {

            //ani.SetBool("IsMove", false);

        }

        if (Input.GetKey(KeyCode.Q))

        {

            transform.Rotate(Vector3.up, -3.0f);

        }

        if (Input.GetKey(KeyCode.E))

        {

            transform.Rotate(Vector3.up, 3.0f);

        }

       

        //transform.Rotate(Vector3.left, Input.GetAxis("Horizontal"));

        //transform.Rotate(Vector3.right, Input.GetAxis("Vertical"));

    }

//鼠标摇杆移动人物事件

    public void PlayerMouseMove() {

        if (Rocker.ins.dir != Vector3.zero)

        {

            ani.SetBool("IsMove", true);

            //四元数  控制物体旋转,可以避免万向锁

            Quaternion que = Quaternion.LookRotation(Rocker.ins.dir);

            //人物旋转

            transform.rotation = Quaternion.Lerp(transform.rotation, que,0.3f);

            //人物移动

            transform.Translate(Rocker.ins.dir * Time.deltaTime * 15, Space.World);

            //相机旋转

            //ca.transform.rotation = transform.rotation;

            //ca.transform.LookAt(transform.position);

        }

        else {

        //    ani.SetBool("IsMove", false);

        }

    }

    //射击的方法

    void PlayerShoot() {

        if (Input.GetMouseButton(0))

        {

            //lineRenderer.gameObject.SetActive(true);

            //StartCoroutine(Des());

            //实例化射线

            Ray ray = new Ray(pos.position, pos.forward);

        //  lineRenderer.SetPosition(0, pos.position);//设置射线渲染器第一个点坐标

            RaycastHit hit;//接受射线碰撞的物体信息

                          //表示如果碰撞到物体

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

            {

                //hit.point射线撞击点

              //  lineRenderer.SetPosition(1, hit.point);

            }

            else

            {

              // lineRenderer.SetPosition(1, pos.position + pos.forward * 10);

            }

        }

        if (Input.GetMouseButtonUp(0)) {

            //lineRenderer.gameObject.SetActive(false);

        }

    }

    IEnumerator Des() {

        yield return new WaitForSeconds(0.2f);

        //lineRenderer.gameObject.SetActive(false);

    }

    public void ShootBtnEvent() { //激光射线特效

        //lineRenderer.gameObject.SetActive(true);

        StartCoroutine(Des());

        Ray ray = new Ray(pos.position, pos.forward);

    //  lineRenderer.SetPosition(0, pos.position);

        RaycastHit hit;

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

        {

          // lineRenderer.SetPosition(1, hit.point);

            if (hit.collider.tag == "enemy")

            {

                //hit.collider.GetComponent<EnemyInit>().hit = 1;

                //hit.collider.GetComponent<EnemyInit>().Behit();

                //hit.collider.GetComponent<EnemyInit>().hit = 0;

            }

        }

        else {

          // lineRenderer.SetPosition(1, pos.position + pos.forward * 50);

        }

    }

    public GameObject effectObj;

    public GameObject effect1Obj;

    public void Skill_1()

    { //自恢复特效

        //实例化出来一个特效

        //GameObject effect = Instantiate(effectObj);

        //给定特效位置

        //effect.transform.position = transform.position;

        //Destroy(effect,1);

    }

    //定义一个层级

    public LayerMask lm, lm2;

    public void Skill_2() { //闪现技能

        //射线检测位置

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

        RaycastHit hit;

        if (Physics.Raycast(ray,out hit,50,lm))

        {

            if (Input.GetMouseButtonDown(0))

            {

                //实例化出来一个特效

                //GameObject effect = Instantiate(effectObj);

                //给定特效位置

              // effect.transform.position = hit.point;

                //transform.position = hit.point;

              // Destroy(effect, 1);

            }

        }

    }

    IEnumerator Wait(Vector3 pos)

    {

        yield return new WaitForSeconds(3);

        transform.position = pos;

    }

    public void Skill_4() { //传送技能的实现

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

        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 100, lm)) {

            if (Input.GetMouseButtonDown(1))

            {

                //生成特效

                //特效位置,1生成到人物自身位置,2生成到传送点特效

                //等待5s把鼠标点击位置赋值给人物

                //实例化出来一个特效

                //GameObject effect = Instantiate(effect1Obj);

                //给定特效位置

              // effect.transform.position = transform.position;

                //实例化出来一个特效

                //GameObject effect1 = Instantiate(effect1Obj);

                //给定特效位置

              // effect1.transform.position = hit.point;

              // StartCoroutine(Wait(hit.point));

              //  Destroy(effect,3);

                //Destroy(effect1,3);

            }

        }

    }

    //技能范围显示及移动

    public GameObject big;

    public GameObject small;

    public void Skill_5() {

        big.SetActive(true);

        small.SetActive(true);

        StartCoroutine(SmallMove());

    }

    //技能显示层级

    public LayerMask lm3;

    //技能范围小圆移动事件

    IEnumerator SmallMove() {

        while (true)

        {

          //射线检测

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

            RaycastHit hit;

            if (Physics.Raycast(ray,out hit,20,lm3))

            {

                //获取人物和鼠标点之间的差值

                Vector3 offset = hit.point-transform.position;

                if (offset.magnitude>2)

                {

                    offset = offset.normalized * 2;

                }

                small.transform.position = transform.position+ offset;

                if (Input.GetMouseButtonDown(0))

                {

                    //开启技能冷却协程

                    //skillBtn_3.GetComponent<CollingSkill1>().Skill();

                    //隐藏图片

                    //big.SetActive(false);

                  // small.SetActive(false);

                    //实例化特效

                  // GameObject effect = Instantiate(effect1Obj);

                    //effect.transform.position = small.transform.position;

                    KillSuper();

                  // Destroy(effect,3);

                    break;

                }

            }

            yield return null;

        }

    }

    //技能释放---范围攻击

    public LayerMask lm5;

    void KillSuper()

    {

      //范围检测

        Collider[] co = Physics.OverlapSphere(small.transform.position, 2, lm5);

       

        for (int i = 0; i < co.Length; i++)

        {

            if (co[i].tag == "enemy")

            {

              //  co[i].GetComponent<EnemyInit>().hit = Random.Range(1,4);

              // co[i].GetComponent<EnemyInit>().Behit();

            }

        }

    }

    //人物死亡

    public void PlayerDieEvent() {

        isDie = true;

        //播放死亡画面

        //ani.SetTrigger("die");

        //弹出结束画面

    }

}

相关文章

  • Unity3d人物移动/旋转/技能释放

    using System.Collections; using System.Collections.Generi...

  • 程咬金连招

    一二三平A, 一二三二。 一技能跳跃至敌人身边并减速。 二技能旋转伤害。 最后三技能追杀,或者斩杀! 一二技能释放...

  • 镜头运动

    跟随焦点移动 摇:横摇(左右旋转)和直摇(上下旋转) 移: 推轨镜头(左右移动) 人物出场:镜头引导和场景接管 场...

  • 怒血主宰

    创新闯关游戏。进入游戏后你可以通过移动左下角的控制按钮来控制人物方向,点击右下角的按钮来进行技能释放。杀死规定数量...

  • 秦时明月

    游戏故事背景,3D战斗画面精彩,人物技能多样,斗气在对战中获得,可以在人物的技能中释放斗气,发挥技能。每两小时玩家...

  • Unity3D 控制物体移动、旋转、缩放

    Transform基本移动函数: 1.指定方向移动: 2.全方向移动: 3.重置坐标: 输入控制: 1.输入指定按...

  • 几款AR相机推荐:现实太无聊 来点虚的

    1、视+AR 可以自己选择人物,目前有小黄人、初音未来、熊本熊、英雄联盟人物等,还在不断增加中。可以点击移动、旋转...

  • 移动旋转

    简介 简单总结 move CharacterController: Rigidbody:AddForce,Move...

  • 无标题文章

    刚刚发现了一个UNITY3D中物体移动比较齐全的方法,借鉴的,希望对大家都有所帮 unity3d中控制物体移动方法...

  • DrawCall优化

    Unity3D 对于移动平台的支持无可非议,但是也有时候用Unity3D 开发出来的应用、游戏在移动终端上的运行有...

网友评论

      本文标题:Unity3d人物移动/旋转/技能释放

      本文链接:https://www.haomeiwen.com/subject/lxsjwqtx.html