Unity憤怒的小球(2d)(關于碰撞,射線,剛體)的小練習

游戲是要用小球撞擊搭好的方塊,將其擊落到下面.


先創(chuàng)建2D object Sprite將貼圖放上去.然后搭成這樣的形狀.

每個小方塊都需要

BoxCollider2D 和Rigidbody2D這兩個組件 保證能完成被撞擊和一些物理效果

最下面的木板只需要一個BoxCollider2D就可以了

我在這些的后面放置了一個空物體,它具有一個BoxCollider,使射線能夠在碰到碰撞體時返回碰撞點的信息


上面的紅色小球則需要Rigidbody2D和CircleCollider2D,在小球上需要掛上一個腳本以下是腳本的代碼


using UnityEngine;

using System;

public class BallScript : MonoBehaviour

{? ??

Vector3 _startPos;

Vector3 _endPos;

Vector3 _secendPos;? ?

?Vector3 dir;? ? ??

float speed = 5;? ??

public void OnMouseDown()? ??

{? ? ? ??

_startPos = Input.mousePosition; ? ? ? ? ?//記錄鼠標按下時的位置 ?

}? ?

?public void OnMouseUp() ??

{? ? ? ??

_endPos = Input.mousePosition;? ? ? ? //記錄鼠標彈起時的位置

dir = _startPos - _endPos; ? ? ? ?//獲得小球射擊方向 (向量的減法)

transform.gameObject.GetComponent().AddForce(dir * speed); ? ? ? ?//給小球一個力

transform.gameObject.GetComponent().gravityScale = 0.5f; ? ? ? ? ? //因為一開始小球的重力設為0,所以在這里時小球擁有重力

}

public void OnMouseDrag()//這個方法使鼠標在小球上按下時小球能夠跟隨鼠標

{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//創(chuàng)建一條射線

RaycastHit hit;

if (Physics.Raycast(ray, out hit))//當碰到碰撞體時

{

_secendPos = hit.point;//保存碰撞點的坐標

}

_secendPos.z = 0;//使Z軸的坐標為0,因為其它物體的Z軸都為0,讓小球能夠成功撞到

transform.position = _secendPos;//使小球的位置跟隨鼠標

}

}


以上就是自己寫的小程序.能有更好的方法,望指正,萬分感謝.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在我們的游戲開發(fā)過程中,有一個很重要的工作就是進行碰撞檢測。例如在射擊游戲中子彈是否擊中敵人,在RPG游戲中是否撿...
    壹米玖坤閱讀 24,617評論 0 17
  • 設置Android開發(fā)環(huán)境 安裝jdk. 安裝android-sdk-windows.(https://docs....
    GreatSun閱讀 1,938評論 0 5
  • 首先,導入NGUI插件 1、創(chuàng)建一個Sprite,創(chuàng)建一個空物體,也可以是圖片,我這里創(chuàng)建的是空物體,2、創(chuàng)建一個...
    周joe閱讀 549評論 0 0
  • 觀棋一語閱讀 170評論 0 0
  • 這學期從一開始就累著,一周12節(jié)課要帶,做了太多超出能力的事,然后我幻想去爬山。 這是我早就要去的,原本想要和閨密...
    燙不死的魚閱讀 462評論 1 1