python-3.x Ursina -将实体移动到它们所面对的方向

relj7zay  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(207)

我试图使一个程序,射击一个弹丸时,鼠标左键点击。我希望它有一个实体产卵,在鼠标被点击时的方向点,并在它所指的方向移动。
我试着使用Entity.position += Entity.forward的方式,我在网上读到了一些文章。我的代码:

from ursina import *

app = Ursina()

def update():

    if held_keys['left mouse']:
        projectile = Entity(model = 'cube', texture = 'white_cube', color = color.white, scale = 0.5)
        projectile.look_at_2d(mouse.position)
        projectile.position += projectile.forward

app.run()

字符串
它会产生立方体并转动它,但它根本没有移动。我试着使用一个while循环,像这样:

from ursina import *

app = Ursina()

def update():

    if held_keys['left mouse']:
        projectile = Entity(model = 'cube', texture = 'white_cube', color = color.white, scale = 0.5)
        projectile.look_at_2d(mouse.position)
        While True:
            projectile.position += projectile.forward

app.run()


这只会把Windows撞碎。我不知道这里出了什么问题。

r7s23pms

r7s23pms1#

因为update每帧都会被调用,所以每帧都要生成一个新的抛射体,调用look_at_2d并将其向前移动。下一帧你做一个新的,并向前移动一次。这将使它看起来像是不移动,但实际上你每秒产生60个实体。
也许你想要的是在开始时制作一个,然后在更新时移动它?要做到这一点,只需在update函数外部示例化Entity,并在update内部执行particle.look_at()和.position += particle.forward。
不过,还有一个问题我可以发现。使用look_at_2d,你试图查看mouse.position,但是mouse.position在UI空间中,而实体在3d空间中(作为场景的父对象)。我不知道你到底想要什么,但是你可以将实体作为camera.ui的父对象,这样它们就在同一个空间中,或者你可以通过www.example.com _point获取世界空间位置mouse.world,然后查看它。为此,你需要做一个类似地面的东西,并在上面添加一个对撞机,这样鼠标就可以计算出它在3d空间中的相交位置。

相关问题