其實這幾天在研究Tilemap遇到了非常大的阻力。
這讓我無法在目前的專案中繼續推進任何進度。
然而,我沒有就停下,躺平。
我還是能繼續分享我的所學:
關於其他Tilemap的知識以及用法。
而原本的卡牌遊戲則因為一些與Tilemap顯示、遊戲物件互動的不明原因,
還有最重要的時間壓力,
只能先暫緩開發了。
接下來就是這段期間在網路上漫遊,以及ChatGpt給予的各項指導與建議。
原先的想法是:
而我詢問了一個範本,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。
好吧,那...
這就是明天的主題了!