1. विकी
  2. /एनिमेशन
  3. /ऐनिमेशन इवेंट्स

ऐनिमेशन इवेंट्स

Minecraft Bedrock में मॉब ऐनिमेशन से पार्टिकल और साउंड चलाएँ, और बिहेवियर पैक ऐनिमेशन व कंट्रोलर से कमांड और एंटिटी इवेंट्स रन करें।

ऐनिमेशन सिर्फ़ बोन हिलाने से कहीं ज़्यादा कर सकते हैं। ऐनिमेशन के किसी भी पल पर आप पार्टिकल निकाल सकते हैं, साउंड बजा सकते हैं, कोई variable बदल सकते हैं, या एक कमांड भी चला सकते हैं। इस गाइड में हमारे Ruby golem के हर कदम पर लाल चमक निकलेगी और भारी धमक सुनाई देगी, और बुरी तरह घायल होने पर वह गुस्से में आ जाएगा।

यह गाइड एंटिटी ऐनिमेशन और ऐनिमेशन कंट्रोलर पर आगे बढ़ती है।

फ़ाइलें

दोनों पैक
RP/
  animations/
    ruby_golem.animation.json
  entity/
    ruby_golem.entity.json
  models/
    entity/
      ruby_golem.geo.json
BP/
  animations/
    ruby_golem.animation.json
  animation_controllers/
    ruby_golem.animation_controllers.json
  entities/
    ruby_golem.json

हाँ, बिहेवियर पैक में भी ऐनिमेशन हो सकते हैं। भाग 3 में बताया गया है कि क्यों।

कौन सा पैक क्या कर सकता है

इवेंटरिसोर्स पैकबिहेवियर पैक
पार्टिकल (particle_effects)हाँनहीं
साउंड (sound_effects)हाँनहीं
Molang, जैसे variable.x = 1;हाँहाँ
कमांड, जैसे /say hiनहींहाँ
एंटिटी इवेंट्स, जैसे @s wiki:enrageनहींहाँ

सीधा नियम: रिसोर्स पैक हर खिलाड़ी की स्क्रीन पर दिखने और सुनाई देने वाली चीज़ों के लिए है। बिहेवियर पैक गेम में असली बदलावों के लिए है, जो सबके लिए एक जैसे होते हैं।

भाग 1: पार्टिकल

पार्टिकल को एक छोटा नाम दें

क्लाइंट एंटिटी उन पार्टिकल की लिस्ट रखती है जिन्हें मॉब इस्तेमाल कर सकता है, हर एक का एक छोटा नाम होता है:

RP/entity/ruby_golem.entity.json
"particle_effects": {
  "sparkle": "wiki:ruby_sparkle",
  "dust": "minecraft:villager_happy"
}

दाईं तरफ़ किसी पार्टिकल इफ़ेक्ट का identifier है। यह vanilla वाला भी हो सकता है या आपका खुद बनाया हुआ भी (देखें पार्टिकल)।

इसे ऐनिमेशन से निकालें

ऐनिमेशन में particle_effects जोड़ें। keys सेकंड में समय हैं, बिल्कुल keyframes की तरह:

RP/animations/ruby_golem.animation.json
"animation.ruby_golem.walk": {
  "loop": true,
  "animation_length": 1.0,
  "bones": { },
  "particle_effects": {
    "0.0": { "effect": "sparkle", "locator": "left_foot" },
    "0.5": { "effect": "sparkle", "locator": "right_foot" }
  }
}

हर बार जब walk ऐनिमेशन loop होता है, पहले बाएँ पैर के नीचे चमक दिखती है, फिर दाएँ पैर के नीचे।

फ़ील्डयह क्या करता है
effectक्लाइंट एंटिटी वाला छोटा नाम। ज़रूरी है।
locatorमॉडल पर पार्टिकल कहाँ से शुरू होगा। इसे छोड़ दें तो मॉब की पोज़िशन इस्तेमाल होगी।
bind_to_actorfalse होने पर पार्टिकल मॉब के साथ चलने के बजाय दुनिया में वहीं रहता है
pre_effect_scriptMolang जो पार्टिकल शुरू होने से ठीक पहले चलता है, ताकि वे variables सेट हो सकें जिन्हें पार्टिकल पढ़ता है

एक ही समय पर कई पार्टिकल निकालने के लिए लिस्ट इस्तेमाल करें: "0.0": [ { ... }, { ... } ]।

लोकेटर

लोकेटर आपके मॉडल के किसी बोन के अंदर एक नाम वाला पॉइंट होता है। इन्हें geometry फ़ाइल में जोड़ें:

