素材下载与添加

添加瓦片地图(Tilemap)

  1. Hierarchy界面添加Tilemap
  2. 打开Tile Paletee界面画地图(Window–2D–Tile Paletee)
  3. 切割地图素材: Spite Mode选择Multipel;点击Sprite Editor,选择slice模式为Grid By Cell Size,像素大小选择16(每个格子像素数);最后拖拽到Tile Paletee中;

添加第一个角色

直接拖拽进Scene或者,Hierarchy创建Sprite,将角色素材拖动到Sprite Renderer–Sprite;
添加刚体Rigidbody 2D(Linear Drag:阻力 Gravity Grag:重力);
添加碰撞体Box Collider;给地图添加碰撞体Tilemap Collider 2D;

移动

待定

添加动画

选中player,添加(add component)Animator。在文件夹中创建 Animator Controller,拖到Animator的Controller部分。
添加具体的动画效果:window里选择Animation(ctrl 6),选中player 创建动画(Create)(下一次创建点击Samples左边下拉框,点击Creat new clip)。将图片拖到时间轴里。调整速度:在时间轴拉长动画或者调整采样频率(右上角,show samples rate)。

  • tips:动画循环播放:点击动画勾选Loop Time

动画间的转换

window–Animator

右键动画添加Transition,点击Transition设置条件(在Parameters中添加参数后,可在设置转换条件时使用)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerControler : MonoBehaviour
{public Rigidbody2D rb;public Animator anim;public Collider2D coll;public float speed;public float jumpforce;public LayerMask ground;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid FixedUpdate(){}void Update() {Movement();SwitchAnim();}void Movement(){float horizontalmove = Input.GetAxis("Horizontal");float faceddirection = Input.GetAxisRaw("Horizontal");//移动if(horizontalmove!=0){rb.velocity = new Vector2(horizontalmove*speed * Time.deltaTime,rb.velocity.y);anim.SetFloat("running",Mathf.Abs(faceddirection));}if(faceddirection !=0){transform.localScale = new Vector3(faceddirection,1,1);}//跳跃if(Input.GetButtonDown("Jump")){rb.velocity = new Vector2(rb.velocity.x,jumpforce * Time.deltaTime);anim.SetBool("jumping",true);}    }void SwitchAnim(){anim.SetBool("idle",true);if(anim.GetBool("jumping")){if(rb.velocity.y<0){anim.SetBool("jumping",false);anim.SetBool("falling",true);}}else if(coll.IsTouchingLayers(ground)){anim.SetBool("falling",false);anim.SetBool("idle",true);}}}

地面碰撞检测

public LayerMask ground;//类似于图层

添加地面图层Ground,设置Tilemap的图层Ground。在Script中设置ground为图层Ground。

public Collider2D coll;//获得碰撞体,记得将Box Collider拖到Script的coll变量处。
if(coll.IsTouchingLayers(ground));

tips:

[SerializeField]private  Rigidbody2D rb;
//private会导致变量不显示在编辑器中,使用[SerializeField]可显示。

镜头跟踪

  • 可以设置摄像机的脚本,根据人物坐标修改摄像机的Transform。
  • 或者添加Cinemachine


工具栏会新出现Cinemachine按钮,点击并添加2D Camera。
Lens列表里Orthographic Size可调整镜头大小;
Body列表里的Dead Zone调整盲区(盲区中移动不会跟踪)
Add Extension 添加Cinemachine Confiner :

对背景添加 Polygon Colider2d, 勾选isTriger(解决碰撞的问题,并拖入Cinemachine Confiner.Bounding Shape 2D

添加可收集物

  • 同添加角色和添加动画
  • 碰撞体勾选Trigger(则可以使用OnTriggerEnter2D设置碰撞时的操作)
  • 给物品添加标签(Collection)

private void OnTriggerEnter2D(Collider2D collision)
//获取碰撞体
{   //检测其标签是否为Collectionif(collision.tag == "Collection"){Destroy(collision.gameObject);}
}

**tips:**将设置好的物品保存到文件夹中方便重复使用

添加材质

给角色的碰撞体添加零摩擦材质可以解决卡墙的问题

添加UI

Hierarchy界面先添加UI-Canvas,在Canvas中添加Text,调整布局

角色受伤

OnTriggerEnter2D函数:勾选isTrigger后可触发;

OnCollisionEnter2D函数:进入时触发;(注意两个函数参数不同)

敌人移动

可以通过添加两个子物体来方便的控制巡逻范围

添加动画事件

添加动画事件,并设置要调用的函数

音效

添加 Audio Source,拖入音效

录制动画

crouch

  • 添加新的输入 (选一个输入,点击duplicate array element),并设置名字和对应按键
  • 当头上有物体时不能从crouch状态退出
Physics2D.OverlapCircle(gameobject(一个子物体).position,0.2f(范围),ground(一个label))

添加deadline、场景控制等

deadline添加一个空物体,放在场景最下方,添加collider2d,拉长至整个场景长度,勾选trigger,设置碰撞后:

。。。。
else if (collision.tag == "DeadLine")
{GetComponent<AudioSource>().enabled = false;Invoke("ReloadScene",2f);//延迟运行
}
。。。。
void ReloadScene()
{SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

场景切换:

public class NextScene : MonoBehaviour
{// Update is called once per framevoid Update(){if(Input.GetKeyDown(KeyCode.E)){SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);}}
}

添加光源

  • 先设置材质
    场景在Renderer直接添加

    给sprite新建材质,选择Sprites/Diffuse

parallax

设置背景跟随摄像机按一定比例移动,造成视觉差

Button

将物体拖入Button的On Click(),就可以调用物体绑定的脚本里的函数了

//两种获得物体的方法:public void Pause(){pauseDialog.SetActive(true);//在unity里直接拖拽TheWorld();}public void Resume(){GameObject.Find("Canvas/PauseMenu").SetActive(false);Time.timeScale = 1f;}

Audio Mixer

project界面添加Audio Mixer;里面的参数无法直接使用,可以导出到script之后使用,如下

//在slider中调用以控制声音
public void SetVolume(float value)
{audioMixer.SetFloat("MainVolume",value);//MainVolume为上图操作之后改名字得到
}

effector2D.colliderMask = -1;0 ;

unity实战项目一相关推荐

  1. Unity 实战项目 ☀️| Unity实现 天空盒 轮播系列切换

  2. Unity 实战项目 | Unity实现 双屏或多屏幕 显示效果

  3. Unity 实战项目 ☀️| 接入科大讯飞语音SDK(一)如何在科大讯飞平台搞到SDK!系列共两万多字超级新手教程!

  4. Unity 实战项目 ☀️| 实现“嫦娥奔月“小动画,一起来看看这 ‘漂亮‘的嫦娥 吧【仅供娱乐】

  5. Unity 实战项目 ☀️| 只用一个脚本做一个 刮刮乐 案例,一不小心刮出来一个女朋友!【学习娱乐一下】

  6. Unity实战项目 ☀️| 教你如何在Unity中通过 代码获取 URL链接网页 的 标题 等各种信息✨

  7. unity实现幸运大转盘(实战项目)

    转盘抽奖模块在游戏日常开发中经常用到,本次就为大家分享一个实战项目中的转盘实现方式(本转盘为转盘动,中间指针不动,不过指针动也是和此demo大同小异.demo下载在文章末尾,欢迎大家下载使用). 转盘 ...

  8. Unity实战之打靶游戏

    Unity实战之打飞碟游戏 项目源码 整体描述 利用unity实现简单的打飞碟游戏,射中相应的靶即得分.一轮游戏共五发箭. 设计思路 UML图如下 定义组件 弓箭 由两部分组成:箭头和箭身. 箭头是一 ...

  9. 【Unity3D实战项目:疯狂杀戮】角色模型的行走控制(一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=342 今天正式开始了第一个实战 ...

最新文章

  1. 温控自动烘焙系统的研究与实现
  2. 使用Python分析姿态估计数据集COCO的教程
  3. MySQL8.0新特性——锁读取
  4. iOS编程上获取本地时间以及星期几时间
  5. nodejs应用部署到SAP云平台的经过
  6. (转)如何查看java本地方法
  7. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
  8. birt 报表设计(2)—介绍
  9. Qt 互斥量 QMutex
  10. Oracle 10g 高级安装图文教程(一)
  11. 渗透测试工程师前景_网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(一)...
  12. 【书籍推荐】给大家分享和推荐前端相关书籍
  13. mysql的密码重置
  14. 剪贴板扩展windows_增强和扩展Windows剪贴板功能的最佳工具
  15. 何为A站、B站、C站、D站、F站??
  16. 杂志订阅系统c语言,杂志订阅管理系统
  17. linux 云锁 端口,问一下,云锁安装后还可以修改端口吗?
  18. Linux at命令使用介绍
  19. 解决电脑开机后打印机会自动打印的问题
  20. Three.js入门指南

热门文章

  1. 深圳交易所证券交易规则
  2. 双目测距原理与基于opencv的简单实现
  3. Vue.js - Vue下使用perfect-scrollbar(在特定框架里使用一款并非为该框架定制的库/插件)
  4. pixel acc 、mean acc、 IU、 FWIU (pixel accuracy 、mean accuraccy 、mean IU 、frequency weighted IU)
  5. modprobe 命令
  6. 51单片机P0端口的驱动能力、上拉电阻、限流电阻、下拉电阻
  7. vSAN实践经验-07: vSAN的监控和告警
  8. [转]QTP下载地址和《QTP自动化测试实践》
  9. 西安三本哪个计算机学校最好,西安三本大学前十名 西北大学现代学院仅第四...
  10. .net发布报错:system.valuetuple, version=0.0.0.0