顯示具有 Unity 標籤的文章。 顯示所有文章
顯示具有 Unity 標籤的文章。 顯示所有文章

2024年6月17日 星期一

Unity 等待另一個程式完成

2024.06.17  假設 Second.cs 要等待 First.cs 完成才執行,最基礎的方法當然是先執行 First.cs 後再調用 Second.cs 的函式,但是如果需要等待 First.cs 的程式很多,要參照的程式就很多,程式碼就會很長及不易偵錯。解決方法是使用 public static event Action。範例如下: 
using UnityEngine;
using System;
public class First : MonoBehaviour
{
    public static event Action onFristComplete;//設定變數
    private void Start()
    {
        ///先完成必須執行項目
        onFristComplete?.Invoke();//表示完成
    }
}

2022年9月13日 星期二

Unity New Input System 判斷滑鼠拖曳 Drag

 2022.09.12 Unity New Input System 在使用滑鼠拖曳 Drag 事件時,以往的 OnMouseDrag() 不再支援,網路上查半天方法都是非常麻煩,最終發現簡單可行方法:

1.安裝 New Input System,並設定啟用。

2.新增物件並在上新增 Player Input component,然後 Create Actions。

2022年8月30日 星期二

Unity 遊戲資料存取

 2022.08.29 能夠跨平台在遊戲中存取資料,存檔資料為 JSON 且可選擇是否加密。

範例下載:github

範例使用:

1.下載後用 Unity 開啟,並開啟預設場景,點選 GameObject 物件,可以修改  TestData Component > File Settings 的內容。

2.執行後點選 GameObject 物件,可以修改 TestData Component > Data Settings 的內容。

3.停止執行,可以看到檔案在 Application.persistentDataPath 中。

4.再度執行,可以發現 TestData Component 內容已經更改。

2022年7月30日 星期六

使用 GitHub 管理 Unity 專案版本

 2022.07.30 網路上介紹 GitHub 使用大部分麻煩到嚇人,找半天終於發現簡單好用步驟。

1.建立 GitHub 帳號(已有帳號可跳過)。

2.下載並安裝 GitHub Desktop。

3.開啟 GitHub Desktop,登入後建立新 repository,選擇電腦要放 Unity 專案的資料夾,要使用空資料夾,在加入 .gitignore 時選 Unity (不然會很多沒必要的檔案也會上傳)。

4.將 Unity 專案內容複製到剛剛的資料夾,複製完成後在 GitHub Desktop 會出現許多檔案更改,輸入 Summary (每次改版的說明),就可以 Push origin(上傳到雲端)。

5.Unity 專案每次改版完,GitHub Desktop 要輸入 Summary (每次改版的說明),就可以 Push origin(上傳到雲端)。

6.如果是別人有改過的 GitHub Desktop 就要 Fetch origin (取得來源) 再修改 Unity 專案。

2022年4月4日 星期一

Unity 產生 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine' 錯誤

2022.04.04 這個問題 Visual Studio Community 更新偶爾會發生,以下步驟還蠻有用的:

1. 開啟 Unity => Edit => Preferences => External Tools

2.  "Generate .csproj files for" 確定每項都打勾

3. 按下 "Regenerate project files".

4.  重新啟動 Visual Studio Community 就行了。

附圖:



2021年7月31日 星期六

Unity Universal Render Pipeline (URP) 增加 Frames per second (FPS)

 2021.07.31 Unity 輸出到手機常有卡頓的情形,經過 Profiler 發現 FPS 過低,以下是一些可以改進的選項,不過這都是效能跟效果之間的取捨。

不用動的物件設定靜態 (Static),以及盡量使用 Level of Detail (LOD) 。

在 Camera 以下選項視需要關閉:

Post Processing
Render Shadows
Opaque Texture Off
Depth Texture Off

URP 設定檔 UniversalPipelineAsset 以下選項視需要關閉:

Opaque Texture Off
Depth Texture Off
Cast Shadows
Additional Lights Diabled 

2021年7月4日 星期日

Unity GoogleMobileAds-v5.4.0 發生 "You are trying to create a MonoBehaviour using the 'new' keyword" 錯誤

2021.07.04 GoogleMobileAds.Unity.RewardingAdBaseClient:CreateButtonBehavior() 發生 " You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
ButtonBehaviour:.ctor() " 錯誤,雖然不會影響結果但是改一改總是好的。

解決方法為將 RewardingAdBaseClient 內的

    buttonBehaviour = new ButtonBehaviour(); 

改為:

     GameObject ob=new GameObject();
     ob.AddComponent<ButtonBehaviour>();
     buttonBehaviour = ob.GetComponent<ButtonBehaviour>();

即可。

2020年12月27日 星期日

'GoogleMobileAds/GoogleMobileAds.h' file not found 錯誤

2020.12.27 Winodws 版 Unity  安裝 Google Mobile Ads Unity plugin 後在 Editor 上沒有問題,但在輸出到 macOS 在 Xcode 上編譯到 iOS 上時會發生 'GoogleMobileAds/GoogleMobileAds.h' file not found 錯誤。

