Minecraft:一次変換を活用して目の前にブロックを出現させる

提供: omotenashi-mind
移動先: 案内検索



Minecraft(以下、マイクラ)の世界で回転の一次変換を学んでいきます。

回転の一次変換公式

回転の一次変換公式は次の通りです。

x’=xcosθ-ysinθ
y’=xsinθ+ycosθ


マイクラでの活用方法を考える

必要な情報と出力させたい位置を決定する

マイクラで回転の一次変換公式を利用すれば、プレイヤーがどの向きを向いていても目の前に指定のブロックが出せるはずです。

必要なのは、

  • ユーザの向いている方向(角度)
  • ユーザの座標

あとは、ユーザの座標から相対的にブロックを出現させたい位置さえ決定すればOKです。
ここでは、ユーザの位置から4ブロック離れた位置にブロックを出現させることにします。

式の単純化

x’=xcosθ-ysinθ
y’=xsinθ+ycosθ

この公式をマイクラに置き換えるのであれば、yは高さを表すので、x, zの表現に置換えます。

x’=xcosθ-zsinθ
z’=xsinθ+zcosθ

さらに、式を単純化させるため、南方向を始点と扱うことでxを「0」に固定することにします。
それにより、公式は以下のように変換されます。

x’=-zsinθ
z’= zcosθ


コーディング

準備が整ったので、実際にコードに落としていきます。コードに書くと、以下のようになります。

import mcpi.minecraft as minecraft
import mcpi.block as block
import math

mc = minecraft.Minecraft()
x,y,z = mc.player.getPos()

distance = 4
rad = math.radians(mc.player.getRotation())
x1 = 0-math.sin(rad)*distance
z1 = math.cos(rad)*distance

mc.setBlock(x+x1,y,z+z1,block.FIRE)

ちょっと補足すると、以下の部分でプレーヤーの座標を取得します。

 x,y,z = mc.player.getPos()

distance変数には先程決めたプレーヤーとブロックとの距離を設定します。

distance = 4

「mc.player.getRotation()」でプレーヤーが向いている角度(真南を0°として、西方向に増加。真北が180°。真南から東方向に減少。真東が-90°、となる)が
取得できるので、それをラジアン変換します。

rad = math.radians(mc.player.getRotation())

あとは取得されたラジアン値を用いて、回転の一次変換を行い、プレーヤーの目の前の座標を計算します。

x1 = 0-math.sin(rad)*distance
z1 = math.cos(rad)*distance

計算したら、その座標に指定のプロックを出します。ここでは炎を出しています。

mc.setBlock(x+x1,y,z+z1,block.FIRE)


テスト

コードが完成したら、実際にテストしてみましょう。
真南を向いている状態で実行すると、
Minecraft006.png
ちゃんと目の前に炎が表示されていることが確認できます。次に真西を向いてコードを実行してみます。
Minecraft007.png

無事に座標が変換されて、常に目の前にブロックが表示されている様子が確認できます。