文章目录
素材来源:影之诗国服大百科
内容简介:本篇主要介绍卡牌预览效果
一、实现效果
当玩家的鼠标悬停在卡牌上时,会有放大预览的效果
二、实现过程
1. 想法
在卡牌内部创建一个复制,当鼠标悬停的时候,将该复制放大并显示。
对象名 | 作用 |
---|---|
Turn This Off When Preview | 当预览的时候关闭的对象 |
Target Position | 预览对象所处的位置 |
Target Scale | 预览对象的缩放大小 |
Preview Game Object | 预览对象 |
Activate In Awake | 全局预览功能开关 |
该预览复制体的boxcollider应该去除,这样才能保证当鼠标离开该卡牌的时候,能够正确的取消预览动画。
可以看到,当鼠标进入绿色BoxCollider框时,触发预览效果,当离开时关闭效果。
2. 静态变量
① 什么是静态变量
静态变量也被称为全局变量,就是它在程序执行的时候就被初始化,如果你在它初始化或使用的时候,没有给它赋值,系统就会给它一个默认值。
② 静态变量的优缺点
- 优点:
- 在载入的时候,它也就装入内存了
- 不需要实例对象,直接通过类就可以直接调用它
- 缺点:
- 系统的垃圾回收机制是无法回收静态变量的,静态变量会常驻内存中
③具体使用
private static HoverPreview currentlyViewing = null;
用一个静态的HoverPreview类来表示当前卡牌预览的对象
因为是静态变量,所以保证了同时只有一个对象被预览
3. OnMouseEnter、OnMouseExit函数
-
当预览功能开启,并且该卡牌可以预览时,执行PreviewThisObject函数,开启预览
-
当鼠标离开时,若没有其他卡牌在预览中,就关闭所有预览
void OnMouseEnter()
{
OverCollider = true;
// 只有当允许预览并且当前预览激活的情况下才能预览
if (PreviewsAllowed && ThisPreviewEnabled)
PreviewThisObject();
}
void OnMouseExit()
{
OverCollider = false;
// 如果没有在预览其他卡牌,就停止所有预览;
if (!PreviewingSomeCard())
StopAllPreviews();
}
4. PreviewThisObject方法
该方法触发之后,执行预览效果
① 先禁用其他预览
② 把当前预览卡牌赋值给静态变量
③ 激活预览对象
④ 关闭预览时需要关闭的对象
⑤ 调整预览对象的位置,并创建补间动画(使用DOTween)
void PreviewThisObject()
{
// 1) 首先禁用其他预览
StopAllPreviews();
// 2) 设为当前预览对象
currentlyViewing = this;
// 3) 激活预览对象
previewGameObject.SetActive(true);
// 4) 关闭想要关闭的对象
if (TurnThisOffWhenPreviewing!=null)
TurnThisOffWhenPreviewing.SetActive(false);
// 5) 调整卡牌位置并创建补间动画
previewGameObject.transform.localPosition = Vector3.zero;
previewGameObject.transform.localScale = Vector3