泰课在线夜猫的贪食蛇

http://www.taikr.com/my/course/870

这个项目用到了EasyTouch3和NGUI3.6制作,版本都比较老,但是我换成新的发现EasyTouch5没有一些方法或者方法的使用变了形式,NGUI还没有尝试换新的。

第一步,导入NGUI插件和商城、游戏资源图集。

第二步,登陆界面(背景、游戏文字,开始按钮),开始游戏跳转

image

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class LoadScene : MonoBehaviour {

   
     public void LoadScene002()//加载002场景,在001的开始游戏中调用
     {
         SceneManager.LoadScene("002");
     } 
}

第三步,游戏场景,界面搭建

image

第四步,游戏教程功能的实现,用到了一个数组存储

image

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {
     public GameObject RulePanel;

    public void OpenRuleClick()//打开帮助面板
     {
         RulePanel.SetActive(true);
     }
}

using UnityEngine;
using System.Collections;

public class Rule : MonoBehaviour {

    public GameObject RulePanel;//规则面板
     public GameObject[] HelpPictures;//用一个数组存储帮助图片
     private int index = 0;

    public void LeftClick()//左图按钮
     {
         if (index > 0)
         {
             index--;
             ShowPicture();
         }
     }
     public void RightClick()//右图按钮
     {
         if(index< HelpPictures.Length)
         {
             index++;
             ShowPicture();
         }
     }

    void ShowPicture()//显示图片的函数,在这里写而不再update里面写可以节省资源
     {
         switch (index)
         {
             case 0:
                 HelpPictures[0].SetActive(true);
                 HelpPictures[1].SetActive(false);
                 HelpPictures[2].SetActive(false);
                 break;
             case 1:
                 HelpPictures[0].SetActive(false);
                 HelpPictures[1].SetActive(true);
                 HelpPictures[2].SetActive(false);
                 break;
             case 2:
                 HelpPictures[0].SetActive(false);
                 HelpPictures[1].SetActive(false);
                 HelpPictures[2].SetActive(true);
                 break;
             default:
                 break;
         }
     }

    public void CloseRulePanel()//关闭规则面板
     {
         RulePanel.SetActive(false);
     }
}

第五步,皮肤商店功能实现

image

using UnityEngine;
using System.Collections;

public class SkinMaker : MonoBehaviour {

    public Sprite[] spritePicture;//精灵数组
     public GameObject skin1Prefab;//预设

    void Awake () {
         for (int i = 0; i < spritePicture.Length; i++)
         {
             GameObject temp = Instantiate(skin1Prefab) as GameObject;//用temp存储skin1Prefab
             temp.transform.parent = transform;//把生成的预制体的位置设置成skin1Prefab的位置
             temp.transform.localScale = Vector3.one;//预制体被莫名增大到300,把它的scale变为1
             //把对应的精灵图片复制到预制体的图片上面
             temp.GetComponent<UISprite>().spriteName = spritePicture[i].name;
             //由于精灵图片的UIButton有一个默认值,进入之后会显示Prefab的精灵图片,所以要改默认值
             temp.GetComponent<UIButton>().normalSprite = spritePicture[i].name;
         }
         Destroy(gameObject.GetComponent<SkinMaker>());//生成结束,销毁组件,节省性能
     }

}

第六步,完善顶部的Lable显示,和场景功能跳转

image

