मैं वर्तमान में अपने खेल के लिए एक स्वास्थ्य प्रणाली को कोड करने की कोशिश कर रहा हूं और मैं चाहता हूं कि मेरा प्लेयर गेमऑब्जेक्ट हेल्थ पोशन गेमऑब्जेक्ट के साथ टकराव को अनदेखा करे यदि प्लेयर के पास अधिकतम स्वास्थ्य है। मेरी समस्या यह है कि मैं प्लेयर लेयर और हेल्थ पोशन लेयर के बीच टकराव को आसानी से बंद नहीं कर सकता क्योंकि प्लेयर के पास मैक्स हेल्थ होने पर मैं केवल टकराव को अनदेखा करना चाहता हूं। मैंने इसे स्वयं करने की कोशिश की लेकिन यह काम नहीं किया। यहाँ मेरा कोड है:
public class ExampleCodeUA : MonoBehaviour{
public int PlayerMaxHealth = 100, PlayerCurrentHealth;
public HealthBar healthBar;
private void Start()
{
PlayerCurrentHealth = PlayerMaxHealth;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("HealthPotion"))
{
if (PlayerCurrentHealth == PlayerMaxHealth)
{
Physics2D.IgnoreLayerCollision(6, 7);
}
else if (PlayerCurrentHealth > 50)
{
GetHealth(PlayerMaxHealth - PlayerCurrentHealth);
}
else if (PlayerCurrentHealth <= 50)
{
GetHealth(50);
}
}
}
void GetHealth(int healing)
{
PlayerCurrentHealth += healing;
healthBar.SetHealth(PlayerCurrentHealth);
}
}
1 उत्तर
आप रनटाइम पर अपने भौतिकी विन्यास को संशोधित नहीं करना चाहते हैं। टक्कर से बचने के लिए आप क्या कर सकते हैं... इसे असंभव बना देना है, जिससे टकराने के लिए कुछ भी न हो। आपकी दोनों वस्तुओं में एक कोलाइडर है। आप क्या कर सकते हैं सभी मौजूदा HealthPotion कोलाइडर को उनके कोड को संशोधित करके अक्षम करना है। एक कार्यान्वयन निम्नलिखित हो सकता है:
using System.Collections.Generics;
using UnityEngine;
public class HealthPotion : MonoBehaviour
{
private static List<HealthPotion> _existingPotions = new List<HealthPotion>();
public static void EnablePotionsCollider(bool value)
{
foreach (var potion in _existingPotions)
{
potion._collider.enabled = value;
}
}
private Collider _collider;
void Awake()
{
_collider = GetComponent<Collider>();
}
void OnEnable()
{
_existingPotions.Add(this);
}
void OnDisable()
{
_existingPotions.Remove(this);
}
}
फिर आपको केवल उस विधि को कॉल करना होगा जब आप कर कर सक्षम/अक्षम करना चाहते हैं
HealthPotion.EnablePotionsCollider(value you want);
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।