【Unity2D】实现Unity中Player受伤以及闪烁特效
学习目标:
参考视频:秦无邪OvO的个人空间_哔哩哔哩_Bilibili
上一篇文章:【Unity2D】简单实现相机跟随Player功能以及攻击敌人时相机抖动_dangoxiba的博客-CSDN博客学习目标:简单实现相机跟随Player功能参考视频:秦无邪OvO的个人空间_哔哩哔哩_Bilibili秦无邪OvO,独立游戏开发者/美术/编曲;秦无邪OvO的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。https://space.bilibili.com/335835274?from=search&seid=2940030192624790742&spm_id_from=333.337.0.0我的上一篇文章:【Unity2D】实现敌人https://blog.csdn.net/dangoxiba/article/details/122704761
学习内容:
实现Unity中Player受伤以及闪烁特效,实现的方法很简单,首先要了解一个SpriteRenderer,这个就是会给该游戏对象添加图片的Sprite精灵关掉后:
代码展示:
在Player中添加一个新脚本叫PlayerHealth,然后给它设置参数以及碰撞方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
public int health;
public float blinkTime;
public int blinks;
private Renderer myRender;
void Start()
{
myRender = GetComponent<Renderer>();
}
// Update is called once per frame
void Update()
{
}
public void DamagePlayer(int damage)
{
health -= damage;
if(health <= 0)
{
Destroy(gameObject);
}
BlinkPlayer(blinks,blinkTime);
}
void BlinkPlayer(int numBlinks,float seconds)
{
StartCoroutine(DoBlinks(numBlinks, seconds));
}
IEnumerator DoBlinks(int numBlinks, float seconds)
{
for (int i = 0; i < numBlinks * 2; i++)
{
myRender.enabled = !myRender.enabled;
yield return new WaitForSeconds(seconds);
}
myRender.enabled = true;
}
}
然后再Enemy脚本中设置碰撞方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class Enemy : MonoBehaviour
{
public int health;
public int damage;
public float changeTime;
public GameObject bloodEffect;
public PlayerHealth playerHealth;
private SpriteRenderer sr;
private Color originColor;
public void Start()
{
playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
sr = GetComponent<SpriteRenderer>();
originColor = sr.color;
}
public void Update()
{
if(health <= 0)
{
Destroy(gameObject);
}
}
public void TakeDamage(int damage)
{
health -= damage;
FlashColor(changeTime);
Instantiate(bloodEffect,
new Vector3(transform.position.x , transform.position.y + 0.5f, transform.position.z),
Quaternion.identity);
GameController.cameraShake.Shake();
}
void FlashColor(float time)
{
//分别对应着R,G,B,透明度
sr.color = new Color(255, 255, 0, 255);
Invoke("ResetColor", time);
}
void ResetColor()
{
sr.color = originColor;
}
private void OnTriggerEnter2D(Collider2D other)
{
if(other.gameObject.CompareTag("Player") &&
other.GetType().ToString() == "UnityEngine.CapsuleCollider2D")
{
if(playerHealth != null)
{
playerHealth.DamagePlayer(damage);
}
}
}
}
学习产出:
先设置好参数。
闪烁成功,当health变为0时人物也会消失。
void BlinkPlayer(int numBlinks,float seconds)
{
StartCoroutine(DoBlinks(numBlinks, seconds));
}
IEnumerator DoBlinks(int numBlinks, float seconds)
{
for (int i = 0; i < numBlinks * 2; i++)
{
myRender.enabled = !myRender.enabled;
yield return new WaitForSeconds(seconds);
}
myRender.enabled = true;
这段通过协成延迟调用DoBlinks(int numBlinks, float seconds),然后再for循环中,每次循环时取消组件的Sprite Renderer让它变透明,再隔一段时间恢复,看起来就像闪烁。
private void OnTriggerEnter2D(Collider2D other)
{
if(other.gameObject.CompareTag("Player") &&
other.GetType().ToString() == "UnityEngine.CapsuleCollider2D")
判断是否是玩家:标签是Player,并且发生碰撞的是组件CapsuleCollider2D,并且非空对象
【Unity2D】实现Unity中Player受伤以及闪烁特效相关推荐
- unity中物体受伤时切换受伤图片
using UnityEngine; public class Enemy : MonoBehaviour {private SpriteRenderer render;public Sprite[] ...
- unity 程序win7在进程里运行_Win7系统中unity web player是什么程序
unity web player是什么程序,可不可以卸载?下面教程给大家详细讲解"unity web player"程序.以及可以不可以卸载!一起去看看吧! 如果你安装好Win7没 ...
- unity 程序win7在进程里运行_win7系统中出现的unity web player是什么程序?
当我们使用不纯净的win7系统安装包重新安装win7系统的时候,就会有一些不知名的程序运行在系统中,最近就有一位小伙伴问小编,说他的电脑有一个叫做"Unity Web Player" ...
- 【VR开发】Unity中VR开发的基本设置-如何设置Player视角
[背景] 上一篇博文,我们通过导入需要的插件完成了Unity中VR开发的环境准备,接下来就需要在项目中真正着手布局VR,首先就是作为玩家的视角如何导入. [设置方法] 在Hierarchy中新建一个空 ...
- 在unity中创建python机器学习环境
# 创建一个新的学习环境 本教程将介绍创建unity环境的过程 unity环境是使用unity引擎来训练增强学习代理器的应用 设置unity项目 1. 打开一个项目导入unity机器学习包, 或者新建 ...
- Unity中调用手机中的粘贴功能
最近有个小需求,就是点击一个按钮,然后复制整个文本中的内容..然后根据网上大神们的教程找到了思路.. https://blog.csdn.net/u011416077/article/details/ ...
- Unity中使用WebView
Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...
- Unity中Oculus分屏相机和普通相机一键切换
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50462157 作者:car ...
- unity中创建游戏场景_在Unity中创建Beat Em Up游戏
unity中创建游戏场景 Learn how to use Unity to create a 3D Beat Em Up game in this full tutorial from Awesom ...
最新文章
- 【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 )
- C语言库函数(Q类字母)
- 如何创建一张表mysql_如何创建一张规范的MySQL表
- C++各大著名程序库
- robo3t 连接服务器数据库_Win7上安装 MongoDB、Robo 3T及vn.py
- python 面向对象 私有化浅析
- Node — 第八天 (大事件项目接口实现二)
- 反射的妙用-类名方法名做参数进行方法调用实例demo
- python字符串的内建函数_Python 的字符串内建函数
- 2018抖音数据研究报告完整版,你喜欢的网红画像到底是怎样?
- keras安装不成功超时
- 计算机推免资源(不定期更新)
- 云计算和计算机应用的区别,普适计算与云计算的区别
- python fun函数、求4x4整型数组的主对角线元素的和_输入4行4列的二维数组,求计算主对角线各元素之和,计算副对角线各元素之和。...
- 论文复现—1—A Simple yet Effective Relation Information Guided Approach for Few-Shot Relation Extraction
- 交付给事业多少,你就能成就多少事业
- 基于Python的新闻聚合网站设计与实现
- 多线程实现火车站卖票
- Allied World Re任命黄耀铭(Yeo Meng Wong)担任亚太合约再保险部门高级副总裁兼总经理
- 在微信浏览器中做分享到朋友圈和分享到好友