• 0.键盘事件
  • 任务一:编写菜单栏
  • 任务二:做一道单项选择题
  • 任务三:写多项选择题(多选错选不得分,少选得一半分,80分以上赏朵小红花)
  • 任务四:键盘键响应 通过敲ASDW方向键在屏幕上打出相应方向箭头
  • 任务五:基于任务四,“搓组合键” ,当按顺序WSAD(上下左右)敲击时释放技能(test:可以跳出一张图片代替技能hhh)
  • 任务六:小僵尸和老奶奶和猫咪的故事

C#数组初始化详解 - CSDN博客
http://blog.csdn.net/u010975088/article/details/45532671

正文:今天上午做了菜单栏,编写选择题,响应事件,下午做了第一个动态游戏基础的材料导入、位置移动的脚本编写。

0.键盘事件

响应事件分三种:键盘事件,鼠标事件,触摸事件
今天只介绍键盘事件:即不同的按键响应

1.按下

Input.GetKeyDown(KeyCode.W){} //W为按键,,空格键 Space 箭头(方向键)KeyCode.UpArrow
        //实战:void Update (){   if (Input.GetKeyDown(KeyCode.A))Debug.Log("1");}   //可以看见在面板console下显示响应,也就是说Debug是给开发人员test用的

2.按键抬起

 Input.GetKeyUp(KeyCode.W){}

3.长按

 Input.GetKey(KeyCode.W){frame++;//计时
}

4.按任意键继续:

input.anyKeyDown

任务一:编写菜单栏

public class NewBehaviourScript : MonoBehaviour {private int toolbarID; private string[] toolbarinfo; //矩阵?数组?private bool start;void OnGUI(){toolbarID = GUI.Toolbar(new Rect (10,10,600,30),toolbarID,toolbarinfo); //toolbar不能直接显示,需要to stringGUI.Label(new Rect(10,50,100,100),toolbarinfo[toolbarID]);}void Start () {//toolbarID = 0; //为什么不能赋初值?--meaning is wrong!toolbarinfo = new string[]{"File","Edit","Assets"}; //可以发现如果再加几个变量,在长度和大小上它们均分矩形框(即矩形框是确定的)}void Update () {   }
}

任务二:做一道单项选择题

要点1:Toggle控件(单选框)(比如益智类测试游戏)
Bool Toggle(rect,tool(确定是否被选中 因此布尔型),string)
Toggle(rect,tool(确定是否被选中 因此布尔型),img)
GUIStyle
要点2:尝试如果选择A 则将BCD置false 若选了B 则ACD置0;总之是个单选框
要点3:
GUI.changed:(只要用户有动作,则变为触)
问题1:选择定义私有还是public? 若不能被用户更改则pvivate
问题2:关于返回值??

public class NewBehaviourScript : MonoBehaviour {private bool toggle0;private bool toggle1;private bool toggle2;private bool toggle3;private bool[] ischange = new bool[]{false,false,false,false};private string info;void OnGUI(){GUI.Label(new Rect(10,10,200,50),"2+3=?");toggle0 = GUI.Toggle(new Rect(10,40,100,20),toggle0,"A 3");toggle1 = GUI.Toggle(new Rect(10,60,100,20),toggle1,"B 4");toggle2 = GUI.Toggle(new Rect(10,80,100,20),toggle2,"C 5");toggle3 = GUI.Toggle(new Rect(10,100,100,20),toggle3,"D 6");GUI.Label(new Rect(10,140,200,30),info);if (GUI.Button(new Rect (40,120,70,20),"Submit")){if(toggle2){info = "Right!";}else info = "Wrong!";}if (GUI.changed){if (toggle0 && !ischange[0]){toggle1 = false;toggle2 = false;toggle3 = false;ischange = new bool[]{true,false,false,false};}if (toggle1 && !ischange[1]){toggle0 = false;toggle2 = false;toggle3 = false;ischange = new bool[]{false,true,false,false};}if (toggle2 && !ischange[2]){toggle0 = false;toggle1 = false;toggle3 = false;ischange = new bool[]{false,false,true,false};}if (toggle3 && !ischange[3]){toggle0 = false;toggle2 = false;toggle1 = false;ischange = new bool[]{false,false,false,true};}}}void Start(){info="";}void Update () {}
}

