void Update() { switch (slingShotState) { case SlingShotState.Idle: InitializeBird(); SetSlingShotLineRenderersActive(true); //重新显示皮筋 SetTrajectoryLineRenderersActive(true); //重新显示弹道线 DisPlaySlingshotLineRenderers(); if (Input.GetMouseButtonDown(0)) { Vector3 location = Camera.main.ScreenToWorldPoint(Input.mousePosition); //将屏幕位置转为坐标位置 if (BirdToThrow.GetComponent <CircleCollider2D>() == Physics2D.OverlapPoint(location)) //鼠标是否点在鸟上 { slingShotState = SlingShotState.UserPulling; } } break; case SlingShotState.UserPulling: //小鸟位置跟随鼠标移动 DisPlaySlingshotLineRenderers(); if (Input.GetMouseButton(0)) { Vector3 location = Camera.main.ScreenToWorldPoint(Input.mousePosition); location.z = 0; //皮筋拉伸限度; if (Vector3.Distance(location, SlingshotMiddleVector) > BirdDistance) { Vector3 maxPosition = (location - SlingshotMiddleVector).normalized * BirdDistance + SlingshotMiddleVector; BirdToThrow.transform.position = maxPosition; } else { BirdToThrow.transform.position = location; } float distance = Vector3.Distance(SlingshotMiddleVector, BirdWaitPosition.position); DisplayTrajectoryLineRenderer2(distance); } else //鼠标弹起 { SetTrajectoryLineRenderersActive(false); TimeThrow = Time.time; //设定起始时间 float distance = Vector3.Distance(SlingshotMiddleVector, BirdToThrow.transform.position); if (distance > 1) { SetSlingShotLineRenderersActive(false); //隐藏皮筋 slingShotState = SlingShotState.BirdFlying; //设置小鸟处于发射状态 ThrowBird(distance); } else { //GoKit回归 BirdToThrow.transform.positionTo(distance / 10, BirdWaitPosition.transform.position) .setOnCompleteHandler((x) => { //设置一个处理器 x.complete(); x.destroy(); InitializeBird(); }); //拉姆达 表达式 } } break; } }
/*** * 初始化小鸟位置 * */ void InitializeBird() { BirdToThrow.transform.position = BirdWaitPosition.position; slingShotState = SlingShotState.Idle; }