目录
1.资源导入,场景简单搭建
2. springjoint组建介绍
给小鸟添加SpringJoint2D组件
3. 小鸟的拖拽
首先在小鸟身上添加Circle collider 2D组件,然后给小鸟添加Bird类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bird : MonoBehaviour {
private bool isClick = false;
private void OnMouseDown()//鼠标按下
{
isClick = true;
}
private void OnMouseUp()//鼠标抬起
{
isClick = false;
}
private void Update()
{
if (isClick)//鼠标一直按下,进行位置的跟随
{
transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
//transform.position += new Vector3(0, 0, 10);
transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);
}
}
}
4.拖拽距离最大限定
public Transform rightPos;
public float maxDis = 3;
private void Update()
{
if (isClick)//鼠标一直按下,进行位置的跟随
{
transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
//transform.position += new Vector3(0, 0, 10);
transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);
if (Vector3.Distance(transform.position, rightPos.position) > maxDis)
{
//进行位置限定
Vector3 pos = (transform.position - rightPos.position).normalized;//单位化向量
pos *= maxDis;//最大长度向量
transform.position = pos + rightPos.position;
}
}
}
5.小鸟的飞出
当鼠标松开时,消除小鸟身的SpringJoint组件,让它飞出去
private SpringJoint2D sp;
private Rigidbody2D rg;
private void Awake()
{
sp = GetComponent<SpringJoint2D>();
rg = GetComponent<Rigidbody2D>();
}
private void OnMouseDown()//鼠标按下
{
isClick = true;
rg.isKinematic = true;
}
private void OnMouseUp()//鼠标抬起
{
isClick = false;
rg.isKinematic = false;
Invoke("Fly", 0.1f);
}
void Fly()
{
sp.enabled = false;
}
6.猪的受伤
场景中添加猪,添加必要的组件,然后创建Pig脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pig : MonoBehaviour {
public float maxSpeed = 10;
public float minSpeed = 5;
private SpriteRenderer render;
public Sprite hurt;
private void Awake()
{
render = GetComponent<SpriteRenderer>();
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > maxSpeed)
{
//直接死亡
Destroy(gameObject);
}else if(collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed)
{
render.sprite = hurt;
}
}
}
运行程序如下:
7.弹弓划线操作
添加LineRenderer在right和left上,在Brid中添加代码生成弹弓划线
public LineRenderer right;
public Transform rightPos;
public LineRenderer left;
public Transform leftPos;
/// <summary>
/// 划线
/// </summary>
void Line()
{
right.SetPosition(0, rightPos.position);
right.SetPosition(1, transform.position);
left.SetPosition(0, leftPos.position);
left.SetPosition(1, transform.position);
}
}
private void Update()
{
if (isClick)//鼠标一直按下,进行位置的跟随
{
transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
//transform.position += new Vector3(0, 0, 10);
transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);
if (Vector3.Distance(transform.position, rightPos.position) > maxDis)
{
//进行位置限定
Vector3 pos = (transform.position - rightPos.position).normalized;//单位化向量
pos *= maxDis;//最大长度向量
transform.position = pos + rightPos.position;
}
Line();
}
}
运行程序,结果如下:
9.死亡、加分特效的制作
添加boom特效,并给它添加自动销毁的方法
添加得分的效果
public GameObject boom;
public GameObject score;
void Dead()
{
Destroy(gameObject);
Instantiate(boom, transform.position, Quaternion.identity);
GameObject go = Instantiate(score, transform.position + new Vector3(0, 0.5f, 0), Quaternion.identity);
Destroy(go, 1.5f);
}
运行程序,结果如下