中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現C#代碼生成器應用服務于Unity

發布時間:2021-10-08 09:42:03 來源:億速云 閱讀:203 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python如何實現C#代碼生成器應用服務于Unity,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

開發目標:實現小紅帽所掛腳本的自動生成

下圖為生成的最終目標

Python如何實現C#代碼生成器應用服務于Unity

本項目是從json中讀取角色場景等信息,因此為了更好地判斷所用屬性是否需要,設置為bool類型,False表示在c#代碼中注釋掉該類屬性,True代表使用該屬性(屬性暫時設置為)

Timer = True # 計時器
    speed = False # 速度
    IsTrigger = True # 觸發器
    start_point = True # 起始位置
    localScale = True # 起始大小

主程序具體python代碼如下:

from string import Template
class BuildData:
    def Init(self):
        # 初始化各類$
        Timer = True
        speed = False
        IsTrigger = True
        start_point = True
        localScale = True
        # 輸出a.cs文件
        filePath = 'a.cs'
        class_file = open(filePath, 'w')
        # mycode用來存放生成的代碼
        mycode = []
        # 加載模板文件
        template_file = open('TMPL1.tmpl', 'rb')
        template_file = template_file.read().decode('utf-8')
        tmpl = Template(template_file)
        ##  模板替換
        # 1.需要判斷是否使用的模板,不使用的給他注釋掉
        if(Timer):
            TimerContent = ' '
        else:
            TimerContent = '///'
        if (speed):
            speedContent = ' '
        else:
            speedContent = '///'

        if (IsTrigger):
           IsTriggerContent =' '
        else:
            IsTriggerContent ='///'

        if (start_point):
            start_pointcontent= ' '
        else:
            start_pointcontent= '///'

        if (localScale):
            localScalecontent = ' '
        else:
            localScalecontent='///'
        # 2.固定的模板值更替
        mycode.append(tmpl.safe_substitute(
            TimerContent=TimerContent,
            speedContent=speedContent,
            IsTriggerContent=IsTriggerContent,
            start_pointcontent=start_pointcontent,
            localScalecontent=localScalecontent,
            role='Small_red_hat',
            x_start_point='12',
            y_start_point='-2',
            z_start_point='0',
            x_scale='0.45f',
            y_scale='0.5f',
            z_scale='1'
        ))
        # 將代碼寫入文件
        class_file.writelines(mycode)
        class_file.close()
        print('代碼已生成')
if __name__ == '__main__':
    build = BuildData()
    build.Init()

所設置的TMPL文件如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ${role} : MonoBehaviour
{
    ${TimerContent} public float Timer;         //set a Timer
    ${speedContent} public float speed;   //speed
    ${IsTriggerContent} public bool IsTrigger;      //set a trigger
    void Start()
    {
        //the start_point of ${role}
        ${start_pointcontent}transform.position = new Vector3(${x_start_point}, ${y_start_point}, ${z_start_point});
        //the scale of ${role}
        ${localScalecontent}transform.localScale = new Vector3(${x_scale},${y_scale}, ${z_scale});
    }
    void Update()
    {
        //Timer countdown
        ${TimerContent} Timer += Time.deltaTime;
        //when to move
        ${TimerContent} if (Timer >= 2f && Timer <= 4f) {  IsTrigger = true;}
        //when to stop
        ${TimerContent} else if (Timer > 3.5f){  IsTrigger = false;}
        //the speed of ${role}
        ${IsTriggerContent}if(IsTrigger){ transform.Translate(-0.04f, 0, 0);}

    }
}

自動生成的c#代碼展示如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Small_red_hat : MonoBehaviour
{
      public float Timer;         //set a Timer
    /// public float speed;   //speed
      public bool IsTrigger;      //set a trigger
    void Start()
    {
        //the start_point of Small_red_hat
         transform.position = new Vector3(12, -2, 0);
        //the scale of Small_red_hat
         transform.localScale = new Vector3(0.45f,0.5f, 1);
    }
    void Update()

    {
        //Timer countdown
          Timer += Time.deltaTime;
        //when to move
         if (Timer >= 2f && Timer <= 4f) {  IsTrigger = true;}
        //when to stop
          else if (Timer > 3.5f){  IsTrigger = false;}
        //the speed of Small_red_hat
        if (IsTrigger){ transform.Translate(-0.04f, 0, 0);}
    }
}

仔細觀察生成的結果,代碼與目標生成的代碼基本一致,(注釋暫時只能使用英文編輯。) 隨即把生成的代碼放在unity中,觀察運行情況。

運行前:

Python如何實現C#代碼生成器應用服務于Unity

運行后:

Python如何實現C#代碼生成器應用服務于Unity 

關于“Python如何實現C#代碼生成器應用服務于Unity”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉树县| 黎城县| 长春市| 射洪县| 老河口市| 菏泽市| 云霄县| 砀山县| 襄垣县| 崇阳县| 西平县| 安泽县| 定结县| 新乐市| 噶尔县| 城步| 枣庄市| 麻栗坡县| 盐城市| 湘乡市| 平罗县| 定西市| 扬州市| 长海县| 乌海市| 武川县| 大同县| 黎城县| 鹤岗市| 介休市| 甘南县| 富蕴县| 宜章县| 乾安县| 峨山| 汉川市| 吉安市| 鸡泽县| 白水县| 黄山市| 英德市|