發(fā)布時(shí)間:2024-04-13 09:55:53 瀏覽量:761次
這一次我將帶領(lǐng)大家用Unity3D游戲引擎去開(kāi)發(fā)一款游戲——坦克大戰(zhàn)。
游戲玩法如下:
通過(guò)“W”、“A”、“S”、“D”鍵控制玩家1(藍(lán)方)移動(dòng),空格鍵控制玩家1開(kāi)炮
通過(guò)方向鍵控制玩家2(紅方)移動(dòng),回車鍵控制玩家2開(kāi)炮
游戲演示效果如下:
說(shuō)明:游戲開(kāi)發(fā)平臺(tái):Windows 10、Unity版本:Unity 2017.2.0f3
按照下圖依次點(diǎn)擊“New”→“輸入工程名”→“選擇保存路徑”→“點(diǎn)擊Create project按鈕”
Unity工程創(chuàng)建完成后如圖所示:
接下來(lái)應(yīng)該導(dǎo)入此項(xiàng)目所需的Unity Package文件,要用到的Unity package文件大家可以去Unity3D的官方網(wǎng)站下載(地址:
https://www.assetstore.unity3d.com/en/?&_ga=
2.21331896.203842797.1510021401-332298740.1510021401#!/content/46209/)
導(dǎo)入Package的方法很簡(jiǎn)單,只需要在“Project”窗口下的“Assets”目錄上右鍵,再依次選擇“Import Package”→“Custom Package...”,選中下載好的package文件,然后在彈出的窗口中點(diǎn)擊“Import”按鈕即可
導(dǎo)入完成后目錄結(jié)構(gòu)如下:
首先在“Assets”目錄下新建一個(gè)文件夾“Scenes”,用來(lái)存放場(chǎng)景。創(chuàng)建方式如圖:右鍵”Assets“→”Create“→”Folder“
按下快捷鍵”Ctrl+S“保存場(chǎng)景,在目錄“Assets”→“Prefabs”下找到預(yù)制體“LevelArt”,將它拖入“Hierarchy”窗口中
隨后刪除“Directional Light”
3.1、坦克預(yù)制體的制作
在目錄“Assets”→“Models”下找到模型“Tank”,將它拖到“Hierarchy”窗口中
在“Tank”上右鍵選擇“Create Empty”,創(chuàng)建一個(gè)空的游戲物體“FiringPoint”。將“FiringPoint”用作炮彈的發(fā)射點(diǎn),后續(xù)將從此處發(fā)射(實(shí)例化)炮彈
將“發(fā)射點(diǎn)”調(diào)整到合適的位置,如下圖:
在“Tank”上右鍵“UI”→“Slider”創(chuàng)建一個(gè)滑動(dòng)條,后續(xù)我們將使用這個(gè)滑動(dòng)條作為坦克的血條,用來(lái)顯示坦克剩余的血量。
定位到“Canvas”中的“Slider”,展開(kāi)“Slider”滑動(dòng)條,將下面的“Handle Slide Area”刪除
因?yàn)槲覀儗⒁故镜难獥l是一個(gè)環(huán)狀的圖形,所以我們還需改變它的“Background”。
首先找到目錄“Assets”→“Sprites”下的“Health Wheel”,然后選中“Slider”下的“Background”,將前面的“Health Wheel”拖入到“Image”組件上的“Source Image”中,以此來(lái)改變Slider的背景
重復(fù)上述方式,改變“Fill Area”→“Fill”的“Source Image”
改變“Slider”的顯示方式,讓其居中,并將“Width”和“Height”設(shè)為一個(gè)合適的值,比如40
然后將“Slider”里面的“Baackground”、“Fill Area”、“Fill”都設(shè)置為上下左右填充的方式,并把它們的“Left”、“Right”、“Top”、“Bottom”統(tǒng)統(tǒng)設(shè)為零。然后定位到“Fill”,把“Image”組件的“Color”屬性修改為血紅色,把“Image Type”屬性修改為“Filled”
到這一步血環(huán)的基本樣式就做好了,你可以通過(guò)改變“Slider”的“Value”的大小來(lái)檢測(cè)效果,效果如下圖:
上述效果完成之后,還需把“Canvas”的“Render Mode”改為“World Space”,并將“Canvas”整體拖入“Tank”下
修改“Slider”的顯示,將其改為上下左右填充,修改“Canvas”的“Width”、“Height”,將它們改為合適的大小,比如3.8,將“Canvas”圍繞X軸旋轉(zhuǎn)90度,也就是將“Rotation”的“X”改為90,以讓其與地面平行,效果如下:
選中游戲物體“Tank”,點(diǎn)擊“Inspector”窗口中的“Add Component”按鈕搜索并添加“Rigidbody”和“Box Collider”兩個(gè)組件
然后點(diǎn)擊“Edit Collider”按鈕編輯碰撞器的大小,讓它吻合坦克的大小即可,如下圖,編輯坦克上的綠框即可進(jìn)行調(diào)整
至此,坦克的預(yù)制體基本制作完畢,別忘了還要將它拖入到“Assets”→“Prefabs”目錄下才算徹底完成
3.2、炮彈預(yù)制體的制作
同樣的,在目錄“Assets”→“Models”下找到“Shell”的模型并將其拖放到場(chǎng)景中,然后通過(guò)“Inspector”窗口下的“Add Component”按鈕添加兩個(gè)組件,分別是“Rigidbody”和“Capsule Collider”
同樣的,通過(guò)編輯碰撞器的大小來(lái)吻合炮彈的大小,這里還要將碰撞器的”Direction“屬性改為”Z-Axis“
這樣炮彈預(yù)制體的制作也結(jié)束了,一樣的,不要忘了要將”Hierarchy“窗口下的”Shell“拖到目錄”Assets“→”Prefabs“下才算完成
我們的游戲有兩個(gè)玩家,自然就需要兩個(gè)坦克。前文已經(jīng)說(shuō)過(guò),我們將通過(guò)”W“、”A“、”S“、”D“鍵控制玩家1(1號(hào)坦克)、通過(guò)方向鍵控制玩家2(2號(hào)坦克)。
首先將之前在”Hierarchy“窗口下的”Tank“和”Shell“兩個(gè)游戲物體刪除。隨后將目錄”Prefabs“下的”Tank“放入場(chǎng)景中,當(dāng)然需要放入兩個(gè),并把它們分別重命名為”Tank1“、”Tank2“。
為了便于區(qū)分,我把”Tank1“設(shè)成藍(lán)色,把”Tank2“設(shè)為紅色
展開(kāi)”Tank1“→”TankRenderers“,分別將其下面的”TankChassis“、”TankTracksLeft“、”TankTracksRight“、”TankTurret“中的”Materials“的屬性”Element 0“的值改為目錄”Prefabs“→”Materials“下的”Blue“
對(duì)”Tank2“重復(fù)上述操作,只不過(guò)把材料”Blue“替換為”Red“
改完后的整體效果如下:
4.1、控制坦克移動(dòng)
在控制坦克的移動(dòng)之前我們稍微進(jìn)行一下項(xiàng)目設(shè)置,因?yàn)橐?strong>讓Unity區(qū)分”W“、”A“、”S“、”D“鍵和方向鍵并做不同的控制。
首先在菜單欄中依次點(diǎn)擊”Edit“→”Project Settings“→”Input“
然后在”Inspector“窗口下右鍵”Axes“→”Horizontal“,再點(diǎn)擊”Duplicate Array Element“復(fù)制兩個(gè)”Horizontal“,將復(fù)制得到的一個(gè)”Horizontal“的”Name“改為”HorizontalPlayer1“并去掉其中的”left“、”right“兩個(gè)值,因?yàn)槲覀冎幌Mㄟ^(guò)”A“、”D“鍵而不是左右鍵來(lái)控制玩家1的移動(dòng)(轉(zhuǎn)向);同理將復(fù)制得到的另一個(gè)”Horizontal“的”Name“改為”HorizontalPlayer2“并去掉其中的”A“、”D“兩個(gè)值,因?yàn)槲覀冎幌Mㄟ^(guò)左右方向鍵而不是”A“、”D“鍵來(lái)控制玩家2的移動(dòng)(轉(zhuǎn)向)。
對(duì)于”Vertical“重復(fù)上面的操作,只不過(guò)要把上面的”Horizontal“全部替換為”Vertical“。
給坦克的預(yù)制體添加一個(gè)腳本組件,將其命名為”TankMovement“。右鍵此腳本,點(diǎn)擊”Edit Script“,編輯腳本文件的內(nèi)容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankMovement : MonoBehaviour {
private Rigidbody rb;
public int number = 1; // 通過(guò)編號(hào)區(qū)分不同坦克
public float speed = 10; //速度大小
public float angularSpeed = 10; //轉(zhuǎn)向角度
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
float h = Input.GetAxis("HorizontalPlayer" + number);
float v = Input.GetAxis("VerticalPlayer" + number);
rb.velocity = transform.forward * v * speed;
rb.angularVelocity = transform.up * h * angularSpeed;
}
}
因?yàn)閚umber默認(rèn)為1,所以需要修改”Tank2“的”Tank Movement“組件下的”Number“屬性,將其改為2。
然后需要注意一點(diǎn),我們還要把”Tank“預(yù)制體的”Constraints“下的”Freeze Position“的”Y“給勾選上,把”Freeze Rotation“的”X“、”Z“勾選上
4.2、控制坦克攻擊
給坦克的預(yù)制體添加一個(gè)腳本組件,將其命名為”TankAttack“。右鍵此腳本,點(diǎn)擊”Edit Script“,編輯腳本文件的內(nèi)容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankAttack : MonoBehaviour {
public Transform firingPointTransform;
public GameObject shellPrefab;
public KeyCode firingKey = KeyCode.Space; // 開(kāi)火鍵,默認(rèn)為空格鍵
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(firingKey)) {
Instantiate(shellPrefab,
firingPointTransform.position,
firingPointTransform.rotation); // 發(fā)射炮彈即實(shí)例化炮彈}
}
}
寫入以上代碼后,別忘了在Unity中給”firingPointTransform“和”shellPrefab“賦值,然后再把”Tank2“的”firingKey“改為回車鍵。
在”Shell“預(yù)制體上添加一個(gè)腳本組件,并命名為”Shell“,用來(lái)控制炮彈的飛行和爆炸。右鍵此腳本組件并選擇”Edit Script“,編輯腳本的內(nèi)容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shell : MonoBehaviour {
private Rigidbody rb;
public GameObject shellExplosionPrefab;
public float shellSpeed = 15;
private float duration = 1.50f; // 爆炸動(dòng)畫效果持續(xù)時(shí)間
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
rb.velocity = transform.forward * shellSpeed;
}
private void OnCollisionEnter(Collision collision)
{
GameObject shellExplosion = Instantiate(shellExplosionPrefab, transform.position, transform.rotation) as GameObject;
Destroy(gameObject);
Destroy(shellExplosion, duration);
}
}
同樣別忘了在Unity中給屬性”shellExplosionPrefab“賦值。還要記得把”ShellExplosion“的”Play On Awake“勾選上。這樣動(dòng)畫才能播放
首先修改”Shell.cs“腳本的內(nèi)容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shell : MonoBehaviour {
private Rigidbody rb;
public GameObject shellExplosionPrefab;
public float shellSpeed = 15;
private float duration = 1.50f; // 爆炸動(dòng)畫效果持續(xù)時(shí)間
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
rb.velocity = transform.forward * shellSpeed;
}
private void OnCollisionEnter(Collision collision)
{
GameObject shellExplosion = Instantiate(shellExplosionPrefab, transform.position, transform.rotation) as GameObject;
Destroy(gameObject);
Destroy(shellExplosion, duration);
// 如果炮彈攻擊到的是坦克,則對(duì)此坦克造成傷害
if (collision.collider.tag == "Tank") {
collision.collider.SendMessage("TankDamage");
}
}
}
給坦克的預(yù)制體添加一個(gè)名為”TankHealth“的腳本組件用來(lái)控制坦克的血量,編輯腳本,其內(nèi)容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TankHealth : MonoBehaviour {
public float hp = 100; // 坦克默認(rèn)共有100滴血
private float hpTotal;
public GameObject tankExplosionPrefab;
private float duration = 1.05f;
public Slider slider;
// Use this for initialization
void Start () {
hpTotal = hp;
}
// Update is called once per frame
void Update () {
}
// 坦克受到傷害
private void TankDamage() {
hp -= Random.Range(10, 20);
slider.value = hp / hpTotal;
if (hp <= 0) { // 坦克血量小于0,被干掉了
GameObject tankExplosion = Instantiate(tankExplosionPrefab, transform.position, transform.rotation) as GameObject;
Destroy(gameObject);
Destroy(tankExplosion, duration);
}
}
}
還是那句話,別忘了在Unity中給屬性”tankExplosionPrefab“和”slider“賦值。當(dāng)然”TankExplosion“的”Play On Awake“也要勾選上。
在控制相機(jī)”Camera“之前,先把相機(jī)的投影方式改為正交投影”O(jiān)rthographic“,并控制相機(jī)視角讓其正好同時(shí)能觀察到兩個(gè)坦克
7.1、控制相機(jī)的跟隨
在相機(jī)”Main Camera“中添加腳本組件,并將其命名為”FollowTarget“,腳本文件的內(nèi)容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowTarget : MonoBehaviour {
public Transform tank1Transform;
public Transform tank2Transform;
private Vector3 offset; // 相機(jī)和兩坦克的相對(duì)位移,保持其不變即可完成相機(jī)跟隨
// Use this for initialization
void Start () {
offset = transform.position - (tank1Transform.position + tank2Transform.position) / 2;
}
// Update is called once per frame
void Update () {
if (tank1Transform == null || tank2Transform == null) return;
transform.position = (tank1Transform.position + tank2Transform.position) / 2 + offset;
}
}
這里也要注意別忘了給”tank1Transform“和”tank2Transform“這兩個(gè)屬性賦值。
7.2、控制視野范圍的變化
再次打開(kāi)腳本文件”FollowTarget.cs“,修改為如下內(nèi)容:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowTarget : MonoBehaviour {
public Transform tank1Transform;
public Transform tank2Transform;
private Camera c;
private Vector3 offset; // 相機(jī)和兩坦克的相對(duì)位移,保持其不變即可完成相機(jī)跟隨
private float viewProportion; // 此視野比例乘兩坦克之間的距離即是當(dāng)前視野大小
// Use this for initialization
void Start () {
c = GetComponent<Camera>();
offset = transform.position - (tank1Transform.position + tank2Transform.position) / 2;
viewProportion = c.orthographicSize / Vector3.Distance(tank1Transform.position, tank2Transform.position);
}
// Update is called once per frame
void Update () {
if (tank1Transform == null || tank2Transform == null) return;
transform.position = (tank1Transform.position + tank2Transform.position) / 2 + offset;
c.orthographicSize = viewProportion * Vector3.Distance(tank1Transform.position, tank2Transform.position);
}
}
將上面內(nèi)容添加完畢后你會(huì)發(fā)現(xiàn),兩個(gè)坦克會(huì)一直處于相機(jī)視野的中心,并且視野范圍會(huì)隨著兩個(gè)坦克之間距離的變化而變化。
終于到最后了,在這里我們將給游戲添加音效,讓游戲玩起來(lái)更帶感!
你可以定位到”Assets“→”AudioClips“目錄下看一看已經(jīng)準(zhǔn)備好的音樂(lè),有游戲的背景聲、坦克的引擎聲、炮彈的爆炸聲等等,也可以先聽(tīng)一聽(tīng)它的效果
8.1、添加游戲背景音
首先我們來(lái)添加背景聲,在”Hierarchy“窗口下右鍵→”Create Empty“創(chuàng)建一個(gè)空的游戲物體并命名為”GameManager“
按照下圖步驟給”GameManager”添加一個(gè)”Audio Source“組件
下面給“Audio Source”設(shè)置一個(gè)聲音源,將“Assets”→“AudioClips”目錄下的背景音樂(lè)的聲音設(shè)置為“AudioClip”的值,并將“Play On Awake”和“Loop ”給勾選上。這樣背景聲就可以循環(huán)播放
8.2、給坦克添加引擎聲和銷毀聲
8.2.1、設(shè)置引擎聲
接下來(lái)我們?cè)O(shè)置坦克引擎的聲音,打開(kāi)腳本“TankMovement.cs”,修改為如下內(nèi)容:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankMovement : MonoBehaviour {
private Rigidbody rb;
public int number = 1; // 通過(guò)編號(hào)區(qū)分不同坦克
public float speed = 10; //速度大小
public float angularSpeed = 10; //轉(zhuǎn)向角度
public AudioClip engineDrivingAudio;
public AudioClip engineIdleAudio;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
float h = Input.GetAxis("HorizontalPlayer" + number);
float v = Input.GetAxis("VerticalPlayer" + number);
rb.velocity = transform.forward * v * speed;
rb.angularVelocity = transform.up * h * angularSpeed;
if (Mathf.Abs(h) > 0.1 || Mathf.Abs(v) > 0.1)
{
AudioSource.PlayClipAtPoint(engineDrivingAudio, transform.position);
}
else {
AudioSource.PlayClipAtPoint(engineIdleAudio, transform.position);
}
}
}
8.2.2、設(shè)置銷毀聲
打開(kāi)腳本文件“TankHealth.cs”并按如下內(nèi)容進(jìn)行修改:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TankHealth : MonoBehaviour {
public float hp = 100; // 坦克默認(rèn)共有100滴血
private float hpTotal;
public GameObject tankExplosionPrefab;
private float duration = 1.05f;
public Slider slider;
public AudioClip tankExplosionAudio;
// Use this for initialization
void Start () {
hpTotal = hp;
}
// Update is called once per frame
void Update () {
}
// 坦克受到傷害
private void TankDamage() {
hp -= Random.Range(10, 20);
slider.value = hp / hpTotal;
if (hp <= 0) { // 坦克血量小于0,被干掉了
GameObject tankExplosion = Instantiate(tankExplosionPrefab, transform.position, transform.rotation) as GameObject;
Destroy(gameObject);
Destroy(tankExplosion, duration);
AudioSource.PlayClipAtPoint(tankExplosionAudio, transform.position);
}
}
}
8.3、給炮彈添加聲音
8.3.1、設(shè)置炮彈的裝載聲
打開(kāi)腳本“TankAttack.cs”,將內(nèi)容修改如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankAttack : MonoBehaviour {
public Transform firingPointTransform;
public GameObject shellPrefab;
public KeyCode firingKey = KeyCode.Space; // 開(kāi)火鍵,默認(rèn)為空格鍵
public AudioClip shotChargingAudio;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(firingKey)) {
Instantiate(shellPrefab,
firingPointTransform.position,
firingPointTransform.rotation); // 發(fā)射炮彈即實(shí)例化炮彈AudioSource.PlayClipAtPoint(shotChargingAudio, transform.position);
}
}
}
8.3.2、設(shè)置炮彈的開(kāi)火聲和爆炸聲
打開(kāi)腳本文件“Shell.cs”,將內(nèi)容修改如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shell : MonoBehaviour {
private Rigidbody rb;
public GameObject shellExplosionPrefab;
public float shellSpeed = 15;
private float duration = 1.50f; // 爆炸動(dòng)畫效果持續(xù)時(shí)間
public AudioClip shellExplosionAudio;
public AudioClip shotFiringAudio;
// Use this for initialization
void Start () {
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
rb.velocity = transform.forward * shellSpeed;
AudioSource.PlayClipAtPoint(shotFiringAudio, transform.position);
}
private void OnCollisionEnter(Collision collision)
{
GameObject shellExplosion = Instantiate(shellExplosionPrefab, transform.position, transform.rotation) as GameObject;
Destroy(gameObject);
Destroy(shellExplosion, duration);
AudioSource.PlayClipAtPoint(shellExplosionAudio, transform.position);
// 如果炮彈攻擊到的是坦克,則對(duì)此坦克造成傷害
if (collision.collider.tag == "Tank") {
collision.collider.SendMessage("TankDamage");
}
}
}
到這里音效的設(shè)置也算告一段落了,還是要提醒一下別忘了在Unity中給相關(guān)的“AudioClip”屬性賦值。然后也別忘了保存場(chǎng)景哦。
好了,差不多就這樣吧!一個(gè)簡(jiǎn)單的坦克對(duì)戰(zhàn)的游戲就基本開(kāi)發(fā)完成了,你還可以把該游戲Build到電腦上,勁情享受自己開(kāi)發(fā)的游戲帶來(lái)的樂(lè)趣吧!
--END
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開(kāi)發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說(shuō)明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白。快來(lái)試試!
4. Steam值得入手的武俠游戲盤點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛(ài)恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)漫建模全過(guò)程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
7. 3D動(dòng)畫軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫軟件或動(dòng)畫工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫的軟件程序。但是,在3D動(dòng)畫軟件中還包含了其他類型的...
8. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
9. 開(kāi)發(fā)三昧游戲叫什么(三昧動(dòng)漫)
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 虛幻引擎5節(jié)省存儲(chǔ)空間用這招!緩存的清理與設(shè)置
眾所周知,虛幻引擎5(下面簡(jiǎn)稱UE5)特別占用存儲(chǔ)空間,僅一個(gè)版本安裝好的文件就有60G,這還不包括我們?cè)谑褂脮r(shí)保存的工程文件和隨之產(chǎn)生的緩存文件。而...
最新文章
同學(xué)您好!