Slammer下落物
1.新建空节点,命名为Slammer
添加smasher到Slammer节点下,添加碰撞检测Box Collider 2D
在Slammer下,添加空节点SlamTarget,表示下落目标位置
在smasher下,新建空节点Killer,添加Box Collider 2D,设置为Trigger,并设置大小,用来Kill角色
添加脚本组件KillPlayer.cs
到Killer节点上,Player触碰到就执行Kill
2.添加脚本Slammer.cs
绑定脚本到Slammer节点上
添加参数
public Transform theSlammer; //slammer
public Transform slammerTarget; //目标
private Vector3 startPoint; //初始位置
public float slamSpeed; //攻击速度
public float resetSpeed; //重置回归速度
public float waitAfterSlam; //等待时间
private float waitCounter; //等待计数器
private bool slamming; //下落
private bool resetting; //上升复位
在Unity中设置绑定目标,速度、时间等值
初始化时,设置startPoint的值
void Start()
{
//初始化位置为slamer坐标
startPoint = theSlammer.position;
}
在Update()中,设置攻击模式,重置模式,静默模式的切换
void Update()
{
if(!slamming && !resetting)
{
//检测目标的位置与Player的位置,小于2开始切换状态,放下theSlammer来攻击
if (Vector3.Distance(slammerTarget.position, PlayerController.sInstance.transform.position) < 2.0f)
{
slamming = true;
waitCounter = waitAfterSlam; //开启计数
}
}
if(slamming) //攻击模式
{
theSlammer.position = Vector3.MoveTowards(theSlammer.position, slammerTarget.position, slamSpeed * Time.deltaTime);
if(theSlammer.position == slammerTarget.position )
{
waitCounter -= Time.deltaTime; //更新计数器
if(waitCounter < 0)
{
//等待时间结束,切换到重置模式
slamming = false;
resetting = true;
}
}
}
if(resetting) //重置模式
{
theSlammer.position = Vector3.MoveTowards(theSlammer.position, startPoint, resetSpeed * Time.deltaTime);
if(theSlammer.position == startPoint)
{
//theSlammer复位后,设置重置模式为false
resetting = false;
}
}
}