文章目錄
- 前言
- 1.準備游戲材質
- 2.進入編輯器,處理四色環的邏輯
- 3.玩家控制小球邏輯
- 4.關于攝像機部分
前言
- 看到了個不錯的unity3D游戲教程,于是記錄一下
- 這是工程地址+游戲Demo
1.準備游戲材質
-
工具使用PS
-
剪切這么幾個不同顏色的圓環,切開 (注意要PNG格式的哦)

-
準備一個紅旗 (注意要PNG格式的哦)

2.進入編輯器,處理四色環的邏輯
- 來到unity中,對我們準備好的png照片進行分割

- 在這里切割哦,完成后點apply

- 切好之后,將換的4個部分放到場景中,用一個父物體裝著,并且調整好位置,使轉動父物體的Z軸,環也能正常繞中心點轉動!

- ok接下來我們寫個腳本,讓這個環在游戲開始的時候就以一定的速度轉起來(100的角速度)之后環就可以轉動了!
/// <summary>
/// 圈轉動
/// </summary>
public class Rotator : MonoBehaviour
{
public float rotateSpeed = 100f;
private void Update()
{
//每秒轉100度
transform.Rotate(0f,0f,rotateSpeed*Time.deltaTime);
}
}
- 因為涉及到小球碰撞環的邏輯,因此需要給四個環都上一個碰撞器組件,因為的不規則物體,所以上一個多邊形的碰撞器

- 這樣一個關卡就差不多完成了(除了還沒有上tag~)
3.玩家控制小球邏輯
-
新建一個2DObject的小球,并且Sprite選擇一個Knob

-
因為小球需要收到模擬的重力作用,因此給一個Rigibody,重力設定為3,并且鎖定其x和z軸的運動,只讓其在Y軸進行運動

-
因為要考慮到與環的碰撞,因此給其來一個碰撞器,選中Is Trigger,這樣即使碰撞到了,小球不會被彈開,會穿過,但是不影響碰撞的回呼

-
接下來我們來寫小球的腳本
-
首先寫一個小球跳躍的邏輯,當點擊滑鼠左鍵,或者空格,小球向上跳躍~并且第一次跳躍前設定重力為0,開始游戲后,小球重力規模設定為3.
private void Update()
{
if (Input.GetButton("Jump") || Input.GetMouseButtonDown(0))
{
if (firstBegin)
{
rb.gravityScale = 3;
firstBegin = false;
}
rb.velocity = Vector2.up * jumpForce;
}
}
- 關于小球碰撞后的回呼方法OnTriggerEnter2D,如果碰到的是tag為color changer的物體就改變顏色,然后將碰到的物體銷毀(這個color changer其實就是一個隱藏起來的物體,用來讓小球穿過一個環之后更改顏色的);如果碰到了和當前顏色不同的顏色環,那么記作游戲失敗,重新加載場景(也就是回到起點)
private void OnTriggerEnter2D(Collider2D col)
{
//碰撞的物件col
if (col.CompareTag("color changer"))
{
SetRandomColor();
Destroy(col);
return;
}
if (!col.CompareTag(currentColor))
{
//回到出生點
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
if (col.CompareTag("win point"))
{
SceneManager.LoadScene("Win");
}
}
-
大概放在這個位置,這樣小球碰到就可以更改顏色!(當然這個color changer也需要一個碰撞器,用來檢測)

-
環形的四部分也需要分別按照顏色名,上一個不同的Tag,用于和小球當前的顏色進行對比,

-
關于生成顏色的方法如下:使用亂數,給小球當前顏色賦值,
private void SetRandomColor()
{
int index = Random.Range(0, 4);
switch (index)
{
case 0:
currentColor = "bule";
sr.color = blueColor;
break;
case 1:
currentColor = "yellow";
sr.color = yellowColor;
break;
case 2:
currentColor = "pink";
sr.color = pinkColor;
break;
case 3:
currentColor = "purple";
sr.color = purpleColor;
break;
}
}
- 再給終點的紅旗一個碰撞體,并且給一個Tag給它,用來檢測是否游戲勝利,勝利的話專門加載一個勝利的場景!

- 記得將這個場景放入Build Setting中,不然加載不出來哦
這樣Player部分就完成啦!Player的完整代碼如下:
/// <summary>
/// 小球跳動
/// </summary>
public class Player : MonoBehaviour
{
public float jumpForce = 10f;
public Rigidbody2D rb;
public string currentColor;
public SpriteRenderer sr;
public Color blueColor;
public Color yellowColor;
public Color pinkColor;
public Color purpleColor;
private bool firstBegin = true;
private void Start()
{
SetRandomColor();
rb.gravityScale = 0;
}
private void SetRandomColor()
{
int index = Random.Range(0, 4);
switch (index)
{
case 0:
currentColor = "bule";
sr.color = blueColor;
break;
case 1:
currentColor = "yellow";
sr.color = yellowColor;
break;
case 2:
currentColor = "pink";
sr.color = pinkColor;
break;
case 3:
currentColor = "purple";
sr.color = purpleColor;
break;
}
}
private void Update()
{
if (Input.GetButton("Jump") || Input.GetMouseButtonDown(0))
{
if (firstBegin)
{
rb.gravityScale = 3;
firstBegin = false;
}
rb.velocity = Vector2.up * jumpForce;
}
}
private void OnTriggerEnter2D(Collider2D col)
{
//碰撞的物件col
if (col.CompareTag("color changer"))
{
SetRandomColor();
Destroy(col);
return;
}
if (!col.CompareTag(currentColor))
{
//回到出生點
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
if (col.CompareTag("win point"))
{
SceneManager.LoadScene("Win");
}
}
}
4.關于攝像機部分
- 小球一直上跳,當小球的高度高于攝像機時,攝像機應該跟隨小球的y值進行上移動,因此再給攝像機一個這樣的腳本,我們的游戲就完成了!
public class followPlayer : MonoBehaviour
{
public Transform playerTransform;
private void Update()
{
if (playerTransform.position.y > transform.position.y)
{
transform.position = new Vector3(transform.position.x, playerTransform.position.y, transform.position.z);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389283.html
標籤:其他