RP/models/entity/ruby_golem.geo.json (एक बोन के अंदर)
{
  "name": "left_leg",
  "parent": "body",
  "pivot": [3, 12, 0],
  "locators": {
    "left_foot": [3, 0, 0]
  },
  "cubes": [ ]
}

क्योंकि लोकेटर एक बोन में होता है, बोन हिलने पर वह भी हिलता है। left_foot पर बना पार्टिकल झूलते पैर के साथ चलता है।

भाग 2: साउंड

साउंड भी इसी तरह काम करते हैं। पहले, क्लाइंट एंटिटी में छोटे नाम:

RP/entity/ruby_golem.entity.json
"sound_effects": {
  "thud": "mob.wiki.ruby_golem.step"
}

दाईं तरफ़ RP/sounds/sound_definitions.json से एक sound event का नाम है। फिर ऐनिमेशन में sound_effects जोड़ें:

RP/animations/ruby_golem.animation.json (walk के अंदर)
"sound_effects": {
  "0.0": { "effect": "thud" },
  "0.5": { "effect": "thud" }
}

हर साउंड एंट्री में effect और एक optional locator होता है, बिल्कुल पार्टिकल की तरह।

क़दमों की आवाज़ सही समय पर

साउंड keys को उन पलों पर रखें जब आपके ऐनिमेशन में पैर ज़मीन को छूता है। अगर walk में query.modified_distance_moved के साथ anim_time_update इस्तेमाल हुआ है, तो क़दम अपने आप golem के साथ तेज़ और धीमे होंगे।

कंट्रोलर स्टेट से

कंट्रोलर स्टेट्स में भी particle_effects और sound_effects हो सकते हैं। इनमें समय नहीं होता, क्योंकि स्टेट की कोई timeline नहीं होती। इसके बजाय ये तब शुरू होते हैं जब मॉब उस स्टेट में प्रवेश करता है:

RP/animation_controllers/ruby_golem.animation_controllers.json
"alert": {
  "animations": ["fists_up"],
  "particle_effects": [{ "effect": "sparkle", "locator": "head" }],
  "sound_effects": [{ "effect": "roar" }],
  "transitions": [{ "idle": "!query.has_target" }]
}

टाइमलाइन

पार्टिकल और साउंड के अलावा, ऐनिमेशन में एक timeline भी हो सकती है: तय समय पर चलने वाली चीज़ों की लिस्ट। रिसोर्स पैक में timeline Molang चलाती है:

RP/animations/ruby_golem.animation.json
"animation.ruby_golem.blink": {
  "animation_length": 4.0,
  "loop": true,
  "timeline": {
    "0.0": "variable.eyes_closed = 0;",
    "3.8": "variable.eyes_closed = 1;"
  }
}

हर चार सेकंड में golem एक पल के लिए आँखें बंद करता है। कोई रेंडर कंट्रोलर variable.eyes_closed पढ़कर अलग texture दिखा सकता है या आँखों के बोन छिपा सकता है (देखें रेंडर कंट्रोलर)।

एक key में एक string या strings की लिस्ट हो सकती है: "1.0": ["variable.a = 1;", "variable.b = 2;"]।

भाग 3: बिहेवियर पैक ऐनिमेशन

अब आता है मज़ेदार हिस्सा। सर्वर भी ऐनिमेशन और कंट्रोलर चला सकता है। वह बोन नहीं हिला सकता (सर्वर के पास हिलाने के लिए कोई मॉडल नहीं होता), लेकिन timelines और कंट्रोलर स्टेट्स चला सकता है। इससे ये आपके मॉब के अंदर एक छोटा सा scripting टूल बन जाते हैं, बिना किसी JavaScript के।

बिहेवियर पैक में इवेंट्स तीन तरह के हो सकते हैं:

इवेंट stringयह क्या करता है
"/say Hello"एक कमांड चलाता है, जैसे मॉब ने खुद टाइप की हो। @s खुद मॉब है।
"@s wiki:enrage"मॉब की अपनी events लिस्ट से एक इवेंट चलाता है
"variable.rage = 1;"Molang चलाता है

एंटिटी इवेंट्स सिर्फ़ मॉब को ही target कर सकते हैं, इसलिए हमेशा @s के बाद इवेंट का नाम आता है।

स्टेप 1: health पर नज़र रखने वाला कंट्रोलर

चलिए golem को ऐसा बनाते हैं कि उसकी health 20 से नीचे जाने पर वह गुस्से में आ जाए, और ठीक होने पर फिर शांत हो जाए:

