unity实战项目一
素材下载与添加
添加瓦片地图(Tilemap)
- Hierarchy界面添加Tilemap
- 打开Tile Paletee界面画地图(Window–2D–Tile Paletee)
- 切割地图素材: 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实战项目一相关推荐
- Unity 实战项目 ☀️| Unity实现 天空盒 轮播系列切换
- Unity 实战项目 | Unity实现 双屏或多屏幕 显示效果
- Unity 实战项目 ☀️| 接入科大讯飞语音SDK(一)如何在科大讯飞平台搞到SDK!系列共两万多字超级新手教程!
- Unity 实战项目 ☀️| 实现“嫦娥奔月“小动画,一起来看看这 ‘漂亮‘的嫦娥 吧【仅供娱乐】
- Unity 实战项目 ☀️| 只用一个脚本做一个 刮刮乐 案例,一不小心刮出来一个女朋友!【学习娱乐一下】
- Unity实战项目 ☀️| 教你如何在Unity中通过 代码获取 URL链接网页 的 标题 等各种信息✨
- unity实现幸运大转盘(实战项目)
转盘抽奖模块在游戏日常开发中经常用到,本次就为大家分享一个实战项目中的转盘实现方式(本转盘为转盘动,中间指针不动,不过指针动也是和此demo大同小异.demo下载在文章末尾,欢迎大家下载使用). 转盘 ...
- Unity实战之打靶游戏
Unity实战之打飞碟游戏 项目源码 整体描述 利用unity实现简单的打飞碟游戏,射中相应的靶即得分.一轮游戏共五发箭. 设计思路 UML图如下 定义组件 弓箭 由两部分组成:箭头和箭身. 箭头是一 ...
- 【Unity3D实战项目:疯狂杀戮】角色模型的行走控制(一)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=342 今天正式开始了第一个实战 ...
最新文章
- 温控自动烘焙系统的研究与实现
- 使用Python分析姿态估计数据集COCO的教程
- MySQL8.0新特性——锁读取
- iOS编程上获取本地时间以及星期几时间
- nodejs应用部署到SAP云平台的经过
- (转)如何查看java本地方法
- Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
- birt 报表设计(2)—介绍
- Qt 互斥量 QMutex
- Oracle 10g 高级安装图文教程(一)
- 渗透测试工程师前景_网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(一)...
- 【书籍推荐】给大家分享和推荐前端相关书籍
- mysql的密码重置
- 剪贴板扩展windows_增强和扩展Windows剪贴板功能的最佳工具
- 何为A站、B站、C站、D站、F站??
- 杂志订阅系统c语言,杂志订阅管理系统
- linux 云锁 端口,问一下,云锁安装后还可以修改端口吗?
- Linux at命令使用介绍
- 解决电脑开机后打印机会自动打印的问题
- Three.js入门指南
热门文章
- 深圳交易所证券交易规则
- 双目测距原理与基于opencv的简单实现
- Vue.js - Vue下使用perfect-scrollbar(在特定框架里使用一款并非为该框架定制的库/插件)
- pixel acc 、mean acc、 IU、 FWIU (pixel accuracy 、mean accuraccy 、mean IU 、frequency weighted IU)
- modprobe 命令
- 51单片机P0端口的驱动能力、上拉电阻、限流电阻、下拉电阻
- vSAN实践经验-07: vSAN的监控和告警
- [转]QTP下载地址和《QTP自动化测试实践》
- 西安三本哪个计算机学校最好,西安三本大学前十名 西北大学现代学院仅第四...
- .net发布报错:system.valuetuple, version=0.0.0.0