一、开发操作
1、在修改还Tree Green的Perfabs中的模型为其添加组件(Component)
1)、在Tree\_trunk上添加Box collider 2D防止人物穿模
2)、在父物体上添加Box collider 2D检测人物是否为经过
二、脚本编程
1、Setting
在Unity中用于设置游戏中一些常量值。
通过常量定义在Settings类中,可以在整个游戏中统一管理它们,而不必在每个场景或游戏对象中单独设置它们。其他脚本可以通过Settings.fadeDuration和Settings.targetAlpha这两个常量来访问它们。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Settings
{
public const float fadeDuration = 0.35f;
public const float targetAlpha = 0.45f;
}
fadeDuration被设置为一个浮点数0.35f,它表示游戏中UI渐变效果的持续时间,当一些UI元素消失时会使用该效果。
targetAlpha被设置为一个浮点数0.45f,它表示UI渐变效果的目标透明度。这个透明度通常通过颜色alpha值控制,目的是使UI元素的出现和消失更加平滑。
2、ItemFader
在Unity中淡入淡出SpriteRenderer组件的方法。它使用DOTween插件(一个Unity动画插件)来控制SpriteRenderer组件的颜色。
首先,该脚本加载SpriteRenderer组件,它通过Awake()方法来完成这个步骤。
接着,该脚本提供了两个公共方法FadeIn()和FadeOut(),它们用于控制SpriteRenderer组件的淡入淡出效果。对于FadeIn()方法,它会将SpriteRenderer的颜色从透明度0渐变到完全不透明1。对于FadeOut()方法,它会将SpriteRenderer的颜色从完全不透明1渐变到半透明状态Settings.targetAlpha。
这些渐变效果是通过创建一个新的Color实例targetColor来实现的。然后,使用DOTween来对SpriteRenderer组件进行颜色渐变,其中“Settings.fadeDuration”指定了颜色渐变所需的时间。
注意到这个脚本被挂载在一个游戏对象上,并且该游戏对象必须包含一个SpriteRenderer组件(因为我们使用了\[RequireComponent(typeof(SpriteRenderer))])。这样做是为了确保在运行时,SpriteRenderer总是可以被正确地访问和使用。
using DG.Tweening;
using UnityEngine;
[RequireComponent (typeof(SpriteRenderer))]
public class ItemFader : MonoBehaviour
{
private SpriteRenderer spriteRenderer;
private void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer> ();
}
public void FadeIn()
{
Color targetColor = new Color(1, 1, 1, 1);
spriteRenderer.DOColor(targetColor ,Settings.fadeDuration);
}
public void FadeOut()
{
Color targetColor = new Color(1, 1, 1, Settings.targetAlpha);
spriteRenderer.DOColor(targetColor, Settings.fadeDuration);
}
}
3、TriggerItemFader
TriggerItemFader类包含了两个方法OnTriggerEnter2D()和OnTriggerExit2D(),它们响应称为“触发器”的特殊Collider2D(2D碰撞器)进入或离开TriggerItemFader对象的范围内。
当碰撞器进入TriggerItemFader的触发器范围时,每个附加到碰撞器子游戏对象上的ItemFader脚本都会执行FadeOut()方法,使其逐渐消失;当碰撞器离开TriggerItemFader的触发器范围时,同样的ItemFader组件会执行FadeIn()方法来让其逐渐出现。
在脚本中,我们使用了GetComponentsInChildren()来获取碰撞器内所有子游戏对象上的ItemFader组件,然后对它们进行逐个遍历,调用FadeIn和FadeOut来实现渐变效果。
这个脚本允许开发者通过将它挂载在场景中的区域游戏对象上,来控制附近SpriteRenderer组件的出现和消失效果。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriggerItemFader : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D other )
{
ItemFader[] faders = other.GetComponentsInChildren <ItemFader>();
if (faders.Length > 0)
{
foreach (var item in faders)
{
item.FadeOut();
}
}
}
private void OnTriggerExit2D(Collider2D other )
{
ItemFader[] faders = other.GetComponentsInChildren<ItemFader>();
if (faders.Length > 0)
{
foreach (var item in faders)
{
item.FadeIn();
}
}
}
}
三、初步了解脚本编程
RequireComponent是Unity引擎中的一个特性(Attribute),用于自动向游戏物体上添加其它需要组件。例如,如果一个脚本使用了RequireComponent(typeof(Rigidbody)),这意味着如果一个开发者将该脚本添加到游戏对象上,Unity就会自动添加Rigidbody组件到该游戏对象上,以保证该脚本的正确运行。
这个特性通常用于简化代码。在某些情况下,一个脚本依赖于另一个组件的存在,如果没用RequireComponent特性,则需要在代码中编写添加组件的逻辑代码,使用这个特性可以使代码更加简洁和易于维护。
需要注意的是,一个游戏对象上只能有一个单独组件类型的RequireComponent。如果你想要在同一个游戏对象上挂载两个使用了相同RequireComponent的脚本,那么Unity会在控制台上报警告。
foreach语句中的var关键字定义了一个迭代变量item,该变量会用来迭代faders数组中的元素(即ItemFader组件)。
这里的“var”是一种隐式类型声明语法,允许编译器根据初始化值自动推断变量类型。在这个例子中,由于我们没有显式地声明变量类型,C#编译器会自动推断出item变量的类型为ItemFader。
由于在foreach循环中,我们通常是迭代并处理一个集合或数组中的每个元素,所以可以用foreach语句方便地遍历集合或数组中的项。每次迭代后,item变量就会指向下一个集合中的元素,直到所有元素都被处理完毕。这比使用for循环来遍历集合或数组更加简洁和易读。