解決方式:

1. 先在終端機執行 sudo gem install cocoapods 會出現 Successfully installed cocoapods-X 才是正確。這個步驟只需執行一次。 

2. 一樣在終端機進入 Xcode 專案目錄,如 cd ~/Documents/Build 。

3. 終端機執行 pod update,第一次執行可能要 20 分鐘,出現 Pod installation complete! 才是正確,並會建立 Pod 資料夾。

4.用 Finder ( Xcode ) 開啟剛建立的的 iPhone.xcworkspace 即可正常輸出到 iOS 上,不要直接開啟下圖左方的.xcodeproj 。

5. 如果有更改內容重複執行步驟 2-4 即可,步驟 3 大約只需數分鐘。

2020年11月9日 星期一

判斷是否點擊在 UI 上 IsPointerOverGameObject() 總是傳回 false

2020.11.09 IsPointerOverGameObject() 在 Editor 上沒有問題,可是無法成功在 iOS 上成功,網路上提供三種方法,我只有第二種成功,就是將 IsPointerOverGameObject() 換成以下 IsPointerOverUIObject() 即可。

private bool IsPointerOverUIObject()
{
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
return results.Count > 0;
}

2020年10月2日 星期五

Unity 輸出檔案可在 iOS 檔案 App 存取

 2020.10.02 Unity 輸出檔案在 iOS 上如果跟其他 App 共用,必須在 Build 至 Xcode 專案時編輯Info.plist  按右鍵 Open As => Source Code ,如圖:

在中間加入兩個 Key 並存檔:

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

這樣在輸出到 iOS 實機上就能用 檔案 App 存取檔案。

2020年7月5日 星期日

Blender 建立低多邊地形並匯入 Unity

完成圖:


2019年8月19日 星期一

Unity 使用陣列類別物件

2019.08.19
★使用類別物件:
☆宣告類別:
 public class Cells
 {    public int x; }
☆建立物件:
 Cells Onecell = new Cells();
 Onecell.x=1;

2019年3月13日 星期三

Unity教程--塔防模板--動作遊戲套件

確認過的版本:2017.2
難度:中級

聲音

HealthChangeAudioSource

Health change audio source - 輔助生命值變化的播放音效




Unity教程--塔防模板--輸入

確認過的版本:2017.2
難度:中級

介紹

在前面的部分中,我們專注於設置遊戲攝影機和 UI。現在,我們需要使用鍵盤/滑鼠和觸控輸入系統來移動攝影機並與使用者界面互動。

Unity教程--塔防模板--使用者介面

確認過的版本:2017.2
難度:中級

介紹

我們希望向玩家提供有關當前遊戲狀態的某些信息。包括他們的基地保持多少生命值以及他們必須在塔上花多少錢。

本節介紹如何確保玩家可以獲得信息,主要是通過使用 UI Canvas 和 GameUI 元件。

Unity教程--塔防模板--攝影機

確認過的版本:2017.2
難度:中級

介紹

在本節中,我們將注意 CameraRig 元件,它控制攝像機的移動方式。在後面的部分中,我們將重點關注附加在 GameCamera 物件上的 UI 和輸入元件。

添加模板攝影機

Unity 塔防模板附帶設置用於塔防遊戲的預先設定攝影機。
  • 從場景 Hierarchy 視窗中刪預設攝影機
  • 將 GameCamera 預製體從Prefabs / Player /拖到 Hierarchy 視窗中註一

Unity教程--塔防模板--在塔防模板中設置舞台

確認過的版本:2017.2
難度:中級



介紹
現在我們已經創建了具有各種效果的塔和敵方代理,下一步是建立一個舞台,讓玩家可以建造塔以保護基地對抗這些敵人。

Unity教程--塔防模板--其他效果、顯示和行為

確認過的版本:2017.2
難度:中級

可視化生命值

為了向玩家顯示代理或塔剩餘的生命值,我們可以執行以下操作:
  • 從 Prefabs/UI/HUD 中拖動 HealthBar 預製體至使用 Tower、AttackingAgent 或 FlyingAgent 元件的遊戲物件使其成為子物件
  • 選擇 HealthBar 物件並將其父遊戲物件拖到 Damageable Behavior 欄位中

Unity教程--塔防模板--瞄準和發射

確認過的版本:2017.2
難度:中級

介紹

前面的部分提供了有關如何創建代理和塔的說明,但沒有介紹如何實際讓它們相互射擊。這在很大程度上是因為敵人和塔都需要相同的元件和過程。我們將以下介紹這些內容。

Unity教程--塔防模板--代理

確認過的版本:2017.2
難度:中級

介紹

現在我們有一座塔,我們需要一些東西讓塔進行防禦。這一節將解釋如何創建試圖攻擊玩家基地的敵方代理。設置舞台章節將介紹讓他們在舞台上導航的大部分過程,但如果沒有先使用必要的元件設置代理遊戲物件,我們將無法做到這一點。

請注意,我們將使用術語“代理”而不是“敵人”來歸類這些自主角色。