挂在Skin1上面,生成的时候有这个脚本。(//用斜杠/来区分层级)

using UnityEngine;
using System.Collections;

public class CheckSkinName : MonoBehaviour {
    
     public void OnClick()
     {
         string str=GetComponent<UISprite>().spriteName;
         //用斜杠/来区分层级
         GameObject.Find("SkinPanel/TopLabel/PictureName").GetComponent<UILabel>().text = str;
     }
}

场景功能跳转

using UnityEngine;
using System.Collections;

public class GameManager002 : MonoBehaviour {

    public GameObject RulePanel;
     public GameObject MainPanel;
     public GameObject SkinPanel;

    public void OpenRulePanel()//打开教程面板
     {
         RulePanel.SetActive(true);
     }

    public void OpenSkinPanel()//打开皮肤面板
     {
         MainPanel.SetActive(false);
         SkinPanel.SetActive(true);
     }

    public void SkinPanelBackMain()//皮肤面板返回主界面
     {
         MainPanel.SetActive(true);
         SkinPanel.SetActive(false);
     }
}

 

第七步,游戏主场景,用EasyTouch实现,虚拟摇杆与加速

image

 

第八步,地图食物的随机生成,制作食物预设,生成的食物放在NodeManager中

image

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

public class Node : MonoBehaviour {

    private Vector3 startPoint, EndPoint;//记录开始坐标和结束坐标

    public GameObject[] NodeSprites;//食物的预设放在数组里面
     public int NodeCount;//生成的食物个数

    private void Awake()
     {
         startPoint =new Vector3(-1990f, -1120f, 0);
         EndPoint = new Vector3(1990f, 1111f, 0);

    }

    private void Start()
     {
         CreatNode();
     }

    private void CreatNode()
     {
         for (int i = 0; i < NodeCount; i++)
         {
             //从0到NodeSprites.Length随机生成预设
             GameObject temp = Instantiate (NodeSprites[Random.Range(0, NodeSprites.Length)]) as GameObject;
             Vector3 v = new Vector3(Random.Range(startPoint.x, EndPoint.x), Random.Range(startPoint.y, EndPoint.y), 0);
             temp.transform.parent = transform;
             temp.transform.position = v;
         }
     }
}

第九步,控制蛇头移动,(弧度与角度的换算)

弧度=角度乘以π后再除以180
角度=弧度除以π再乘以180

(控制蛇头移动的代码有点绕,要多看看)

image

image

using UnityEngine;
using System.Collections;

public class SnackCtroller : MonoBehaviour {

    public EasyJoystick joystick;

    public float Speed;
    
     void Update () {
         Vector3 temp = joystick.JoystickAxis;
         transform.position += temp * Speed * Time.deltaTime;
         if(GetRotation(temp)!=Vector3.zero)
         {
             transform.rotation = Quaternion.Euler(GetRotation(temp));//旋转的角度
         }
     }
     private Vector3 GetRotation(Vector3 temp)
     {
         float angle;//角度
         Vector3 v = Vector3.zero;
         //角度等于弧度乘以180除以π,这个弧度还要根据在第几象限来做判断
         angle =Mathf.Acos(temp.x / Mathf.Sqrt(temp.x * temp.x + temp.y * temp.y)) * 180 / Mathf.PI;
         if(Mathf.Acos(temp.x / Mathf.Sqrt(temp.x * temp.x + temp.y * temp.y))!=0)
         {
             if (angle > 0 && angle <= 90)//一三象限
             {
                 if (temp.y > 0)//第一象限
                 {
                     v = new Vector3(0, 0, angle + 90f);
                 }
                 else//第三象限
                 {
                     v = new Vector3(0, 0, -angle + 90f);
                 }
             }
             else if (angle > 90 && angle <= 180f)//二四象限
             {
                 if (temp.y > 0)//第二象限
                 {
                     v = new Vector3(0, 0, angle + 90f);
                 }
                 else//第四象限
                 {
                     v = new Vector3(0, 0, -angle + 90f);
                 }
             }
         }
         if (v == Vector3.zero)
         {
             return Vector3.zero;
         }
         else
         {
             return v;
         }
     }
}

第十步,摄像机的智能跟随、加速按钮和左上角的文字也要跟随,因为这个是NGUI.

image

using UnityEngine;
using System.Collections;

public class CameraFollow : MonoBehaviour {

    public GameObject SnackHead;

    private void LateUpdate()
     {
         Vector3 temp = SnackHead.transform.position;
         //Vector3.MoveTowards(this.transform.position, temp, 1000f);
         transform.position= Vector3.Lerp(transform.position, temp, 1f);
     }

}

第十一步,蛇的身子这部分

转载于:https://www.cnblogs.com/kerven/p/8184270.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目前最火、最具发展前景的专业游戏引擎 Unity 3D是什么?Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。 Unity3D的PC插件安装量达到2 亿 Unity全球注册用户已经达到200万,每月 Unity编辑器活跃开发者数量达到40万, Unity的PC插件安装量达到2亿! 未来游戏市场普遍呈现3D化 以手游市场为例,3D游戏占比达到80%,虽然现在还有不少2D游戏,但随着终端设备性能的提升和客户的需求增加,游戏市场最终会进入全面的3D化时代。Unity3D课程可以使你直接进入3D游戏开发领域,成为就业市场的宠儿。同时Unity3D也推出了开发2D游戏的插件,可以使我们从现在到未来都立于不败之地。 Unity 3D为什么这么火? ---真正的跨平台目前各个平台的游戏开发几乎没有通用性,开发iPhone上的游戏需要学习Objective C,开发Android上的游戏大多用Java,开发Windows Phone上的游戏用C#,……。如何只学习一种语言就能够开发出跨越多个平台的游戏呢?Unity3D使用底层Mono技术实现了真正的跨平台,而Mono是基于.NET框架开发的。他使我们使用一种语言就可以开发出基于各种平台的游戏,包括手机游戏(iPhone、Android、Windows Phone)、PC(Windows、Mac、Linux)、网页游戏(基于各种主流浏览器)、游戏机专用游戏(Wii、Xbox360、PS3) 现在Unity 3D的攻城狮的月薪基本上都在15000元以上,这是基础班,以后我再发精英班,学完后希望大家都可以找到年薪20万的工作。 这套是比较完整的课程,并且有实例课程,并且附带源码 并非其他只有基础的课程,没有实例! C#语言基础课程课时目录: 课时1 C#基础概述 课时2 创建一个C#文件 课时3 编译运行和控制台 课时4 创建你的第一个应用程序 课时5 变量 课时6 表达式 课时7 枚举 课时8 条件判断语句 课时9 for循环语句 课时10 while循环语句 课时11 函数 课时12 事件 课时13 C#进阶 课时14 类的概念 课时15 继承 课时16 MonoBehaviour 课时17 方法重写Overriding 课时18 方法重载Overloading 课时19 代理Delegates 课时20 单例设计模式Singletons 基础入门之进入Unity的世界 课时1 Unity介绍 课时2 Unity下载和安装 课时3 Unity 破解 课时4 Unity 什么是工程 课时5 Unity 学习过程介绍 课时6 Unity中的五种视图 课时7 Unity中的资源 课时8 Unity中的游戏物体 课时9 Unity中的组件Component 课时10 Unity中的场景Scene 课时11 场景中控制工具的使用 课时12 Unity中的本地坐标和世界坐标系 课时13 场景视图中的操作 课时14 向量 课时15 小结 基础入门之Roll-a-Ball滚动小球 课时1 Roll-A-Ball游戏介绍 课时2 了解基本集合体 课时3 创建游戏环境 课时4 给世界添加光 课时5 学习相机Camera 课时6 创建游戏主角 课时7 Unity中的刚体和碰撞器 课时8 Unity中的脚本编写 课时9 控制主角的移动 课时10 控制相机跟随 课时11 Transform组件 课时12 创建游戏中的食物 课时13 认识Prefab,完善场景中的食物 课时14 认识触发器 课时15 添加捡起食物功能 课时16 日志输出和错误调试 unity经典入门课程之C#基础实例讲解(打砖块实例) 课时1 开发工具Visual Studio Tools For Unity安装和介绍 课时2 项目效果预览,创建项目和第一个C#脚本 课时3 脚本挂载,控制台使用,变量声明和赋值,在舞台添加多个对象,使用脚本初始化对象 课时4 实例化方法高级应用,使用for循环语句创建多个砖块 课时5 课下作业-添加多行砖块 课时6 组件机制,刚体介绍,类型转换,函数返回值,发射小球功能实现 课时7 条件判断语句,鼠标按下事件处理,获取水平和垂直改变数值,改变对象位置,自动销毁对象 课时8 课程小结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值