CT APE
    
【遊戲介紹】
城市猿要和身上的蝨子搏鬥,因此展開了攻防戰,在贏得勝利的同時製造混亂擾亂敵人吧!
【遊戲連結】
【Github】

【筆記】
由於之前做過吃蜂蜜的影響,利用陣列來判斷拼圖是否能夠被移動的刻板印象一直存在在腦中,所以在轉換到Unity要使用碰撞時一直想不透,總是會有拼圖卡死的bug
原本的做法:由玩家去控制拼圖移動,再由拼圖本身去判斷碰撞的物體
問題:上一幀的位置根據電腦效能是不一定的,拼圖位置可能設置為碰撞到之後的位置,而拼圖又被設成不能動
boxbox.cs| 12
 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();
 }
 }
 
 | 
 
幸好這次的隊友指點迷津,利用射線來判斷是否遇到邊界或拼圖:
- 判斷從玩家發出的射線和玩家想互動的拼圖是不是同一片,是則可以互動,否則反之
- 當玩家放開互動鍵時,直接將所有拼圖設置成物理靜態
playerplayer.cs| 12
 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