游戏项目实践(一)

来源:互联网 发布:微博刷阅读量软件 编辑:程序博客网 时间:2024/06/05 15:34
     下周将要完成一个简单游戏制作,现在先练练手,准备将来要用到功能实现。

      一、实现主人公自动寻径
        private NavMeshAgent agent//声明寻径组件
        //在Start方法中初始化
        void Start () {
      agent=GetComponent<NavMeshAgent>();    
    }        
        void Update () {
              //定义一条射线:Camera的近视角的一点转换成2d坐标,从屏幕上发射射线,方向指向光标点击坐标
              Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
              //声明射线碰撞点
              RaycastHit hit;
              //射线碰撞成功,该游戏对象在碰撞点集合,并调用“动画化
              if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out hit)){
                       agent.destination = hit.point;
                       AnmitionRun();   
              } 
        }

      二、主人公向敌人发射子弹
      if (Input.GetMouseButtonDown(0) && Physics.Raycast(ray, out hit,50.0f)) {
            //判断射线碰撞到敌人
            if (hit.transform.gameObject.tag == "Enemy"){   
                //主人公停止移动                          
                agent.destination=girl.transform.position;
                //调用射击动画
                AnmitionShot();  
                //主人公正面朝向敌人          
                transform.LookAt(hit.point);
                 //克隆子弹
                GameObject clonedBullet = (GameObject)Instantiate(Bullet, transform.position, transform.rotation); 
                //设置给子弹添加力的速度矢量,指向的人              
                clonedBullet.rigidbody.velocity = (hit.point - transform.position) * Time.deltaTime * 100;
                //子弹发射两秒后销毁,减少游戏运行内存
                Destroy(clonedBullet, 2);
            }
        }      

      三、调用Animation动画
       方法:GameObjiect.transform.animation.Play(string);
       string 为预设体动画名字

      四、GUI实现,显示血条
         //人物现有血量
         public static int blood=50;
         //红色血条  
         public Texture2D red;
         //血条底纹  
         public Texture2D black;
         //当前血值  
         public int HP = 100;
         //血条长度
         public void OnGUI(){
           //设置子体颜色
           GUI.color = Color.red;
           //根据主人公血量值占血条最大值的百分比显示红条宽度
           nt blood_width = red.width * blood / HP;
           GUI.Label(new Rect(20, 40, 100, black.height),"HP:");
           //绘制黑色血条,  
           GUI.DrawTexture(new Rect(40, 40, black.width, black.height), black);
           //绘制红色血条  
           GUI.DrawTexture(new Rect(40, 40, blood_width, red.height), red);
       }  
       
      五、敌人可以有领域范围,主角进入该范围,将被追杀
       1、寻经

       2、 if (Vector3.Distance(transform.position, girl.position) <= 50)
            {
                agent.SetDestination(girl.position);                
            }

      这里有很多U3D资源U3D培训视频U3D常见问题U3D项目源码我们可以一起交流学习
0 0