該文章旨在介紹如何在Unity中調(diào)用和執(zhí)行Python程序。與以往只能事先運行Python程序不同,集成的方法可以根據(jù)Unity中某些參數(shù)的變化,自由的控制Python程序的開啟。此外,我們還對過程中,可能會遇到的問題給出解決方法。
希望能幫助到你。??ヽ(°▽°)ノ?
一. 在Unity中引入Python模塊
1. 打開文件
在Unity程序Assets同一目錄下找到 Package 文件夾;以記事本方式打開 manifest.json 文件。
2. 修改文件
添加一行 "com.unity.scripting.python": "5.0.0-pre.5",
注意有個逗號。保存之后回到Unity 等待自動安裝相應(yīng)的包。
3. Unity中的Python控制面板
在 Window/General/Python Console下打開 Python的控制面板。如果可以到這一步,就說明接口安裝成功。
4. 測試一下
上方是結(jié)果輸出臺,下方是python腳本編寫區(qū)域。點擊“Execute”執(zhí)行腳本。
當然,腳本也可以外部獲得,點擊“Load”,選擇你要添加的Python腳本即可。
二. 在Unity中腳本調(diào)用Python
1. 存放Python文件夾
在Unity程序中,新建一個用于存放Python程序的文件夾。本文中python的路徑如下。
該腳本的代碼如下,其功能是找到Unity中的Para物體并修改它的名字。
如果,在運行時報錯:‘gbk‘ codec can‘t decode byte 0x80
,快去看 3.1小節(jié)。
import UnityEngine as ue #這個會劃紅線報錯,不用管
object =ue.Object.FindObjectsOfType(ue.GameObject) #獲取Unity中所有的GameObject類型
for go in object:
if go.name =="Para": #找到一個名字是“Para”物體 就把它的名字改成“123”
go.name="123"
else:
ue.Debug.Log(go.name) # 在Unity的控制臺中輸出物體的名字
2. Unity調(diào)用
① 引入頭文件:using UnityEditor.Scripting.Python;
② 獲取Python文件路徑:string python_path = Application.dataPath + "/Python/Python_Unity.py";
③ 設(shè)置開啟條件:我們以按下鍵盤A鍵為例。
④ 運行Python文件:調(diào)用 PythonRunner.RunFile
整體的代碼如下?;氐経nity中運行,當按下A鍵后,場景中名為“Para”的物體,名字被修改為“123”。
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
string python_path = Application.dataPath + "/Python/Text_Sentiment.py";
PythonRunner.RunFile(python_path);
}
}
至此,在腳本中如何運行Python程序已介紹完畢。
但是,在實際的應(yīng)用中還有一些問題,我們在下一章節(jié)展開。
三. 實操中的問題
1. 運行Python文件中出現(xiàn)的 gbk 問題
在運行時可能會報錯:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 0: illegal multibyte sequence
這個錯誤我是真的會謝?。ǘd頭…)
解決方法:Python文件中的所有注釋全部刪除,即無“井號鍵 ”。
2. com.unity.scripting.python 版本
在 1.2 節(jié)中,我們下載的 unity.scripting.python 是 5.0.0版本,在Unity里安裝的Python版本為3.9,并且這個是不能更改的。在 Project Setting/ Python Scripting 可以查看詳細信息。如果你想更改其他版本可以參考這個鏈接 Using Python in Unity 。
3. 程序之前運行的環(huán)境 和 Unity中Python環(huán)境不一致
通常來說,想要在Unity中調(diào)用的Python程序(記為,A.py),我們都事先在Pycharm中的某個Python 環(huán)境下運行成功了(假設(shè),A.py在Python=3.6中成功運行)。此外,它可能還依附了其他包,這些包需要與python版本對應(yīng)起來,才能正常的運行。
所以,A.py 直接在Unity的python=3.9 環(huán)境下運行可能會報錯
。此外,程序里需要的包在Unity下的環(huán)境中都是沒有的。因為,現(xiàn)在的程序都依賴于一個sit-package 即 Assets/sit-package
。
為解決這個問題,我認為有三種方法:
① 在Unity的Python=3.9環(huán)境下,重新 pip install 需要的包;
在Python Scripting面板下點擊 Spawn shell in enviorment ,包的安裝與配置Python一致。
注意:
這種方法或許有效,但是可能還是會有錯,因為畢竟是在Unity下去安裝包。可能會因為Unity平臺自身的原因出錯。我在嘗試的時候,導(dǎo)入某個包的時候會一直報錯(具體是哪個忘記了> <)。所以,大家可以試一下后面兩種方法。
② 添加site-package;
假設(shè),A.py是在Python=3.6中運行,則添加正常運行A.py的python=3.6的環(huán)境下的sit-package。
把路徑復(fù)制到 Python Scripting面板下,重啟Unity生效。
注意:
這個方法,基本上沒有問題,比較推薦。
但是當你在運行多個Python程序時,可能每個程序的環(huán)境都不一樣,這就需要添加多個site-package。在Unity腳本執(zhí)行 PythonRunner.RunFile時,可能會先執(zhí)行 Element 1路徑下的site-package,如果不是對應(yīng)的環(huán)境信息還是會報錯。這里我就沒有細究PythonRunner能否指定site-package的功能了。直接開搞第三個方法!一勞永逸!
③ 重新創(chuàng)建一個python=3.9的環(huán)境;
最后,我自己在Unity執(zhí)行Python時,還是采用了最后一種方法。在conda 下新建了一個虛擬環(huán)境,且在python=3.9版本下配置環(huán)境
。然后,在把這個環(huán)境對應(yīng)的site-package添加到 ②中提及的路徑中。
我用這個方法實現(xiàn)了自己想要達到的功能。
所以,大家還是根據(jù) A.py的實際情況,來選擇解決方法吧。
最后,有什么問題歡迎大家留言交流哦~文章來源:http://www.zghlxwxcb.cn/news/detail-784864.html
寫在最后
今年過的好快啊,我也希望自己能成功,加油吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-784864.html
到了這里,關(guān)于Unity中運行Python —集成— 解決可能會遇到的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!