p70,improving Sword throw state (增加转剑状态)(转圈),准备阶段 ;类恶魔城Demo学习(记录)
转圈动画设置:
功能1:让玩家进入瞄准状态时随着鼠标左右改变方向。
思路:获取鼠标距离,当鼠标坐标x大于plyaer.x 且 玩家面向朝左 时就翻转。反之同理
Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (mousePosition.x > player.transform.position.x && player.facingDir == -1)
player.Flip();
else if (mousePosition.x < player.transform.position.x && player.facingDir == 1)
player.Flip();
功能2:玩家回收剑时随着剑的地方改变玩家方向
思路:和上面同理,鼠标坐标换成剑的坐标
。这里我把这里放到entity,增加莲藕性。
注:但是我发现CatchState的转身有bug,不知道是不是传输后有代码顺序和时间差距。
//Entity
//第一个是接受者(如玩家),第二个发送者(如鼠标坐标)
public void AtoB_Flip(Vector2 receiverPosition, Vector2 senderPosition)
{
if (receiverPosition.x < senderPosition.x && facingDir == -1)
Flip();
else if (receiverPosition.x > senderPosition.x && facingDir == 1)
Flip();
}
//PlayerAimSwordState 改莲藕性
Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
player.AtoB_Flip(player.transform.position, mousePosition);
//PlayerCatchSwordState 改莲藕性
public override void Enter()
{
base.Enter();
Vector2 swordPosition = player.skill.sword.newSword.transform.position;
player.AtoB_Flip(player.transform.position, swordPosition);
}
//SwordSkill中,新加CatchSword状态,这里注意要写在破坏剑前面
public void ClearAndCatchTheSword()
{
player.stateMachine.ChangeState(player.catchSword); //先切再破坏
Destroy(newSword);
}
功能3:让接剑动画和状态结束
思路:将接剑动画事件even添加方法AnimationTrigger,接剑State加if(Trigger)时切换到Idle状态。
功能4:优化:在瞄准状态下不能位移和接剑时短暂不能位移
思路:使用协同的暂停
//要锁的地方
player.StartCoroutine("BusyFor", .2f);
//entity
protected virtual IEnumerator BusyFor(float time)
{
isBusy = true;
yield return new WaitForSeconds(time); // 等待0.1秒
isBusy = false;
}
功能5:让剑还没碰到墙和敌人前返回:
//sword——control
public void ReTruningSword()
{
//rb.isKinematic = false;
//改成freeze
rb.constraints = RigidbodyConstraints2D.FreezeAll;
transform.parent = null;
isReturningSword = true;
}
public void OnTriggerEnter2D(Collider2D collision)
{
//加一条if
if (isReturningSword)
return;
//碰到触发点后就设定不能转了
isReturningSword = false;
cd.enabled = false;// 碰撞取消
rb.isKinematic = true; //设置成Kinematic,冻结
rb.constraints = RigidbodyConstraints2D.FreezeAll;
transform.parent = collision.transform; //将当前物体的父物体设置为与碰撞物体相同的父物体
}

933

被折叠的 条评论
为什么被折叠?



