Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)


0x00 概要

使用Unity创建好一个项目之后,我们首先搭建起一个2D游戏的基本框架,再基于这个框架不断添加自己的元素。
一个主流2D游戏的要素:

  1. 玩家通过键盘,鼠标对游戏角色(Sprite)进行控制
  2. 游戏角色要能够根据玩家的输入做出不同行为
  3. 当游戏场面达到某种状态时能够触发特定的事件(比如捡起道具,击杀敌人后获得奖励)

0x01 在Unity中添加游戏要素

  • 创建Sprite

Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第1张图片

2D模式下,将图片直接拖入Assets中就会自动变成Sprite,再拖入到场景中:
Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第2张图片
就算创建完成了,这里黑色图片作为地面(Ground)。tank会被遮挡,选中tank,右侧的属性界面,把Order in Layer的值设置为1,这个属性描述了sprite在哪个图层被渲染,默认都是0,数字越高表示越靠顶部。

Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第3张图片

  • 赋予Sprite物理属性

选中一个Sprite,点击Componet -> Add… 或者直接按快捷键Ctrl+Shift+A
Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第4张图片
在出现的菜单中选择Physics 2D
Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第5张图片
然后根据需要选择物理类型,这里我选择了常用的Rigidbody 2D ,2D刚体
Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第6张图片
sprite的属性栏就会出现
Unity入门篇 : Unity2D 基本游戏框架(用户控制,角色行为,事件)_第7张图片
然后就可以设置他的质量(Mass),线性阻力(Linear Drag),角阻力(Angular Drag),重力大小(Gravity Scale)等物理属性,勾选Simulated,Sprite的物理属性就会生效并且能够和其他2D刚体发生相互作用。


0x02 C# Scripts

在Unity中我们能够通过相当简便的鼠标点击来快速构建出我们需要的元素,接下来就需要用C#脚本编写游戏逻辑来使这些本来彼此孤立的元素连接起来,为游戏注入灵魂。
新建一个C# Script,写好之后拖到对应Sprite的属性栏里即可。
在这里插入图片描述

  • 键盘输入

最简单的移动:

   float dx = Input.GetAxis("Horizontal");
   float dy = Input.GetAxis("Vertical");

这两行可以读取水平和垂直的按键(↑↓←→或WASD都可以),然后保存为水平和垂直的单位分量 , 数值在(-1,0,1)中取
或者使用Input.GetKey来获取任意某个按键是否被按:

 if(Input.GetKeyDown(KeyCode.Escape))
 	Application.Quit();

这个实例实现了按下ESC退出游戏的效果
其中Input.GetKeyDown() 在指定的按键按下时返回true,一般游戏中获取按键用这个函数
Input.GetKey() 指定按键处于按下状态时返回true需要持续监测的按键可以用他,比如实现按住一个键蓄力。
**Input.GetKeyUp()**指定按键弹起时返回false
以上三个函数都应该在 Update 函数中调用,每一帧获取按键状态

Event.KeyCode类中的成员变量有:

