1.确认屏幕的边界 看之前博客链接点击
2.控制子弹移动 移动到边界 反弹
public class SingleBullet : MonoBehaviour
{
private Transform curTrans;
public float speed = 6;
private Vector4 viewportRect;
private enum dir
{
none = 0,
left,
up,
right,
down
}
private dir curDir = dir.none;
private SingleFish lockSingleFish;
private void Awake()
{
curTrans = this.transform;
viewportRect = AppFacade.Instance.GetManager<PanelManager>(ManagerName.Panel).GetCameraViewport();
}
private void OnEnable()
{
lockSingleFish = null;
curDir = dir.none;
}
private void BulletInit(Transform lockeFish)
{
if (lockeFish != null)
this.lockSingleFish = lockeFish.GetComponent<SingleFish>();
}
private void Update()
{
UpdateBulletRebound();
BulletMove();
}
private void UpdateBulletRebound()
{
if (curDir != dir.left)
{
if (curTrans.position.x < viewportRect.x)
{
curDir = dir.left;
curTrans.up = Vector3.Reflect(curTrans.up, Vector3.right);
}
}
if (curDir != dir.up)
{
if (curTrans.position.y > viewportRect.y)
{
curDir = dir.up;
curTrans.up = Vector3.Reflect(curTrans.up, Vector3.down);
}
}
if (curDir != dir.right)
{
if (curTrans.position.x > viewportRect.z)
{
curDir = dir.right;
curTrans.up = Vector3.Reflect(curTrans.up, Vector3.left);
}
}
if (curDir != dir.down)
{
if (curTrans.position.y < viewportRect.w)
{
curDir = dir.down;
curTrans.up = Vector3.Reflect(curTrans.up, Vector3.up);
}
}
}
private void BulletMove()
{
if (lockSingleFish != null)
{
if (lockSingleFish.locking)
{
Vector3 dir = lockSingleFish.transform.position - curTrans.position;
curTrans.up = dir;
curTrans.Translate(Vector3.up * Time.deltaTime * speed);
}
else
curTrans.Translate(Vector3.up * Time.deltaTime * speed);
}
else
curTrans.Translate(Vector3.up * Time.deltaTime * speed);
}
}