using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Gamemanager : MonoBehaviour
{
public static Gamemanager instance;
public List<birds> lisr_birds;
public List<Pig> lisr_pigs;
//存储装弹位置
public Vector3 postion_start;
private void Awake()
{
instance = this;
}
void Initialized()
{
for (int i = 0; i < lisr_birds.Count; i++)
{
if (i == 0)
{
lisr_birds[i].join.enabled = true;
}
else
{
lisr_birds[i].join.enabled = false;
}
}
}
// Start is called before the first frame update
void Start()
{
Initialized();
if (lisr_birds.Count > 0)
{
postion_start = lisr_birds[0].transform.position;
}
}
/// <summary>
/// 小鸟销毁后调用
/// </summary>
public void Next_birds()
{
if (lisr_pigs.Count > 0)
{
if (lisr_birds.Count > 0)
{
//使位置替换更平缓
lisr_birds[0].transform.position = postion_start;
lisr_birds[0].join.enabled = true;
}
else
{
//输
}
}
else
{
//赢
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class birds : MonoBehaviour
{
[Header("最大距离")]
public float max_dis;
public Transform center_point;
[HideInInspector]
//弹簧组件 主要动力来源 模拟弹弓皮筋弹力
public SpringJoint2D join;
private Rigidbody2D rig_body;
public bool drag;
public LineRenderer left;
public LineRenderer right;
[Header("镜头跟随速度")]
public float smothoof_speed=2;
[Header("镜头跟随距离")]
public float distance = 10;
private void Awake()
{
rig_body = GetComponent <Rigidbody2D>();
join = transform.GetComponent<SpringJoint2D>();
}
private void OnMouseDown()
{
drag = true;
rig_body.isKinematic = true;
}
private void OnMouseUp()
{
drag = false;
rig_body.isKinematic = false;
//晚些再关 SpringJoint2D 是为了留一些动力
Invoke("Dong_li", 0.1f);
left.enabled = false;
right.enabled = false;
}
void Dong_li()
{
join.enabled = false;
//当前小鸟5秒后销毁
Invoke("Next_birds", 5);
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (drag)
{
//2d游戏 将鼠标坐标转化成世界坐标 然后赋值给小鸟
transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.position += new Vector3(0, 0, 10);
//给小鸟限定 拖拽位置 (单位向量*最大距离+原始位置)
if(Vector3.Distance(transform.position, center_point.position)> max_dis)
{
Vector3 pos = (transform.position - center_point.position).normalized;
pos *= max_dis;
transform.position = center_point.transform.position + pos;
}
Line();
}
}
private void LateUpdate()
{
//镜头跟随视角 x轴做限定
float pos_x = transform.position.x;
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new
Vector3(Mathf.Clamp(pos_x, 0, distance), Camera.main.transform.position.y, Camera.main.transform.position.z), smothoof_speed*Time.deltaTime);
}
/// <summary>
/// 划线 linerender 最终位置为小鸟
/// </summary>
void Line()
{
left.enabled = true;
right.enabled = true;
left.SetPosition(0, left.transform.position);
left.SetPosition(1, transform.position);
right.SetPosition(0, right.transform.position);
right.SetPosition(1, transform.position);
}
/// <summary>
/// 销毁当前小鸟 进入逻辑判断
/// </summary>
void Next_birds()
{
Gamemanager.instance.lisr_birds.Remove(this);
Destroy(gameObject);
Gamemanager.instance.Next_birds();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum Class
{
猪,
其他
}
public class Pig : MonoBehaviour
{
[Header("最大速度")]
public float max_speed;
[Header("最小速度")]
public float min_speed;
public Sprite shou_shang;
[Header("死亡特效")]
public GameObject die_texiao;
[Header("得分")]
public GameObject de_fen;
public Class pig_is_on;
private void OnCollisionEnter2D(Collision2D collision)
{
print(collision.relativeVelocity.magnitude);
if (collision.relativeVelocity.magnitude > max_speed)
{
Die();
}
if (collision.relativeVelocity.magnitude > min_speed && collision.relativeVelocity.magnitude < max_speed)
{
transform.GetComponent<SpriteRenderer>().sprite = shou_shang;
}
}
void Die()
{
switch (pig_is_on)
{
case Class.猪:
Gamemanager.instance.lisr_pigs.Remove(this);
break;
case Class.其他:
break;
default:
break;
}
Destroy(gameObject);
Instantiate(die_texiao, transform.position, Quaternion.identity);
GameObject obj_score = Instantiate(de_fen, transform.position + new Vector3(0, 0.5f, 0), Quaternion.identity);
Destroy(obj_score,1.5f);
}
}