functionの働きが分からない
[ver-1.21.1、Skript-2.9.3]
Structuresのfunctionの働きが全く分かりません。
どのような状況で使い、また便利なのか教えて下さい。
12 Replies
たびたび他の方が配布している作品でも見かけるのですが、コードを見てもどういう風に書くのかすらわからないです
例えば
って感じで始まるfunctionがあるとして
各部位について説明すると
gunexplode → functionの名前
loc:location → function内でのローカル変数
locationの形式で{_loc}という変数で入ってくる
attacker:entity → 同上
entity形式で{_attacker}という変数で入ってくる
custom:nbt compound → 同上
nbt compound形式で{_custom}という変数で入ってくる
その後の処理は
{_loc}や{_attacker}を使用してparticleを出したり、モブを出したりする
このfunctionを使用したい場合は
とかで使用できる
どういう場面で使うのかというと、複数の処理を同時並行させたかったり、同じ処理を複数のコード内で使用したい時
例えば処理の中で2つのモブを召喚した際に、それぞれに一定時間で自動で死亡する処理を行いたいとする
同時に死亡させるとかならリスト変数を使って実行もできるけど、死亡時間にランダム性を持たせるのは難しい
となると
みたいなfunctionの使い方をすることで、100tick~200tickで自動で死亡する鶏を3体召喚できる
同じ処理を複数のコード内で使用したい時は、GUIとかがわかりやすいかも
銀行のNPCをクリックしたときに開くGUIと、銀行のATMをクリックしたときに開くGUIが全く同じものでいいなら
ってのを作ると
みたいな感じに使えるから、数百行あるコードをイベント別で書かなくてもよくなったりする
あとfunctionでreturnってのがあるんですけど、これは実例で紹介しますね
これで何が起こるかというと、/cmdを実行したときに手に持ってるアイテムを取得して、そのアイテムのcustom_model_dataを指定のargにしたものを渡します
説明するのはこの3行です
についてですが、これは{_item}にfunctionを挿入しているように見えて、分かりにくいかもしれませんが、このfunction自体がitemとしての形式を持ってるので、この書き方が使えます
についてですが、
ここまでは何も変わりません
という部分でitem形式でfunctionの内容を返すということをしています
一つ上の「このfunction自体がitemとしての形式を持ってる」というのはこのことなんですね
については、この{_item}という変数の中に入っている内容物を外に出すという感じです
ここにitemが入っているので、外で取り出すことができるんですね
----------------------------------
割とややこしいかもしれませんが、functionは書いてるうちに多用することになるので、ぜひ覚えていって下さいね
多分私が説明できるものは全部書いてると思います
質問とかあれば、気が向いたときに答えます
ちなみにこのfunctionは、爆撃やグレネード、クラスター爆弾で召喚されるアイテムのcustom_model_dataを書き換えるために実際に使用しています
https://www.youtube.com/watch?v=MHtZpbiG8F4
Una_Nancy_Owen
YouTube
【Minecraft】CustomGuns Airstrikes - [Skript]
半ブロックや植物で爆弾の爆発が阻止されない塔メリットがある一方
遠方からだと爆弾がよく見えないというデメリットもあり
ここで紹介されているコードの一番下って何をしているんですか?
のことですかね?
上の動画の爆発処理で使用してる奴です
{_location}にプレイヤーの座標入れて、{_PL}にプレイヤーを入れて、{_custom}にnbt compound(1.20.5~)を入れて、gunexplodeというfunctionにこの3要素を用いた処理を行わせています
あ、なるほど
すみません、間違ってたら恥ずかしいんですが
functionは
・function内のローカル変数やfunctionそのものの、形式を決めることが出来る
・「
ファンクション名({ファンクション内で使う関数の要素},・・・)
」とそのまま入力するとファンクション内の処理を行う
・関数としても使用できる
ということですか?関数としても使用できるというか「function=関数」ではあるんですけど、その認識で問題ないと思います
ちなみに{ファンクション内で使う関数の要素}の位置についてなんですが、nanikanofunction(player ,arg-2 ,2 )みたいな感じに、変数じゃないものも普通に入れられるので、ここは場合によって使い分けてください
そうでした、functionですもんねw
あ、変数じゃなくてもいいんですね
はい、そのコード内で使用する数値が変動しないなら直接記述しちゃって大丈夫です
逆に変数は座標であったり、HPであったりと数値が変動する場合によく使いますね
-# (functionは、同じ処理を数字だけ変えて使いまわしたい!みたいなときに便利やで。処理をまとめて一つの道具として扱えるんや)
はじめはよく分かりませんでしたが理解するとfunctionって思ったより万能ですね...
もう遅いので寝ますが、こんな時間まで質問に付き合ってくれてありがとうございました!
function、使いこなせるように頑張ります
便利すぎて僕のコードの中身は9割functionです