IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity:玩家移动及射击 -> 正文阅读

[游戏开发]Unity:玩家移动及射击

using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class Player : MonoBehaviour {

	CharacterController cc;
    Animation an;
    AudioSource audios;
    AudioClip clip,fireclip;
    Transform pos, dog;
    GameObject hole, f_effect, b_effect;
	void Start () {
        dog = GameObject.FindWithTag(GameRes .dog ).transform ;
        pos = transform.GetChild(0).GetChild(0);
		cc = GetComponent<CharacterController >();
        audios = GetComponent<AudioSource>();
        an = GetComponent<Animation >();
        clip = Resources.Load<AudioClip >(GameRes .jiaobPath );
        fireclip = Resources.Load<AudioClip >(GameRes .player_firePath  );
        hole = Resources.Load<GameObject>(GameRes.holePath );
        f_effect = Resources.Load<GameObject>(GameRes.fire_effectPath  );
        b_effect = Resources.Load<GameObject>(GameRes.baoza_effectPath  );
	}
		
	void Update () {
        Move();
        Fire();
        if (dog)
        {
            Dir();
        }
    }
    void PlayAnimation(PlayerAnimation pa )
    {
        switch (pa)
        {
            case PlayerAnimation.Idle:
                an.Play("Idle");
                break;
            case PlayerAnimation.Fire:
                an.Play("Fire");
                break;
            case PlayerAnimation.Melee:
                an.Play("Melee");
                break;
            case PlayerAnimation.Reload:
                an.Play("Reload");
                break;
            default:
                break;
        }
    }
    void Move()
    {
        float h = Input.GetAxis("Horizontal") * Time.deltaTime * 300;
        float v = Input.GetAxis("Vertical") * Time.deltaTime * 300;
        Vector3 dir = transform.right * h + transform.forward * v;//保证正常移动
        if (cc.isGrounded)
        {
            if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0)
            {
                PlayAnimation(PlayerAnimation.Idle);
                if (!audios .isPlaying )
                {
                    audios.PlayOneShot(clip);
                }             
            }
        }
        cc.SimpleMove(dir);
    }
    void Fire()
    {
        Debug.DrawRay(pos.position, pos.forward);//用于测试射线的位置及方向
        if (Input.GetMouseButtonDown (0))
        {
            PlayAnimation(PlayerAnimation.Fire);
            AudioSource.PlayClipAtPoint(fireclip, pos.position);
            RaycastHit hit;
           if( Physics.Raycast(pos.position, pos.forward, out hit, 100))
            {
                //克隆开火特效
                GameObject fgo = Instantiate(f_effect, pos.position, transform .rotation  );
                Destroy(fgo, 0.25f);
                //克隆弹孔
                GameObject hgo = Instantiate(hole, hit.point, Quaternion .identity  );
                hgo.transform.LookAt(hit.point - hit.normal  );//改变弹孔的方向,达到能贴在射击点效果
                hgo.transform.Translate (Vector3 .back *0.01f);//将弹孔往后移一点,优化射击效果            
                Destroy(hgo, 1.5f);
                //克隆爆炸特效
                GameObject bgo = Instantiate(b_effect, hit.point,hit.transform .rotation   );
                Destroy(bgo, 1.5f);
                //射线碰撞到dog,使其hp减少
                if (hit.collider.CompareTag(GameRes.dog))
                {
                    hit.collider.gameObject.GetComponent<Dog>().hp--;
                }
            }
        }
    }
    void Dir()
    { 
        float a = Vector3.Distance(transform.position, dog .position);
        float b = Vector3.Dot(transform.forward , (dog.position-transform .position).normalized  );
        Vector3 c = Vector3.Cross(transform.position, dog.position);
        if (a<=10)
        {
            gameManger.gm.f = true;         
            if (b>0)
            {
                if (c.y>0)
                {
                    gameManger.gm.s= "敌人出现在右前方";                  
                }
                else if(c.y<0)
                {
                    gameManger.gm.s = "敌人出现在左前方";
                }
            }
            else if (b<0)
            {
                if (c.y > 0)
                {
                    gameManger.gm.s = "敌人出现在右后方";
                }
                else if (c.y < 0)
                {
                    gameManger.gm.s = "敌人出现在左后方";
                }
            }
        }
        if (a <= 3)
        {
            gameManger.gm.f1 = true;
        }
    }


}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:17:43  更:2021-12-14 16:19:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:35:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码