camera
camera
13-游戏逻辑的判定,实现多只小鸟的飞出
胜利的判定: 场景中小鸟个数大于猪的个数
复制成3只小鸟
新建【空物体】,命名:GameManager,位置归零
新建脚本,命名:GameManager
(让小鸟禁飞:Springjoint失活)
//获取到场景中3只小鸟:通过list集合
public List<Bird> birds;
//获取到猪的集合
public List<Pig> pig;
//初始化小鸟
private void Initialized()
{
//遍历集合
for(int i=0;i<birds.Count;i++)
{
if(i==0)//第一只小鸟
{
birds[i].enabled=true;
【注意:在Bird脚本中写一个:[HideInspector]
public SpringJoint2D sp】
birds[i].sp.enabled=true;
}
else
}
birds[i].enabled=false;
birds[i].sp.enabled=false;
}
给GameManager赋值
飞出去对小鸟进行删除操作,在GameManager脚本中
public static GameManager _instance;
private void Awake()
{
_instance=this;
}
飞出去对小鸟进行删除操作,在Bird脚本中,新建方法Next
//下一只小鸟的飞出
void Next()
{
GameManager._instance.birds.Remove(this);
Destroy(gameObject);
Instantiate(boom,transform.position,Quaternion.identity);
}
void Fly()
{
}
在GameManager脚本中,新建方法NextBird()
//判断游戏逻辑
public void NextBird()
{
if(pig.Count>0)
{
if(birds.Count>0)
{
//下一只飞
Initialized();
}else
{
//赢了
}
}else
{
//赢了
}
}
在Bird脚本中
void Next()
{
GameManager._instance.NextBird();
}
复制猪
Pig脚本中
public bool isPig=false;
void Dead()
{
if(isPig)
{
GameManager._instance.pig.Remove(this);
}
}
在GameManager脚本中,新建方法Start()
private void Start(){
Initialized();
}
12-死亡、加分特效的制作
找到特效图片:171、160、136、128、116、107、96、88、71、34、31、16
新建文件夹:Animation
选中的图片拖上去:命名:boom
boom--loop time勾选掉
新建文件夹:Prefabs
给【boom】新建脚本:Boom
public void destroying()
{
Destroy(gameObject);
}
}
选中boom--coomand+6--添加【事件】
打开pig脚本
public GameObject boom;
新建方法Dead()
void Dead(){
Destroy(gameObject);
Instantiate(boom, transform.position, Quaternion.identity);//生成烟雾特效
}
需要把boom做成Prefabs,赋值给pig脚本
制作加分效果:MENU_ELEMENTS_1
命名:pigScore
猪:红色3000分
做成Prefabs
打开pig脚本
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);//1.5秒以后销毁
}
11-弹弓划线操作
左边树枝创建【空物体:leftPos】移动到橡皮筋处
给左右树枝添加【Line Renderer】
Materials--Element 0--Sprites-Def..--color:吸取皮带上颜色
width:0.2
打开Bird脚本
获取到2个组件
public LineRenderer right;
public LineRenderer left;
public Transform leftPos;
画线函数 line()
void Line(){
right.SetPosition(0, rightPos.position);
right.SetPosition(1, transform.position);
left.SetPosition(0, leftPos.position);
left.SetPosition(1, transform.position);
}
放在
transform.position = pos + rightPos.position;
}后
Line();
最后:给脚本赋值,子物体拿过去
11.line renderer组件;line renderer.set position;
10.collision.relative velocity
6.Spring Joint 2D
7.ScreenToWorldPoint;
9.Dynamic, Kinematic;Spring Joint 2D 禁用;
任务10-猪的受伤
搭建场景
新建【空物体】:env,空物体归零
找图片:THEME_01_THEME_1,修改【Sprite Mode】为Multiple -- 裁一下 --图片拖上去--添加【碰撞盒Box Cllider 2D】,碰撞盒上面不要填满
主题拖到env下边--大量复制【command+D】
给小鸟增加阻力
bird--Rigibody 2D--Angular Drag:2
加入 【猪:pig】 编码:103
更改猪的图层为:player
给猪加一个【Rigibody 2D Angular Drag:2 】、【Circle Collider 2D radius:0.35】
猪的死亡和受伤
添加脚本:Pig
2个碰撞检测方法
OnCollisionEnter2D(Collision2D collision)//碰撞检测
OnTriggerEnter2D(Collision2D collision)//触发检测
定义2个变量
public float maxSpeed = 10;//最大速度
public float minSpeed = 5; //最小速度
判断一下
引出概念:相对速度
if (collision.relativeVelocity.magnitude > maxSpeed)//直接死亡
{
Dead();
} else if (collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed) {
render.sprite = hurt;//更换图片:104
获取组件
private SpriteRenderer render;
在Awake下进行赋值
private void Awake()
{
render = GetComponent<SpriteRenderer>();
}
获取组件
最大速度改为:8
最小速度改为:4
09-小鸟的飞出
其实就是使【Spring Joint 2D 组件】失活
1.获取到组件
public SpringJoint2D sp;
在Awake()下进行获取
private void Awake()
{
sp = GetComponent<SpringJoint2D>();
}
2.鼠标抬起,失活
private void OnMouseUp() //鼠标抬起
{
isClick = false;
sp.enabled = false;
}
}
3.小鸟飞出速度过快
小鸟【Rigidbody 2D】中的【Body Type】参数改成【kinematic】
3-1:在脚本里更改
protected Rigidbody2D rg;
private void Awake()
{
sp = GetComponent<SpringJoint2D>();
rg = GetComponent<Rigidbody2D>();
}
3-2:鼠标按下
private void OnMouseDown()//鼠标按下
{
isClick = true;
rg.isKinematic = true;
//Kinematic :运动
}
鼠标抬起
private void OnMouseUp() //鼠标抬起
{
isClick = false;
rg.isKinematic = false;
sp.enabled = false; //粘贴到Fly()中
}
4.小鸟飞出后的操作
void Fly()
{
sp.enabled = false;
}
4-1:让电脑零点1、2秒时间计算
需要用到【Invoke函数】
Invoke("方法名",多长时间调用)
private void OnMouseUp() //鼠标抬起
{
isClick = false;
rg.isKinematic = false;
Invoke("Fly", 0.1f);
}
Ctrl+6打开动画
bu fei chu
你是真几把脑残
选中后按下ctrl+6
猪的受伤
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class lostHP : MonoBehaviour
{
public int miaosha_sudu_zuidazhi = 10;
public int banxue_sudu_zuidazhi = 5;
public SpriteRenderer pig;
public Sprite banxue_tupian;
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log(collision.relativeVelocity.magnitude);
if(collision.relativeVelocity.magnitude > miaosha_sudu_zuidazhi)
{
Destroy(gameObject);
}
else if (collision.relativeVelocity.magnitude < miaosha_sudu_zuidazhi && collision.relativeVelocity.magnitude > banxue_sudu_zuidazhi)
{
pig.sprite = banxue_tupian;
}
}
}
本课代码
using UnityEngine;
public class bird : MonoBehaviour
{
public Transform rightPos;
public Transform leftPos;
bool isClick = false;
public float maxDis = 3;
SpringJoint2D sp;
Rigidbody2D rb;
public LineRenderer dangonghuaxian_you;
public LineRenderer dangonghuaxian_zuo;
// Start is called before the first frame update
private void OnMouseDown()//鼠标按下时
{
isClick = true;
sp.enabled = true;
rb.isKinematic = true;
}
private void OnMouseUp()//鼠标松开时
{
isClick = false;
rb.isKinematic = false;
Invoke("Fly", 0.1f);
}
private void Awake()
{
sp = GetComponent<SpringJoint2D>();
rb = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
if (isClick)
{
transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
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;
}
dangonghuaxian_zuo.SetPosition(0,transform.position);
dangonghuaxian_zuo.SetPosition(1,leftPos.position);
dangonghuaxian_you.SetPosition(0, transform.position);
dangonghuaxian_you.SetPosition(1, rightPos.position);
}
}
void Fly()
{
sp.enabled = false;
}
}
2D视角设置
blovkScore
/summon warden循声守卫
/summon minecraft:iron_golem铁傀儡