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

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");

        //弹出结束画面

    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 三相隔离变压器接线方式:y接和三角接 单相隔离变压器接线方式:串联和并联
    红蓝绿阅读 146评论 0 0
  • 好在,何倩芸打来了救急电话。 “你去哪了,岑云!” “我也不知道我到了哪里? 我在一辆公交车上,但我不知道它要开去...
    白色浪涛阅读 193评论 0 4