新手如何很清楚的問程式問題?
Q:我問的問題不夠清楚嗎?
A:有時候新手以為自己問得很清楚了,但其實給的資料不夠詳實,這時候別人想要幫你的話也很難
Q:問問題之前我可以做些什麼?
A:可以先自己試著解決問題。如果你是照著範例自己打程式碼,然後出現了找不到原因的錯誤的話,很可能程式碼打錯了而你沒有發現。建議可以上網搜尋 文字比對 軟體,比對一下自己的程式碼跟範例程式碼有何不同,往往是差一個字母就差很多,比方大小寫打錯,或OnMouseEnter 打成 OnMouseCenter,RigidBody打成RigidBody2D之類的
Q:那我應該怎麼問問題?
A:少用代名詞,盡量描述具體一點,而且要有程式碼才好幫你判斷,盡量像是以下的範例
BBB你好,我看到你的CCC程式教學,照著做以後在Console控制台(註1) 發現有DDD錯誤訊息,以下是相關的程式碼跟截圖
(相關的程式碼)
(相關的程式碼)
(相關的程式碼)
(inspector視窗的截圖)
(Fungus的話 需要加上Block裡相關指令的截圖)
(Fungus的話 需要加上Block裡相關指令的截圖)
(Fungus的話 需要加上Block裡相關指令的截圖)
我的Line跟微信帳號
我覺得可能是EEE的問題,因為DDD錯誤訊息上網查的意思是FFF,而且執行的時候都會有某某BUG
Unity版本是:201X.X.X (註2)
Fungus的版本:YY (在Asset\Fungus\Docs\CHANGELOG 裡有寫)
作業系統版本:ZZ
=================
實際的例子:
(其中的程式碼可以找 程式碼分享 的網站去貼程式碼 )
(如果是在Youtube裡無法傳圖片的話,可以點頻道簡介加line傳圖)
學長你好,我看了你的怪物攻擊教學,做到影片第8分7秒指定GameObject的時候,底下會有紅線,錯誤訊息是:
CS0029 無法將類型 'UnityEngine.GameObject[]' 隱含轉換成 'UnityEngine.GameObject'
以下是相關的程式碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HP : MonoBehaviour {
public Text HPText;
public float hp;
void Start () {
DisplayHP();
}
public void Sleep() {
hp += 10;
DisplayHP();
}
public void DisplayHP() {
HPText.text = hp.ToString("#");
}
public void BeAttacked() {
hp -= 10.6f;
DisplayHP();
GameObject player = GameObject.FindGameObjectsWithTag("player");
}
}
有上色的程式碼連結:https://pastebin.com/3ueCB0rJ
我覺得可能是Tag打錯的問題,但是我都檢查過了,Tag沒打錯,相關物件也有上對Tag,不知道是哪裡出了問題
Unity版本是:2018.3.f1
作業系統:win 10
=================
順便解答一下這個範例問題:
應該寫成:GameObject.FindGameObjectWithTag("player");
因為多打了一個s會變成FindGameObjectsWithTag,這樣回傳的是GameObject陣列,所以會出現無法轉換類型的問題
同樣的,如果這是照著範例程式碼做的練習的話,用文字比對的軟體就能發現多打一個S了
註1:Console視窗的快速鍵 Ctrl + Shift + C
註2:Unity版本編號會寫在視窗的標題列,2017年以後的版本編號都包含年份,如果版本是2019.1.3,請不要只寫1.3,因為也有2018.1.3,2017.1.3,容易造成誤解
註2補充:
如果你的版本號碼裡包含a或b ,比方2019.3.0a5,然後你又一直找不到哪裡出了問題的話,建議先備份整個專案資料夾後,再安裝舊版Unity,然後用舊版Unity開專案試試。因為a的話代表alpha版,b的話代表beta版,是比較不穩定的Unity版本,可能本身就很多bug,不適合拿來做正式的專案
沒有留言:
張貼留言
留言給作者加油打氣