CT APE

【遊戲介紹】

城市猿要和身上的蝨子搏鬥,因此展開了攻防戰,在贏得勝利的同時製造混亂擾亂敵人吧!



【遊戲連結】



【Github】



【筆記】

由於之前做過吃蜂蜜的影響,利用陣列來判斷拼圖是否能夠被移動的刻板印象一直存在在腦中,所以在轉換到Unity要使用碰撞時一直想不透,總是會有拼圖卡死的bug

原本的做法:由玩家去控制拼圖移動,再由拼圖本身去判斷碰撞的物體
問題:上一幀的位置根據電腦效能是不一定的,拼圖位置可能設置為碰撞到之後的位置,而拼圖又被設成不能動

boxbox.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "box")//如果拼圖撞到其他拼圖
{
transform.position = lastPos;//把他移回原本的位置
canMove = false;//將拼圖設置成不能移動
}
if (collision.tag == "Player")
{
player = collision.GetComponent<Player>();
player.canMove = false;
player.LastPos();
}
}

幸好這次的隊友指點迷津,利用射線來判斷是否遇到邊界或拼圖:

  1. 判斷從玩家發出的射線和玩家想互動的拼圖是不是同一片,是則可以互動,否則反之
  2. 當玩家放開互動鍵時,直接將所有拼圖設置成物理靜態
playerplayer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void raycastBox()
{
RaycastHit2D o = Physics2D.Linecast(transform.position, transform.position + faceTo, test);//朝人物面向發出射線
if (o)//如果打到東西
{
if (Input.GetKey(interact))//如果按下互動鍵
{
o.collider.gameObject.GetComponent<Box>().followPlayer(boxSpeedX, boxSpeedY);//告訴拼圖跟著玩家走
o.collider.GetComponent<Box>().checkName(o.collider.gameObject.name);//確定打到的拼圖跟要移動的是同一個拼圖
canDragOther = false;//一次只能移動一片拼圖
}
}
if (Input.GetKeyUp(interact)) {
canDragOther = true;
for (int i = 0; i < GameObject.FindGameObjectsWithTag("box").Length; i++)
{
FindObjectsOfType<Box>()[i].GetComponent<Box>().setStatic();
}
}
}
上一篇:321 Stop! 下一篇:Animal Escape