iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
Software Development

從零開始!使用chatGPT製作Unity回合制卡牌遊戲系列 第 28

從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 28 - Tilemap與程式碼

  • 分享至 

  • xImage
  •  

其實這幾天在研究Tilemap遇到了非常大的阻力。
這讓我無法在目前的專案中繼續推進任何進度。
然而,我沒有就停下,躺平。
我還是能繼續分享我的所學:
關於其他Tilemap的知識以及用法。

而原本的卡牌遊戲則因為一些與Tilemap顯示、遊戲物件互動的不明原因,
還有最重要的時間壓力,
只能先暫緩開發了。

接下來就是這段期間在網路上漫遊,以及ChatGpt給予的各項指導與建議。


原先的想法是:

  1. 玩家只能在格子上移動
  2. 玩家一次只能移動固定數量的格數
  3. 格子上有特定事件或是敵人

而我詢問了一個範本,ChatPGT給予我的範本是:

using UnityEngine;

public class NodeTile : MonoBehaviour
{
    // This function is called when the player interacts with the node.
    public void Interact()
    {
        Debug.Log("Player interacted with this node.");

        // Add any additional interactions or events here.
        // For example, you could trigger a dialogue, start a battle, or give a reward.
    }

    // This function is called when the player enters the node.
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            Interact();
        }
    }
}

這邊撰寫了Interact()互動函式,內容如下:
好心的輸出了一個Log訊息說玩家與之觸碰了。
任何其他的事件發生都會放在Interact()函式之中。
也就是說,他預設所有觸發這個函式的對象,只會是玩家。

而底下的OnTriggerEnter2D(Collider2D other)則是在檢測。
裝載這份程式碼腳本的遊戲物件會藉此檢測觸碰到了什麼。
這邊使用了一個條件判斷式,檢測碰撞的遊戲物件是否蘊含有Tag且為玩家。
條件符合則觸發Interact()函式。
也就是說,節點與玩家觸碰後會觸發Interact()函式。


這段程式碼其實算是符合我的需求,也簡單明瞭。
但是我的Tilemap由於不明原因無法顯示於遊戲畫面,
故這份程式碼無法掛載於Node,也就是我的Tilemap上。


而接下來還有另一份程式碼:

using UnityEngine;

public class NodeDetection : MonoBehaviour
{
    public float raycastDistance = 1.0f;

    void Update()
    {
        // Cast a ray downward from the object's position
        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, raycastDistance);

        if (hit.collider != null)
        {
            // Check if the collider belongs to a node
            if (hit.collider.CompareTag("Node"))
            {
                // Object is above a node, update its position here
                float newY = hit.collider.transform.position.y + 1.0f; // Set to node's Y position + offset
                transform.position = new Vector3(transform.position.x, newY, transform.position.z);
            }
        }
    }
}

這裡首先宣告了一個公開的浮點數raycastDistance,
用於...做什麼的?

Update()是非固定的更新函式。
如果想要每一台電腦都運行一樣,可以使用:

MonoBehaviour.FixedUpdate()

然後,哇,全部都是raycast。

好吧,那...
這就是明天的主題了!


上一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 27 - 2D Unity:Tilemap的使用與建立
下一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 29 - Raycast
系列文
從零開始!使用chatGPT製作Unity回合制卡牌遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言