网易我的世界论坛

标题: 简单解决抛射物遮挡视野 [打印本页]

作者: sevenstars    时间: 2019-12-17 18:48
标题: 简单解决抛射物遮挡视野
本帖最后由 sevenstars 于 2020-3-15 10:30 编辑

在mc中,玩家有两个视角,在命令的目标选择器里称为rx,ry。rx是水平方向角度,ry是竖直方向角度,他们的值与mc坐标系的关系如图。
[attach]945995[/attach]
比如,将抬头垂直看向天空的玩家传送到0 64 0:/tp @a[ry=-90] 0 64 0
官方提供了GetDirFromRot()函数,因此我们不必自己写三角函数,直接用官方封装好的就行了
抛射物生成的坐标需要与玩家有一定距离,而且坐标始终在玩家看向的方向。由@艾克丶艾达 提供的最好方法如下,只需两行:
[attach]1048939[/attach]





作者: 雾都漫游者    时间: 2019-12-20 16:32

作者: Einstein奕韬    时间: 2020-3-11 17:22
现在貌似没有用?生成抛射物绑定了frame依然是从脸上出来的。我自己写的三角函数也没有用,我用了楼主的方法依然没用。
作者: sevenstars    时间: 2020-3-11 18:12
Einstein奕韬 发表于 2020-3-11 17:22
现在貌似没有用?生成抛射物绑定了frame依然是从脸上出来的。我自己写的三角函数也没有用,我用了楼主的方 ...

弹射物类型是雪球的时候,传入的pos无效
作者: 艾克丶艾达    时间: 2020-3-14 09:25
首先获得生物的朝向和坐标
rotation = self.CreateComponent( entityId, "Minecraft", "rot ).GetRot()
position = self.CreateComponent( entityId, "Minecraft", "pos" ).GetPos()

然后通过朝向获取生物朝向的方向向量
vector = serverApi.GetDirFromRot( rotation )

最后给定一个偏移距离,计算出新的发射起始点
alignLength = 1.0 # 偏移距离
x = position[0] + vector[0] * alignLength
y与z同理

最终使用计算好的 x y z 坐标生成抛射物即可
作者: 艾克丶艾达    时间: 2020-3-14 09:27
根本不需要三角函数,一个方向向量和一个距离常量就搞定了,初中物理几何基础
作者: Einstein奕韬    时间: 2020-3-19 17:42
恩恩,我以前写算法的时候,没有获取朝向的向量的接口,我就用的三角函数。




欢迎光临 网易我的世界论坛 (https://mc.netease.com/) Powered by Discuz! X3.3