BP/animation_controllers/ruby_golem.animation_controllers.json
{
  "format_version": "1.10.0",
  "animation_controllers": {
    "controller.animation.ruby_golem.rage": {
      "initial_state": "calm",
      "states": {
        "calm": {
          "transitions": [
            { "enraged": "query.health < 20" }
          ]
        },
        "enraged": {
          "on_entry": [
            "/say The ruby golem is cracking!",
            "/particle minecraft:lava_particle ~ ~1 ~",
            "@s wiki:enrage"
          ],
          "on_exit": [
            "@s wiki:calm_down"
          ],
          "transitions": [
            { "calm": "query.health >= 20" }
          ]
        }
      }
    }
  }
}

on_entry लिस्ट एक बार चलती है जब golem enraged में प्रवेश करता है। कमांड golem की जगह से चलती हैं, इसलिए ~ ~1 ~ का मतलब है उससे एक ब्लॉक ऊपर।

स्टेप 2: बार-बार चलने वाला timer ऐनिमेशन

Loop होने वाला बिहेवियर पैक ऐनिमेशन एक काम का timer है। यह वाला हर 10 सेकंड के loop की शुरुआत में golem को थोड़ा heal करता है:

BP/animations/ruby_golem.animation.json
{
  "format_version": "1.10.0",
  "animations": {
    "animation.ruby_golem.regen": {
      "loop": true,
      "animation_length": 10.0,
      "timeline": {
        "0.0": "/effect @s regeneration 3 0 true"
      }
    }
  }
}

स्टेप 3: इन्हें एंटिटी में चालू करें

बिहेवियर पैक की एंटिटी फ़ाइल में, इन्हें description के नीचे लिखें और scripts.animate से चलाएँ, बिल्कुल वैसे ही जैसे क्लाइंट एंटिटी करती है:

BP/entities/ruby_golem.json
{
  "format_version": "1.21.0",
  "minecraft:entity": {
    "description": {
      "identifier": "wiki:ruby_golem",
      "is_spawnable": true,
      "is_summonable": true,
      "animations": {
        "rage": "controller.animation.ruby_golem.rage",
        "regen": "animation.ruby_golem.regen"
      },
      "scripts": {
        "animate": ["rage", "regen"]
      }
    },
    "component_groups": {
      "wiki:enraged": {
        "minecraft:movement": { "value": 0.35 },
        "minecraft:attack": { "damage": 12 }
      }
    },
    "components": { },
    "events": {
      "wiki:enrage": {
        "add": { "component_groups": ["wiki:enraged"] }
      },
      "wiki:calm_down": {
        "remove": { "component_groups": ["wiki:enraged"] }
      }
    }
  }
}

अब घायल golem तेज़ चलता है और ज़्यादा ज़ोर से मारता है, और जैसे ही regeneration उसकी health को 20 से ऊपर ले आता है, वह फिर सामान्य हो जाता है।

कमांड बहुत बार चलती हैं

on_entry में रखी कमांड हर बार चलती है जब स्टेट में प्रवेश होता है, और दुनिया के हर golem के लिए। बीस golem स्टेट बदलें तो बीस /say मैसेज आएँगे। चैट वाली कमांड सिर्फ़ टेस्टिंग के लिए रखें और तैयार ऐड-ऑन में शांत कमांड इस्तेमाल करें।

जब कुछ गड़बड़ हो

आपको क्या दिखता हैसबसे संभावित कारण
कोई पार्टिकल नहींछोटा नाम क्लाइंट एंटिटी के particle_effects में नहीं है, या पार्टिकल identifier गलत है
पार्टिकल लोकेटर के बजाय मॉब के पैरों पर दिखते हैंलोकेटर के नाम में typo है या वह किसी दूसरे बोन में है
कोई साउंड नहींsound event का नाम sound_definitions.json में मौजूद नहीं है
रिसोर्स पैक में कमांड कुछ नहीं करतीकमांड सिर्फ़ बिहेवियर पैक ऐनिमेशन में काम करती हैं
बिहेवियर पैक कंट्रोलर कभी नहीं चलतायह description.animations में है लेकिन description.scripts.animate में नहीं
@s wiki:enrage कुछ नहीं करताइवेंट एंटिटी के events में नहीं है, या उसके नाम में typo है

और मदद Troubleshooting में है।

आगे क्या

  • timeline से चलाई जा सकने वाली कमांड कमांड में सीखें।
  • अपने खुद के इफ़ेक्ट पार्टिकल में बनाएँ।
  • health, targets और बहुत कुछ Molang queries से पढ़ें।

एनिमेशन: गाइड

We use cookies to improve your experience and analyse site traffic. Learn more