A  ‘a’键
B  ‘b’键
C  ‘c’键
D  ‘d’键
E  ‘e’键
F  ‘f’键
G  ‘g’键
H  ‘h’键
I  ‘i’键
J  ‘j’键
K  ‘k’键
L  ‘l’键
M  ‘m’键
N  ‘n’键
O  ‘o’键
P  ‘p’键
Q  ‘q’键
R  ‘r’键
S  ‘s’键
T  ‘t’键
U  ‘u’键
V  ‘v’键
W  ‘w’键
X  ‘x’键
Y  ‘y’键
Z  ‘z’键
Backspace 退格键
Delete  Delete键
TabTab键
Clear  Clear键
Return  回车键
Pause  暂停键
Escape  ESC键
Space  空格键
Keypad0  小键盘0
Keypad1  小键盘1
Keypad2  小键盘2
Keypad3  小键盘3
Keypad4  小键盘4
Keypad5  小键盘5
Keypad6  小键盘6
Keypad7  小键盘7
Keypad8  小键盘8
Keypad9  小键盘9
KeypadPeriod 小键盘“.”
KeypadDivide 小键盘“/”
KeypadMultiply小键盘“*”
KeypadMinus 小键盘“-”
KeypadPlus 小键盘“+”
KeypadEnter 小键盘“Enter”
KeypadEquals 小键盘“=”
UpArrow  方向键上
DownArrow 方向键下
RightArrow 方向键右
LeftArrow 方向键左
Insert  Insert键
Home  Home键
EndEnd键
PageUp  PageUp键
PageDown PageDown键
F1功能键F1
F2功能键F2
F3功能键F3
F4功能键F4
F5功能键F5
F6功能键F6
F7功能键F7
F8  功能键F8
F9  功能键F9
F10  功能键F10
F11  功能键F11
F12  功能键F12
F13  功能键F13
F14  功能键F14
F15  功能键F15
Alpha0 按键0
Alpha1 按键1
Alpha2 按键2
Alpha3 按键3
Alpha4 按键4
Alpha5 按键5
Alpha6 按键6
Alpha7 按键7
Alpha8 按键7
Alpha9 按键9
Exclaim ‘!’键
DoubleQuote双引号键
Hash Hash键
Dollar ‘$’键
AmpersandAmpersand键
Quote 单引号键
LeftParen 左括号键
RightParen右括号键
Asterisk ‘ * ’键
Plus  ‘ + ’键
Comma ‘ , ’键
Minus ‘ - ’键
Period ‘ . ’键
Slash ‘ / ’键
Colon ‘ : ’键
Semicolon‘ ; ’键
Less  ‘ < ‘键
Equals ‘ = ‘键
Greater ‘ > ‘键
Question ‘ ? ’键
  At  ‘@’键
