คำถามติดแท็ก unity

Unity เป็นระบบการสร้างเกมข้ามแพลตฟอร์มที่มุ่งเน้นกระบวนการไปป์ไลน์ที่ง่าย ประกอบด้วยเอ็นจิ้นเกมและสภาพแวดล้อมการพัฒนาแบบรวม การสร้างสคริปต์ของเอ็นจิ้นเกมสร้างขึ้นบนโมโน

2
รหัสใดในสองรหัสนี้ที่ 'ดีกว่า' ทำให้ตัวแปรท้องถิ่นหรือตัวแปรคลาส?
ฉันสร้างเกมมากขึ้นและถามคำถามที่โง่กว่านี้ หวังว่าอันนี้จะสั้นมาก ฉันกำลังสร้างคลาสพื้นฐานที่เพิ่งย้ายวัตถุ Player โดยใช้กำลังกับคนที่แข็งทื่อ แต่มันทำให้ฉันสงสัยว่าฉันควรจะอ้างอิงคลาสกับ rb หรือเพียงแค่ตัวแปรท้องถิ่นในอัปเดตทุกเฟรมหรือไม่ (จำไว้ว่ามันมีอยู่แล้วใน Monobehaviour.GameObject ระดับผู้ปกครองสามัคคี) ฉันสงสัยว่าถ้าทำหลายตัวแปรในท้องถิ่นจะทำให้วงทั้งหมดช้าลง (โดยเฉพาะที่ฉันหมายถึงในฟังก์ชั่นของตัวเองไม่ใช่ในชั้นเรียน - หวังว่าฉันจะใช้คำศัพท์ที่ถูกต้อง) นี่คือสิ่งที่ฉันหมายถึงสองวิธีที่ฉันคิดทำ: public class Player : MonoBehaviour { private void FixedUpdate() { Rigidbody rb = GetComponent<Rigidbody>(); float v = Input.GetAxis("Vertical"); rb.AddForce(v * rb.transform.forward * Const.walkForce); } } หรือ... public class Player : MonoBehaviour { Rigidbody rb; …
11 unity  c#  game-loop 

2
วิธีการใส่เมาส์ล่าช้า?
ฉันมีเกมรถและแนวคิดก็คือผู้เล่นนั้นเมา ฉันต้องการอินพุตที่ล่าช้าจากเมาส์ซึ่งคุณเลื่อนเมาส์ไปทางด้านข้างเพื่อเลื่อน ฉันจะตั้งค่าการหน่วงเวลาคงที่ระหว่างอินพุตที่ผู้ใช้ให้และจำนวนเทิร์นของรถได้อย่างไร? ตอนนี้ฉันมีสิ่งนี้: h = Mathf.Lerp(h, (((Input.mousePosition.x / Screen.width) * 2) - 1), Time.deltaTime * 2); สิ่งที่เกิดขึ้นคือการเลี้ยวล่าช้า แต่ช้ามากกล่าวอีกนัยหนึ่งถ้าฉันเลื่อนเมาส์เร็วรถจะหมุนช้ามาก แต่ถ้าฉันหมุนตัวคูณเพื่อTime.deltaTimeให้รถหมุนเร็วขึ้น แต่เอฟเฟกต์ล่าช้าจะลดลง . ฉันจะทำสิ่งนี้ได้อีก
11 unity  c#  input  mouse 

2
ฉันจะกำหนดสคริปต์ที่สร้างขึ้นเองโดยอัตโนมัติได้อย่างไร
เมื่อคุณสร้างสคริปต์ผ่านตัวแก้ไข Unity สคริปต์จะสร้างสคริปต์ด้วยโค้ดที่จัดรูปแบบไว้ล่วงหน้า using System.Collections; using System.Collections.Generic; using UnityEngine; public class GenericClass : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } เมื่อฉันสร้างสคริปต์โดยทั่วไปฉันรับประกันว่าจะใช้รหัสเพิ่มเติมเช่นเนมสเปซหรือตัวแก้ไขที่กำหนดเอง นอกจากนี้ฉันมักจะลบเนื้อหาออกจากสคริปต์ที่สร้างขึ้นโดยอัตโนมัติ มีวิธีในการเปลี่ยนรหัสอัตโนมัติที่สร้างโดย Unity หรือไม่
11 unity 

