mieki256's diary



2025/01/16(木) [n年前の日記]

#1 [godot] ピンの位置を2Dで表示したい

_昨日の作業 の続き。Windows10 x64 22H2 + Godot Engine 4.3 64bit でゴルフゲームっぽいものが作れないものかなと試してる。

旗というか、ピンというか、カップの位置を分かりやすく表示したい。 頻繁にピンやカップの位置が分からなくなるので、「このあたりに旗があるよ」とアイコンを表示して位置を知らせたい。

Godot Engine 4 の Camera3Dノードには、いくつか便利なメソッドがあるので、それを使えばアイコンを表示すべき座標は得られそう。
_Camera3D - Godot Engine (stable) documentation in English

これで一応、アイコン(TextureRectで表示)が3D空間内の特定の座標を指し示すような表示にはなった。

extends Node3D

@export var target: MeshInstance3D
@export var markicon: TextureRect
@export var message: Label

var camera_ang: float = 0.0

func _ready():
    pass # Replace with function body.


func _process(delta):
    var camera = get_viewport().get_camera_3d()
    if camera == null:
        printerr("Not found Camera3D")
        return

    camera_ang = Input.get_axis("ui_left", "ui_right") * (90.0 * delta)
    camera.rotate_y(deg_to_rad(camera_ang))
    
    var msg = ""
    msg += "behind: "
    msg += "true" if camera.is_position_behind(target.global_position) else "false"
    msg += "\nin frustum: "
    msg += "true" if camera.is_position_in_frustum(target.global_position) else "false"
    message.text = msg

    var viewport_size = get_viewport().get_visible_rect().size
    var screen_pos = camera.unproject_position(target.global_position)
    markicon.global_position.x = screen_pos.x - (markicon.texture.get_width() / 2)
    #markicon.global_position.y = screen_pos.y - (markicon.texture.get_height())


ただ、その位置が画面外にある時に、どういう表示をしたらいいのか…。画面外の右にあるとか、画面外の左にあるとか、そういう表示にしたいのだけど…。

カメラの位置と向きが分かれば、そこからベクトルが作れるだろうし、ピンの位置でもベクトルを作れるだろうから、ベクトルの内積だか外積だかそのあたり符号で対象が右にあるか左にあるかぐらいは分かりそうな気もする…。

以上、1 日分です。

過去ログ表示

Prev - 2025/01 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project