任务三:写多项选择题(多选错选不得分,少选得一半分,80分以上赏朵小红花)

下面代码是挺笨拙的,在此基础上你还要优化的地方:
1.提交之后再显示分数(而现在是一开始就可见)
2.用循环或者什么的减少代码量

using UnityEngine;
using System.Collections;public class select : MonoBehaviour {private bool toggle0;private bool toggle1;private bool toggle2;private bool toggle3;private bool toggle4;private bool toggle5;private bool toggle6;private bool toggle7;private bool toggle8;private bool toggle9;private bool toggle10;private bool toggle11;private bool[] ischange = new bool[]{false,false,false,false};private bool[] ischange1 = new bool[]{false,false,false,false};private int scores;public Texture img;public Texture img0;void OnGUI(){GUIStyle mystyle = new GUIStyle ();mystyle.fontSize = 20;GUI.Label(new Rect(370,160,100,130),img0);GUI.Label(new Rect(180,230,150,20),"Your test score is: "+scores,mystyle);GUI.Label(new Rect(10,10,800,20),"这是三道小题,1.2题为单选30分/道,3题为多选,全对得40分,少答得20分,多答错答无分,总分100");GUI.Label(new Rect(10,40,200,50),"(1)以下哪个为素数?");toggle0 = GUI.Toggle(new Rect(50,70,100,20),toggle0,"A 10");toggle1 = GUI.Toggle(new Rect(50,90,100,20),toggle1,"B 8");toggle2 = GUI.Toggle(new Rect(50,110,100,20),toggle2,"C 3"); //toggle2 is Truetoggle3 = GUI.Toggle(new Rect(50,130,100,20),toggle3,"D 4");GUI.Label(new Rect(180,40,200,50),"(2)以下哪个为小数?");toggle4 = GUI.Toggle(new Rect(220,70,100,20),toggle4,"A 6.111"); //toggle4 is Truetoggle5 = GUI.Toggle(new Rect(220,90,100,20),toggle5,"B 5");toggle6 = GUI.Toggle(new Rect(220,110,100,20),toggle6,"C 4");toggle7 = GUI.Toggle(new Rect(220,130,100,20),toggle7,"D 3");GUI.Label(new Rect(350,40,200,50),"(3) 以下哪些为奇数?");toggle8 = GUI.Toggle(new Rect(390,70,100,20),toggle8,"A 1");//toggle8 is Truetoggle9 = GUI.Toggle(new Rect(390,90,100,20),toggle9,"B 3");//toggle9 is Truetoggle10 = GUI.Toggle(new Rect(390,110,100,20),toggle10,"C 8");toggle11 = GUI.Toggle(new Rect(390,130,100,20),toggle11,"D 10");if (GUI.Button(new Rect (220,180,100,20),"Submit")){if(toggle2)scores += 30;if(toggle4)scores += 30;if(toggle10 || toggle11)scores = scores + 0;else if (toggle8 && toggle9)scores +=40;elsescores +=20;}if (scores > 80)img0 = img;if (GUI.changed){if (toggle0 && !ischange[0]){toggle1 = false;toggle2 = false;toggle3 = false;ischange = new bool[]{true,false,false,false};}if (toggle1 && !ischange[1]){toggle0 = false;toggle2 = false;toggle3 = false;ischange = new bool[]{false,true,false,false};}if (toggle2 && !ischange[2])//True{toggle0 = false;toggle1 = false;toggle3 = false;ischange = new bool[]{false,false,true,false};}if (toggle3 && !ischange[3]){toggle0 = false;toggle2 = false;toggle1 = false;ischange = new bool[]{false,false,false,true};}if (toggle4 && !ischange1[0])//True{toggle5 = false;toggle6 = false;toggle7 = false;ischange1 = new bool[]{true,false,false,false};}if (toggle5 && !ischange1[1]){toggle4 = false;toggle6 = false;toggle7 = false;ischange1 = new bool[]{false,true,false,false};}if (toggle6 && !ischange1[2]){toggle4 = false;toggle5 = false;toggle7 = false;ischange1 = new bool[]{false,false,true,false};}if (toggle7 && !ischange1[3]){toggle4 = false;toggle5 = false;toggle6 = false;ischange1 = new bool[]{false,false,false,true};}}}// Use this for initializationvoid Start(){scores = 0;}// Update is called once per framevoid Update () {}
}

任务四:键盘键响应 通过敲ASDW方向键在屏幕上打出相应方向箭头

要点一:是否需要OnGUI? 哪些内容才是给用户看到的?

问:unity中,一些行为代码放在void Start或void Update中,start和update这两个有什么区别或作用?
答:Start可以做一些初始化的事情,Update是循环,每帧都会调用。请先学习一下Unity基础吧。

要点二:既然按键时不给用户看到,自己编程过程中如何test?

//就叫它箭头覆盖型吧..因为下个任务是每按一次箭头改变位置 即多个箭头连续全部显示出来
public class NewBehaviourScript1 : MonoBehaviour {public Texture imgUp;public Texture imgDown;public Texture imgLeft;public Texture imgRight;public Texture tempimage;public const int KEY_UP = 1;public const int KEY_DOWN = 2;public const int KEY_LEFT = 3;public const int KEY_RIGHT = 4;int keyid;void OnGUI(){Texture tempimage = null;  //可注释掉,只是增强代码易读性switch (keyid){case KEY_UP:tempimage = imgUp;break;case KEY_DOWN:tempimage= imgDown;break;case KEY_LEFT:tempimage= imgLeft;break;case KEY_RIGHT:tempimage= imgRight;break;}if(tempimage != null)GUILayout.Label(tempimage);}void Start () {}void Update () {if (Input.GetKeyDown(KeyCode.A))keyid = KEY_LEFT;if (Input.GetKeyDown(KeyCode.S))keyid = KEY_DOWN;if (Input.GetKeyDown(KeyCode.D))keyid = KEY_RIGHT;if (Input.GetKeyDown(KeyCode.W))keyid = KEY_UP;}
}

任务五:基于任务四,“搓组合键” ,当按顺序WSAD(上下左右)敲击时释放技能(test:可以跳出一张图片代替技能hhh)


public class NewBehaviourScript1 : MonoBehaviour {public Texture imgUp;public Texture imgDown;public Texture imgLeft;public Texture imgRight;public Texture tempimage;public Texture imageskill;public const int KEY_UP = 1;public const int KEY_DOWN = 2;public const int KEY_LEFT = 3;public const int KEY_RIGHT = 4;int keyid;bool isSuccess;bool isskill;int result = 0;void OnGUI(){Texture tempimage = null;  //可注if(!isSuccess){switch (keyid){case KEY_UP:tempimage = imgUp;break;case KEY_DOWN:tempimage= imgDown;break;case KEY_LEFT:tempimage= imgLeft;break;case KEY_RIGHT:tempimage= imgRight;break;}if(Input.GetKeyDown(KeyCode.Space))isSuccess = true;if(tempimage != null)GUILayout.Label(tempimage);}else {Debug.Log(result);if(result == 1234)GUILayout.Label(imageskill);}}void Start () {isSuccess = false;}void Update () {if (Input.GetKeyDown(KeyCode.A)){keyid = KEY_LEFT;result = result*10+keyid;//前移}if (Input.GetKeyDown(KeyCode.S)){keyid = KEY_DOWN;result = result*10+keyid;//!! 改变位置}if (Input.GetKeyDown(KeyCode.D)){keyid = KEY_RIGHT;result = result*10+keyid;}if (Input.GetKeyDown(KeyCode.W)){keyid = KEY_UP;result = result*10+keyid;}}
}
--------------
public class NewBehaviourScript1 : MonoBehaviour {public Texture imgUp;public Texture imgDown;public Texture imgLeft;public Texture imgRight;public Texture tempimage;public Texture imageskill;public const int KEY_UP = 1;public const int KEY_DOWN = 2;public const int KEY_LEFT = 3;public const int KEY_RIGHT = 4;int keyid;bool isSuccess;bool isskill;int result = 0;void OnGUI(){Texture tempimage = null;  //可注释掉if(!isSuccess){switch (keyid){case KEY_UP:tempimage = imgUp;break;case KEY_DOWN:tempimage= imgDown;break;case KEY_LEFT:tempimage= imgLeft;break;case KEY_RIGHT:tempimage= imgRight;break;}if(Input.GetKeyDown(KeyCode.Space))isSuccess = true;if(tempimage != null)GUILayout.Label(tempimage);}else {Debug.Log(result); //test,一般可删除if(result == 1234) //!GUILayout.Label(imageskill);}}void Start () {isSuccess = false;}void Update () {if (Input.GetKeyDown(KeyCode.A)){keyid = KEY_LEFT;result = result*10+keyid;//前移}if (Input.GetKeyDown(KeyCode.S)){keyid = KEY_DOWN;result = result*10+keyid;}if (Input.GetKeyDown(KeyCode.D)){keyid = KEY_RIGHT;result = result*10+keyid;}if (Input.GetKeyDown(KeyCode.W)){keyid = KEY_UP;result = result*10+keyid;}}
}

任务六:小僵尸和老奶奶和猫咪的故事

要点一:导入素材
要点二:关于尺寸:unity里一个特点是设计后的尺寸在实际效果中不会更改,比如一开始在game视图里将尺寸为iphone尺寸(看好啦尺寸在这里设置),那么实际中在其他手机播放 可能出现显示不完全的情况,而无法更改。
要点三:一个长图(连续动作)的处理,比如下图:
需要切割,可选自动/手动-按网格或者其他
要点四:当后面导入了很大张的图,发现素材会相互覆盖,怎么处理?
因为它们都在默认图层。需要增加新图层,把它们放到各自的新图层里。

要点五:脚本编写。这个就有点没看懂了以下。。

//由四幅图连接起的小僵尸原地走动/注意除了要拖入纹理,还要在主界面右侧栏赋速度。
using UnityEngine;
using System.Collections;
public class zombie : MonoBehaviour {public Sprite[] sprites;public float framesspeed;private SpriteRenderer spriterender; //SpriteRenderer是这种人物功能实现的必要东西// Use this for initializationvoid Start () {spriterender = GetComponent<SpriteRenderer>();}// Update is called once per framevoid Update () {//动画在的地方int index =(int) (Time.timeSinceLevelLoad * framesspeed);    //关于时间index = index % sprites.Length; //求余spriterender.sprite = sprites [index]; //zombie小僵尸}
}//接着新建一个脚本文件,实现小僵尸位置的移动
using UnityEngine;
using System.Collections;public class weizhi : MonoBehaviour {public float movespeed; // this is unitsprivate Vector3 moveDirection;void Start () {}void Update () {Vector3 currentPostion = transform.position;if(Input.GetButton("Fire1")) //本演示采取鼠标控制,课下练习自己改为方向键操控{   Vector3 moveToward = Camera.main.ScreenToWorldPoint(Input.mousePosition);//主摄像机视角moveDirection = moveToward - currentPostion; //moveDirection.z = 0;  //becase of 2DmoveDirection.Normalize();  //all move}Vector3 targetPosition = currentPostion + moveDirection * movespeed;transform.position = Vector3.Lerp(currentPostion,targetPosition,Time.deltaTime); //Lerp是差值。让小僵尸在某处停顿一下 (是么?)}

制作菜单栏、选择题、搓组合键、小僵尸-unity3D游戏开发入门相关推荐

  1. Unity3D游戏开发入门学习笔记

    学习内容概要: 软件面板功能.材质球.预制体.摄像机.灯光.鼠标键盘输入.组件.刚体.碰撞体.PC端游戏打包发布.... 第1课:课程介绍与Unity3D环境搭建 1.Unity3D,一个游戏开发引擎 ...

  2. C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)...

    一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...

  3. Unity3D游戏开发-宣雨松读书摘要(2015-4-17 18:36)

    本书基于Unity3.5编写,通过丰富的游戏实例,以JavaScript与C#两种语言介绍Unity开发. Unity3D游戏开发-宣雨松 序 它支持JavaScript.C#.Boo三种脚本语言 ...

  4. 爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)

    基础知识 经过多年的发展,Unity编辑器已经越来越完善,使用起来也相当方便.快捷.Unity秉承"所见即所得"的开发原理,将编辑器与游戏引擎融合在了一起.传统游戏引擎几乎没有任何 ...

  5. Unity3D游戏开发之仿仙剑奇侠传一2D游戏 (一)

    今天要和大家分享的是基于Unity3D开发2D游戏,博主一直钟爱于国产武侠RPG,这个我在开始写Unity3D游戏开发系列文章的时候就已经说过了,所以我们今天要做的就是利用Unity3D来实现在2D游 ...

  6. Unity3D游戏开发介绍

    Unity3D游戏开发介绍 Unity3D Unity是实时3D互动内容创作和运营平台.包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助Unity将创意变成现实. Unity平台提供一整 ...

  7. Unity3D游戏开发之网络游戏服务器架构设计(如何做一名主程)

    下面我们开始今天的Unity3D游戏开发技能. 初期学习目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天给大家讲一下如何做一个好 ...

  8. 2019该怎么学unity3D游戏开发?

    Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.怎么学 ...

  9. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

最新文章

  1. 在idea中移除子模块Moudle后重新导入
  2. uva 401.Palindromes
  3. mysql开发规范最新版本_MYSQL 开发规范
  4. 新手求助:大神们帮帮我,关于在ViewPage中添加GridView的问题
  5. 【Python实践-1】求一元二次方程的两个解
  6. twitter 监控登陆活动
  7. java 开发 jvm_Java开发人员应了解的JVM流行语
  8. Linux系统文件夹权限475,linux系统中文件的特殊权限
  9. python之路day04--列表的增删改查,嵌套、元组的嵌套、range、for循环嵌套
  10. python编程入门必备知识-python基础教程#菜鸟也能看懂的超简单入门必备知识
  11. 关于计算机实验的英语作文,关于实验的英语作文
  12. CocosCreator简单小鸟穿越隧道小游戏
  13. 1032. Sharing (25)
  14. IT要发掘有价值应用
  15. 【Ubuntu】MTK刷机工具MT8167版本打不开,缺少libpng12-0的解决方法
  16. Vue源码学习1--获取源码和查找入口文件
  17. 8、16、32-BIT系列单片机区别与特点
  18. Making Startup Magic
  19. CSV文件批量合并/转XLSX(无需任何软件,傻瓜式操作)
  20. 详解GAN代码之搭建并详解CGAN代码

热门文章

  1. 什么叫做计算机云,什么是云电脑?
  2. Keras:An operation has `None` for gradient. Please make sure that all of your ops have a gradient
  3. CentOS 6.5 安装OSA监控精灵监控主机
  4. 未来最高明的数据恢复师
  5. iPhone8来了:听取非议一片,国产品牌的机会来了?
  6. ORA-12560 TNS 协议适配器错误问题的解决方法
  7. 从左手坐标系到右手坐标系的变换
  8. 西安三本哪个计算机学校最好,西安文科最强的三本是哪个?
  9. ABB ACS510变频器PID应用调试
  10. 错误代码666020_Steam - Shark Dating Simulator XL