快捷键
Q W E R T : to select tools , which help you better adjust your items
音效
Get and use audio from the Internet
asset store -> audio-> free -> DOWNLOAD sound fx - retro pack && Casual Game BGM
-> install your audio packages -> player->(component)audio source -> uncheck Play on awake -> add your audio to AudioClip ->check Loop
add death audio to each enemy
uncheck (play on awake)
open class enemy->get component of gameObject audio
audio.play();
add jump/hurt or other audios to your player
New a variable, which type is AudioSource, get componet , and then add audio.play() to the function you want .
SoundManager: simplify your component
create a script -> create a emptyObject -> drag your script to it -> add a audio source -> edit your script :
public AudioSource audioSource
//then drag AudioSource component to your script's vavariable on inspector
public AudioClip Jump,hurt,cherry
//then drag mp3 file to these AudioClip
public void JumpAudio(){
audioSource.Clip = Jump;
audioSource.play();
}
处理 TileSet
1. tileset->inspector:
SpritMode = Multiple
2. tileset->inspector->sprite Editor:
Slice->PixelSize:
X=Y = 16
3.Create 2D Object.TileMap.Rectangular
4.Create new TilePalette
5.Drag your tileSet into the created TilePalette
6. Uncheck choice---Flood Fill Contiguous Only
7.Choose Paint-brush
8. choose the object you want
9.Paint it to the Scene.
One Way Platform: player can jump to the platform from below
Create a 2D.tilemap ->change sorting layer to ground -> draw a platform -> add a tilemap collider,check USED BY EFFECTOR -> add component : Platform Effector 2D:check Use One Way && USE COLLIDER MASK
Add collide /增添碰撞
Add TileMap collide to your tileMap
UI层:
快捷键: ctrl +f 编辑界面
Dialog that shows you words
show Dialog when collision happened
Canvas -> ui -> panel -> set transparency -> set anchor and translation
right click panel -> text -> adjust position -> download free pixel font on the asset store.
->
add a collider on the gameobject that you want,
->
using collision to write your code:
class : onCollisionEnter2D , gameobject.SetActive
->
set gradient effect to your EnterDialog:
Create a new animation called EnterDialog ,add it to specific gameobject,
and back to your animation interface ,click red button to record -> change color -> add new frame , -> set color -> stop recording -> save -> END
图层:
Inspector->Sorting Layer & Order in layer
Sorting layer : the item position higher ,the level is lower
Order in layer : higher number means higher level in the same layer
角色:
UI
LifeBar
Canvas ->create empty in Canvas called Health bar -> create Image called border under Health bar -> drag bar.png into it -> border.Inspector : set native site, anchor : click lower right corner image without press Alt -> create image called Fill -> Fill.anchor : alt + click lower right corner (to let image scale to border)
-> health bar.Inspector : add component called slider uncheck everything. set none to every property, drag image-Fill to property : fill rect , -> add a image called heart ->
Edit your code to adjust the value of your lifeValue :
class HealthBar : Mono...{
public Slider slider ; // get health bar's slider
public void SetMaxHealth(float Max){}
public void GetDamage(float Damage){
slider.Value -=Damage;
}
}
now you can declare class HealthBar at any Script and use it .
设置角色:
设置重力&碰撞:
Set Gravity :
Inspector -> Add Component -> Rigid Body 2D -> grivity scale
Set Collide :
add componet ->add shape collide to your player -> edit collider (to adjust collider’s boundary)
Script
jump twice
use a int variable to count jump-times
获取组件信息
xx = GetComponent<T>();
Move/角色移动:
Input.GetAxis("");
Input.GetAxisRaw("");
Crouch/crawl
Movement:Crouch
code:
Crouch()->deal with the situation that player can’t stand if there is collider on its head:
!Physics2D.OverlapCircle(Point,radius,ground);
拾取物品:
添加Sprite, 为Sprite 设置动画,画面
1.添加Collider 2D , 选择 Is trigger
2.为物件设置tag = Collections
3.为角色增添代码:
public void OnTriggerEnter2D(Collider2D collision){
if(collision.tag == "Collections")
{
Destroy(collision.gameObject);
}
}
碰撞敌人,击杀
使用OnCollisionEnter2D()
代码中获取碰撞体信息
collision.gameObject.transform.position
使用位置信息来处理玩家角色行为
碰撞后播放动画再死亡
添加Animation Event即可
角色细节优化:
增加运动流畅度
选择圆形碰撞体,防止磕石头
镜头
使用更智能的镜头替代默认镜头:CinemaMachine
Window->package manager -> cinemaMachine
设置镜头边界:
背景:增添 Collide 2D , 勾选 Is Trigger
镜头: 增添 Camera Confiner ->Set Bounding Shape 2D to
background
Add Lighting effect to your Scene
make things dark
make the tilemap and other objects black
tilemap -> tilemap renderer -> material -> diffuse
Make Object or Player dark :
create a material -> set shader from standard to ui.diffuse -> drag this material to your gameObject.NOTE: if you use this method to add diffuse to your gameObject, it will disappear sometimes.
add lighting
light -> Point Light
light -> Directional Light
you can change the number of y to adjust its brightness.
Parallax
Pack your background
Create a new ScriptVariable : camera , StartPointX,StartPointY,MoveRate
translation.position = new Vector2(StartPointX + camera.position.x*MoveRate,camera.position.y);
drag your scipt to your gameObject
adjust MoveRate , generally, the closer the background is,the lower of the moverate will be.
MainMenu
to realize play and quit
Create a new Scene called Menu -> new a canvas -> new a panel called BG in Canvas -> change source image of panel 1 -> new panel called MainMenu , change its color -> right click MainMenu -> ui.Button >> - TextMeshPro - > change text to play , quit
New a Script
SceneManager.LoadScene(SceneManager.GetActiveS>>cene().buildIndex+1); Application.Quit();
Drag it to MainMenu
add your script to your button’s Onclick component ,
Realize gredient color and then text appears
Pack your text
add animation to your MainCamera panel
unclick loop
add event, which is letting text appear , to the end of your animation
Realize pause:
add a ui.button(you can add panel and set its color to make the scene more beautiful) ->
In your code:Time.timescale = 0f; // pause game ; Time.timescale = 1f; // continue game ;
Use slide bar to change your game’s audio
create a new slider on proper position -> create a Audio Mixer in file Assets -> Windows.Audio.Audio Mixer ->
choose any component called audio source -> output -> choose an Audio Mixer -> back to slider ,change max and min value to the same value of Audio Mixer
make audioMixer’s volume modifiable
AudioMixer -> Right click Inspector.Attenuation.Volume ,then choose Expose -> click Exposed parameters -> change its name if necessary
Code in your script :
using UnityEngine.Audio
public AudioMixer audioMixer
// then drag created audioMixer to AudioMixer's value on inspector
public void SetVolume(float value){
audioMixer.SetFloat("VOLUMENAME",value);
}
choose slider -> add this function to OnValueChange(single) -> choose function in Dynamic float
跨关卡操作:
保留每个关卡/场景的数据:
Assets下创建文件夹prefebs,将需要保存数据的物件拖拽到文件夹内.
EveryTime you add a component , remember to store the data in prefebs.
切换关卡
use SceneManager to change
add a empty object -> adjust its position on the botton of your background, stretch an object to the length of background -> add a collider
->
using UnityEngine.SceneManagement
-> In function OnTriggerEnter2D() : (UNNECESSARY)
Scene.Manager.LoadScene(SceneManager.GetActiveScene().name);
Set Delay
use function :
invoke("FUNCTION_NAME",(float)Time)
Close all audios when dead
GetComponent<AudioSource>().enabled = false;
Add Scenes
File -> Bulid Settings -> drag scenes to Scenes in build
-> In your Script :
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);
疑问及其解答
为什么为物件添加了刚体之后,角色碰撞后消失的代码就无效了?
OnTriggerEnter2D不行,因为加了刚体角色就进不去物体内,无法触发Trigger.
改用OnCollisionEnter2D
如何在代码里实现 Animation Event?
不要用官方给的代码尝试在Script里实现Animation Event先,没有用。用设计器来实现即可
IsTrigger对Collider的影响
设置成IsTrigger后角色可以走进Collider的里边,它使用的函数是OnIsTriggeer等等
Small Tips
press ctrl+D to duplicate a scene
eliminate gap of tilemap
way1 :set grid’s x and y to 0.99
way2 :editor -> Project Settings… -> Quality -> Anti Aliasing -> Disable