接入Button的信号 在JoystickInput中声明新的ButtonButton(buttonJstick),声明新的Bool(lockOn),lockOn的值为buttonJstick的OnPressed的值。 检测是否有lockOn目标 使用Physics.OverlapBox函数,检测一个区域内全部的Collider,函数返回一个Collider[]。 在调用OverlapBox的时候,在LayerMask层传入一个Mask,进行某一个层的遮罩
public void LockUnlock()
{
//print("lockUnlock");
if (lockTarget == null)
{
//lock obj
Vector3 boxCenter = model.transform.position + new Vector3(0, 1, 0) + model.transform.forward * 4.0f;
Collider[] cols = Physics.OverlapBox(boxCenter, new Vector3(0.5f, 0.5f, 4f),model.transform.rotation,LayerMask.GetMask("Enemy"));
foreach (var item in cols)
{
print(item);
}
}
else
{
//release lock
}
}
在有lockTarget的情况情况下选择lockOn,有可以锁定的目标时,直接切换lockOn的Target,在没有lockTarget或者target是同样的时候,取消lock
public void LockUnlock()
{
Vector3 boxCenter = model.transform.position + new Vector3(0, 1, 0) + model.transform.forward * 4.0f;
Collider[] cols = Physics.OverlapBox(boxCenter, new Vector3(0.5f, 0.5f, 4f),model.transform.rotation,LayerMask.GetMask("Enemy"));
if (cols.Length < 1)
{
lockTarget = null;
}
else
{
foreach (var item in cols)
{
if (lockTarget == item.gameObject)
{
lockTarget = null;
break;
}
lockTarget = item.gameObject;//找到第一个Collider直接退出
break;
}
}
}
修改Camera的代码,在有lockTarget的时候,摄像机直接锁定Target。
添加LockOn时候的锁定图标 同时在LockOn的时候同时设置LockOn的State
LockOn下的BlendTree 将BlendType设置为2DFreeformDirectional 前后左右分别设置动画,由于左右没有充足的动画,这里在向左走的时候将时间设置为-1,相当于向右的倒向播放。
BlendTree.PNG