2
ตรวจสอบว่าองค์ประกอบของวัตถุในเกมสามารถถูกทำลายได้หรือไม่
การพัฒนาเกมใน Unity ฉันใช้ประโยชน์อย่างมากมาย[RequireComponent(typeof(%ComponentType%))]เพื่อให้แน่ใจว่าส่วนประกอบต่างๆมีการพึ่งพาทั้งหมด ตอนนี้ฉันกำลังใช้ระบบการสอนที่เน้นวัตถุ UI ต่างๆ เพื่อทำการไฮไลต์ฉันกำลังอ้างอิงถึงGameObjectในฉากจากนั้นฉันโคลนด้วย Instantiate () จากนั้นปลดส่วนประกอบทั้งหมดที่ไม่จำเป็นสำหรับการแสดงซ้ำ ปัญหาคือว่าด้วยการใช้งานอย่างเสรีRequireComponentในองค์ประกอบเหล่านี้หลายคนไม่สามารถลบออกได้ในลำดับใด ๆ เนื่องจากมันขึ้นอยู่กับส่วนประกอบอื่น ๆ ซึ่งยังไม่ถูกลบ คำถามของฉันคือ: มีวิธีการตรวจสอบว่าComponentสามารถลบออกจากที่GameObjectแนบมากับปัจจุบันได้หรือไม่ รหัสที่ฉันโพสต์ใช้งานได้ทางเทคนิค แต่มันมีข้อผิดพลาด Unity (ไม่ติดในบล็อค try-catch ดังที่เห็นในภาพ นี่คือรหัส: public void StripFunctionality(RectTransform rt) { if (rt == null) { return; } int componentCount = rt.gameObject.GetComponents<Component>().Length; int safety = 10; int allowedComponents = 0; while (componentCount …
11 unity  c# 

2
ฉันจะมองเห็นการเปลี่ยนแปลงที่เกิดขึ้นกับฉากได้อย่างไรตั้งแต่คอมไพล์ล่าสุดส่งมอบ
ฉันต้องการดูการเปลี่ยนแปลงที่เกิดขึ้นในฉาก (ไฟล์. unity) ก่อนที่จะส่งไปคอมไพล์ ฉันได้ดูโซลูชัน GIT / Unity หลายอย่าง แต่ทั้งหมดนี้ทำเพื่อรวมการเปลี่ยนแปลงและไม่แสดงความแตกต่างกับรุ่นล่าสุด ปัญหาเกี่ยวกับไฟล์ซีนคือพวกเขาใช้ GUID ที่ชี้ไปที่สินทรัพย์อื่นและเมื่อฉันเปิดไฟล์ diff สำหรับไฟล์ซีนฉันไม่สามารถทำอะไรออกมาได้เลย ตัวอย่างเช่น: แต่ฉันต้องการเห็นสิ่งนี้: มีอะไรอีกไหมที่ทำสิ่งนี้?

3
ฉันจะทำให้หยดฝนธรรมชาติบนหน้าจอได้อย่างไร
ฉันกำลังพยายามทำให้เอฟเฟกต์ฝนตกด้วยmetaballsและ trail บนหน้าจอฉันพบเบาะแสใน shadertoy แต่ฉันไม่เข้าใจวิธีการใช้งาน: https://www.shadertoy.com/view/ltffzl น่าเสียดายที่มันมีการคำนวณทางคณิตศาสตร์มากมายและฉันไม่สามารถใช้งานแบบเอกภาพได้เพราะมันสร้างความล่าช้าแน่นอนว่าฉันควรใช้พื้นผิว แต่ฉันจะมีเอฟเฟกต์เส้นทางได้อย่างไร! ความคิดของฉันคือการใช้ texture และ trail renderer สำหรับการดร็อป แต่ฉันจะมีเอฟเฟกต์เมทัลลิลได้อย่างไร ปรับปรุง ฉันสามารถใช้ Metaballs ได้โดยบทความนี้ https://github.com/smkplus/RainFX/tree/master แต่ฉันไม่ได้คิดเกี่ยวกับเส้นทาง

2
จะรอการดำเนินการ async / coroutines ได้อย่างไร
ฉันกำลังมองหาวิธีทั่วไป / นำมาใช้ซ้ำเพื่อรอ coroutines และการดำเนินการแบบอะซิงโครนัสให้เสร็จใน Unity 5 คล้ายกับawaitคำสำคัญของ C # 5 วิธีที่ง่ายที่สุดที่ฉันนึกได้ก็คือ: public class SomeUtility { public bool IsDoingSomething { get; private set; } public IEnumerator DoSomethingAsync() { IsDoingSomething = true; yield return new WaitForSeconds(2); IsDoingSomething = false; } } และจากนั้นใน coroutine อื่น: while(!someUtilityInstance.IsDoingSomething) yield return null; อย่างไรก็ตามมันไม่ได้ดีมากเพราะมันจะตัดโค้ดที่มีwhileคำสั่งไม่สามารถใช้ซ้ำได้ (ต้องการอินสแตนซ์และคลาสเฉพาะแม้กระทั่งสำหรับฟังก์ชั่นยูทิลิตี้ง่าย ๆ …

2
วิธีการใช้ BillboardRenderer ใน Unity
ตั้งแต่เวอร์ชั่น 5 (?) BillboardRendererความสามัคคีมีองค์ประกอบใหม่ชนิด น่าเสียดายที่เอกสารค่อนข้างแย่ มันสามารถเพิ่มในการตรวจสอบโดยคลิกที่ "เพิ่มส่วนประกอบ -> ผิด -> บิลบอร์ด Renderer" แต่เห็นได้ชัดว่ามันต้องมีBillboard Assetการทำอะไร ดูเหมือนจะไม่มีวิธีใดที่จะสร้างได้จากอินเทอร์เฟซ Unity หนึ่งในไม่กี่ประโยคจากเอกสารที่ไม่ดีเท่า ๆ กันของ BillboardAsset อ่าน: imageCount จำนวนรูปภาพที่เตรียมไว้ล่วงหน้าที่สามารถเปลี่ยนได้เมื่อดูบิลบอร์ดจากมุมที่แตกต่างกัน โปรเจ็กต์ใหม่ล่าสุดของฉันจะมีกราฟิกผสมสไปรต์ / รูปหลายเหลี่ยมดังนั้นส่วนประกอบที่แสดงป้ายโฆษณาที่มีสไปรต์ที่แตกต่างกันขึ้นอยู่กับมุมมองเป็นสิ่งที่ฉันสามารถใช้ประโยชน์ได้ แต่ดูเหมือนจะไม่มีวิธีใด ๆ ในการเพิ่มภาพดังกล่าว ดังนั้นฉันสงสัยว่าคุณสามารถโพสต์ตัวอย่างวิธีการใช้องค์ประกอบนี้
11 unity 

2
A * การค้นหาเส้นทางสำหรับสิ่งกีดขวางแบบไดนามิกและผู้เล่นทำการบล็อก
สวัสดีฉันกำลังสร้าง TD ใน Unity 5 และต้องการความช่วยเหลือเกี่ยวกับ Pathfinding ของฉัน ฉันจะใช้การหาเส้นทางของ Arons A *สำหรับ AI ของฉันซึ่งทำให้ฉันสามารถใช้วัตถุแบบไดนามิกและอัปเดตเส้นทางในช่วงเวลาทำงาน อย่างไรก็ตามในเกมของฉันฉันต้องการให้ผู้เล่นสามารถบล็อกมินเนียนด้วยป้อมปราการพิเศษซึ่งจะบังคับให้มินเนี่ยนโจมตี "บล็อกทาวเวอร์" แทนการผ่านไปยังปลายทางของพวกเขา ฉันจะทำสิ่งนี้ได้อย่างไร ภาพเพื่อความชัดเจนมากขึ้น:
11 unity  c#  2d  ai  path-finding 

2
ใน Unity เหตุใดจึงเพิ่ม Vector2 และ Vector3 ที่ไม่ชัดเจน แต่การกำหนดไม่ใช่
ให้เวกเตอร์สองตัวต่อไปนี้: Vector3 v3 = Vector3.one; Vector2 v2 = Vector2.one; บรรทัดนี้ไม่ชัดเจน: v3 += v2; // Unity reports dimension ambiguity ในขณะที่การมอบหมายนี้ไม่ได้: v3 = v2; // Unity assigns despite different dimensions ทำไมนี้
11 c#  unity  2d  3d  vector 

6
Game Objects ที่อยู่นอกมุมมองกล้องใช้ทรัพยากรคอมพิวเตอร์ / มือถือใน Unity หรือไม่?
ในความเป็นเอกภาพขอให้เราสมมติว่าฉันมี Game Objects บางอย่างในฉากของฉันที่มองไม่เห็นด้วยกล้องและไม่แสดงผลในขณะที่เกมกำลังทำงาน Game Objects เหล่านี้จะใช้ทรัพยากรคอมพิวเตอร์ / มือถือหรือไม่เมื่อเกมทำงาน? ฉันจะหารายละเอียดเกี่ยวกับการใช้งานแบบนี้ได้ที่ไหน

2
Unity UI square ที่เติมความกว้างหรือความสูง
ฉันกำลังพยายามสร้างบอร์ดด้วยข้อกำหนดนี้: มันจะเป็นรูปสี่เหลี่ยมจัตุรัส มันจะพอดีกับความกว้างหรือความสูงที่มีอยู่ มันจะอยู่กึ่งกลางในผืนผ้าใบ มันอาจถูกห่อไว้ในผืนผ้ากลางเพิ่มเติมตามความจำเป็น ฉันกำลังเล่นกับแองเคอร์ แต่ฉันไม่พบการรวมกันใด ๆ ที่จะทำอย่างนั้น ทางออกเดียวที่ฉันคิดได้ก็คือสคริปต์ "OnResize" ของคอนเทนเนอร์และตั้งค่าขนาดของบอร์ดโดยทางโปรแกรม นี่คือเค้าโครงดั้งเดิม (1) คือ BoardCanvas (2) คือคณะกรรมการ ฉันต้องการถ้าหน้าจอสูงขึ้นสี่เหลี่ยมก็จะโตขึ้น แต่ก็ยังเป็นสี่เหลี่ยมจัตุรัส: หรือลด: แต่ถึงแม้ว่าตัวอย่างก่อนหน้านี้จะถูกตัดไปที่ขอบด้านบนและด้านล่าง แต่ฉันก็ต้องการที่ถ้าพื้นที่แนวตั้งจะสูงกว่าความกว้างที่มีอยู่สี่เหลี่ยมจัตุรัสจะ จำกัด ขนาดของมันขึ้นอยู่กับเส้นขอบซ้ายและขวา: Q1:มีวิธีทำเช่นนี้กับสมอ / pivots หรือไม่? ไม่เป็นไรสำหรับฉันที่จะสร้างผืนผ้ากลางระหว่าง BoardCanvas และ Board เองถ้าใช้งานได้ Q2:ถ้าเป็นเช่นนั้นฉันควรวางตำแหน่งจุดยึดที่ไหน ฉันต้องการวัตถุระดับกลางหรือไม่ Q3:ถ้าไม่สคริปต์แก้ปัญหาคืออะไร? มี OnResize ใด ๆ บนผืนผ้าใบเพื่อจัดการ? ฉันไม่เห็นเหตุการณ์การปรับขนาดใด ๆ ในรายการ แต่บางทีฉันก็ไม่รู้จะหาได้ที่ไหน ฉันรู้สึกว่าการทดสอบในทุกเฟรมดูเหมือนว่าเกินความเป็นจริงการขับเคลื่อนของเหตุการณ์ดูเหมือนจะดีกว่า ขอบคุณ!

2
ระบบสินค้าคงคลังอัตโนมัติ / จัดสมาร์ท?
สำหรับสัปดาห์ที่แล้วฉันได้ทำงานกับระบบสินค้าคงคลังด้วย Unity3D ตอนแรกฉันได้รับความช่วยเหลือจากพวกที่ Design3 แต่มันก็ไม่นานจนเราแยกทางกันเพราะฉันไม่ชอบวิธีที่พวกเขาใช้รหัสพวกเขาไม่มีกลิ่นของ OOP ใด ๆ ฉันทำตามขั้นตอนต่อไป - รายการใช้มากกว่าหนึ่งช่องระบบการจัดวางขั้นสูง (รายการพยายามอย่างดีที่สุดเพื่อหาสิ่งที่เหมาะสมที่สุด) ระบบเมาส์ในตัวเครื่อง (เมาส์ถูกขังอยู่ในพื้นที่ใช้งานกระเป๋า) ฯลฯ นี่คือตัวอย่างการทำงานของฉัน สิ่งที่เราต้องการมีในเกมของเราคือคุณลักษณะการจัดระเบียบอัตโนมัติ - ไม่ใช่การจัดเรียงอัตโนมัติ เราต้องการคุณสมบัตินี้เนื่องจากคลังของเราจะเป็น 'เรียลไทม์' - ไม่เหมือนใน Resident Evil 1,2,3 ฯลฯ ที่คุณจะหยุดเกมชั่วคราวและทำสิ่งต่างๆในคลังของคุณ ทีนี้ลองนึกภาพตัวคุณเองในสถานการณ์ที่ถูกล้อมรอบไปด้วยซอมบี้และคุณไม่มีกระสุนคุณมองไปรอบ ๆ คุณเห็นว่ามีกระสุนอยู่ในพื้นดินดังนั้นคุณจึงไปหาพวกเขาและพยายามเลือกพวกเขา แต่พวกเขาไม่ พอดี! คุณดูสินค้าคงคลังของคุณและพบว่าหากคุณจัดระเบียบบางรายการใหม่มันจะพอดี! - ตอนนี้ผู้เล่น - ในสถานการณ์นั้นไม่มีเวลาที่จะจัดระเบียบใหม่เพราะเขาล้อมรอบด้วยซอมบี้และจะตายถ้าเขาหยุดและจัดระเบียบสินค้าคงคลังเพื่อให้มีพื้นที่ (จำสินค้าคงคลังในแบบเรียลไทม์ไม่หยุดชั่วคราว) - จะไม่ มันจะดีสำหรับการที่จะเกิดขึ้นโดยอัตโนมัติ? - ใช่! (ฉันเชื่อว่าสิ่งนี้ได้ถูกนำไปใช้ในบางเกมเช่น Dungeon siege หรืออะไรบางอย่างเพื่อให้แน่ใจว่าทำได้) ลองดูตัวอย่างนี้: ใช่ดังนั้นหากคุณจัดเรียงปัญหาโดยอัตโนมัติคุณจะได้รับช่องว่างของคุณ …

1
ทำไม OnCollisionEnter ของ Unity ถึงไม่ให้ค่ามาตรฐานกับฉันและวิธีที่เชื่อถือได้ที่สุดในการรับมันคืออะไร
Unity's on collision event ให้การชนวัตถุที่ให้ข้อมูลเกี่ยวกับการชนที่เกิดขึ้นกับคุณ (รวมถึงรายการContactPointsพร้อม hit normals) แต่สิ่งที่คุณไม่ได้รับคือพื้นผิวมาตรฐานสำหรับคอลไลเดอร์ที่คุณยิง นี่คือภาพหน้าจอเพื่ออธิบาย เส้นสีแดงจากและสายสีฟ้าจากContactPoint.normalRaycastHit.normal นี่เป็นตัวอย่างของ Unity ที่ซ่อนข้อมูลเพื่อให้ API ที่ง่ายขึ้นหรือไม่ หรือเทคนิคการตรวจจับการชนกันแบบเรียลไทม์มาตรฐาน 3 มิติไม่เพียงรวบรวมข้อมูลนี้หรือไม่ และในส่วนที่สองของคำถามอะไรคือวิธีที่แน่นอนและค่อนข้างมีประสิทธิภาพในการทำให้พื้นผิวเป็นปกติสำหรับการชน ฉันรู้ว่าการฉายรังสีให้ผิวหน้าของคุณเป็นปกติ แต่ดูเหมือนว่าฉันจำเป็นต้องทำ raycast หลายครั้งเพื่อทำสิ่งนี้ให้สำเร็จในทุกสถานการณ์ (อาจจะเป็นจุดติดต่อ / การรวมแบบปกติคิดถึงการชนในการโยนครั้งแรกหรือคุณอาจต้องเฉลี่ย บรรทัดฐานของจุดติดต่อเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด) วิธีการปัจจุบันของฉัน: สำรองข้อมูลCollision.contacts[0].pointตามปกติของมันตี Raycast ตามปกติเมื่อตะกี้สำหรับfloat.MaxValueบนCollision.collider หากล้มเหลวให้ทำซ้ำขั้นตอนที่ 1 และ 2 โดยไม่ใช้วิธีปกติ หากล้มเหลวให้ลองขั้นตอนที่ 1 ถึง 3 ด้วย Collision.contacts[1] ทำซ้ำ 4 จนสำเร็จหรือจนกว่าจะหมดคะแนนการติดต่อ Vector3.zeroให้ขึ้นผลตอบแทน นี่ดูเหมือนจะจับทุกอย่าง แต่สิ่งที่ทำให้ฉันรู้สึกไม่สบายใจและฉันไม่แน่ใจว่าจะทดสอบว่าวิธีนี้ใช้ได้ผลในกรณีที่เพียงพอ มีวิธีที่ดีกว่า? …

5
ฉันควรแยกไฟล์ประเภทใดจากที่เก็บแหล่งควบคุมเกมของฉัน
ฉันเริ่มทำงานในโครงการส่วนบุคคลโดยใช้ Unity กับเพื่อนและเราได้ตั้งค่าระบบควบคุมแหล่งที่มาของเราเอง ฉันตระหนักถึงความจริงที่ว่ามีไฟล์หลายประเภทคือไฟล์ที่สร้างขึ้นในเครื่องเมื่อคุณสร้าง (ตัวอย่างเช่นไฟล์ Visual Studio) และไฟล์ที่เฉพาะเจาะจงสำหรับเครื่องเฉพาะของคุณที่ไม่ควรเพิ่มลงในแหล่งควบคุม แต่ ฉันไม่แน่ใจว่าประเภทไฟล์เหล่านี้คืออะไร ฉันไม่ต้องการยกเว้นไฟล์ที่สร้างขึ้นใด ๆ ที่ฉันควรจะรวมไว้เช่นไฟล์. meta ใครบางคนสามารถแสดงรายการไฟล์ทั้งหมดหรืออย่างน้อยชนิดไฟล์ทั่วไปทั้งหมดที่ไม่ควรเพิ่มในการควบคุมเวอร์ชันโดยเฉพาะสำหรับโครงการ Unity

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.