LeftBracket‘ [ ‘键
Backslash ‘ \ ’键
RightBracket‘ ] ’键
Caret ‘ ^ ’键
Underscore‘ _ ’键
BackQuote‘ ` ’键
Numlock Numlock键
Capslock 大小写锁定键
ScrollLockScroll Lock键
RightShift 右上档键
LeftShift 左上档键
RightControl右Ctrl键
LeftControl左Ctrl键
RightAlt 右Alt键
LeftAlt 左Alt键
LeftApple 左Apple键
LeftWindows左Windows键
RightApple右Apple键
RightWindows右Windows键
AltGr Alt Gr键
Help  Help键
Print  Print键
SysReq Sys Req键
Break Break键
Mouse0 鼠标左键
Mouse1  鼠标右键
Mouse2 鼠标中键
Mouse3 鼠标第3个按键
Mouse4 鼠标第4个按键
Mouse5  鼠标第5个按键
Mouse6  鼠标第6个按键
JoystickButton0	手柄按键0
JoystickButton1	手柄按键1
JoystickButton2	手柄按键2
JoystickButton3	手柄按键3
JoystickButton4	手柄按键4
JoystickButton5	手柄按键5
JoystickButton6	手柄按键6
JoystickButton7	手柄按键7
JoystickButton8	手柄按键8
JoystickButton9	手柄按键9
JoystickButton10	手柄按键10
JoystickButton11	手柄按键11
JoystickButton12	手柄按键12
JoystickButton13	手柄按键13
JoystickButton14	手柄按键14
JoystickButton15	手柄按键15
JoystickButton16	手柄按键16
JoystickButton17	手柄按键17
JoystickButton18	手柄按键18
JoystickButton19	手柄按键19
Joystick1Button0	第一个手柄按键0
Joystick1Button1	第一个手柄按键1
Joystick1Button2	第一个手柄按键2
Joystick1Button3	第一个手柄按键3
Joystick1Button4	第一个手柄按键4
Joystick1Button5	第一个手柄按键5
Joystick1Button6	第一个手柄按键6
Joystick1Button7	第一个手柄按键7
Joystick1Button8	第一个手柄按键8
Joystick1Button9	第一个手柄按键9 
Joystick1Button10	第一个手柄按键10
Joystick1Button11	第一个手柄按键11
Joystick1Button12	第一个手柄按键12
Joystick1Button13	第一个手柄按键13
Joystick1Button14	第一个手柄按键14
Joystick1Button15	第一个手柄按键15
Joystick1Button16	第一个手柄按键16
Joystick1Button17	第一个手柄按键17
Joystick1Button18	第一个手柄按键18
Joystick1Button19	第一个手柄按键19
Joystick2Button0	第二个手柄按键0
Joystick2Button1	第二个手柄按键1
Joystick2Button2	第二个手柄按键2
Joystick2Button3	第二个手柄按键3
Joystick2Button4	第二个手柄按键4
Joystick2Button5	第二个手柄按键5
Joystick2Button6	第二个手柄按键6
Joystick2Button7	第二个手柄按键7
Joystick2Button8	第二个手柄按键8
Joystick2Button9	第二个手柄按键9
Joystick2Button10	第二个手柄按键10
Joystick2Button11	第二个手柄按键11
Joystick2Button12	第二个手柄按键12
Joystick2Button13	第二个手柄按键13
Joystick2Button14	第二个手柄按键14
Joystick2Button15	第二个手柄按键15
Joystick2Button16	第二个手柄按键16
Joystick2Button17	第二个手柄按键17
Joystick2Button18	第二个手柄按键18
Joystick2Button19	第二个手柄按键19
Joystick3Button0	第三个手柄按键0
Joystick3Button1	第三个手柄按键1
Joystick3Button2	第三个手柄按键2
Joystick3Button3	第三个手柄按键3
Joystick3Button4	第三个手柄按键4
Joystick3Button5	第三个手柄按键5
Joystick3Button6	第三个手柄按键6
Joystick3Button7	第三个手柄按键7
Joystick3Button8	第三个手柄按键8
Joystick3Button9	第三个手柄按键9
Joystick3Button10	第三个手柄按键10
Joystick3Button11	第三个手柄按键11
Joystick3Button12	第三个手柄按键12
Joystick3Button13	第三个手柄按键13
Joystick3Button14	第三个手柄按键14
Joystick3Button15	第三个手柄按键15
Joystick3Button16	第三个手柄按键16
Joystick3Button17	第三个手柄按键17
Joystick3Button18	第三个手柄按键18
Joystick3Button19	第三个手柄按键19

基本涵盖了常见外设的所有按键。

  • 鼠标点击

 if (Input.GetMouseButton(0)) Fire();

点击鼠标左键,就调用Fire函数
0: 左键
1: 右键
2: 滚轮键
3-6定义了鼠标上其他的一些键,但并不是所有的鼠标都有这些键。

  • 获取光标的位置

识别到鼠标的点击后,往往还需要获取此时光标的位置,读取Input.mousePosition的值可以以Vector3的形式获得鼠标的当前位置.
下面的Update中的片段实现了点击鼠标左键时让Sprite朝向鼠标点击方向

if (Input.GetMouseButton(0))
{
     
  Vector3 ms = Input.mousePosition;
  ms = Camera.main.ScreenToWorldPoint(ms);  //获取鼠标相对位置    
  Vector3 gunPos = this.transform.position; //对象的位置
  float fireangle;                          //转动角度              
  Vector2 targetDir = ms - gunPos;          //计算鼠标位置与对象位置之间的角度
  fireangle = Vector2.Angle(targetDir, Vector3.up);
  if (ms.x > gunPos.x)fireangle = -fireangle;
  this.transform.eulerAngles = new Vector3(0, 0, fireangle);
 }

你可能感兴趣的:(游戏)