[UE5.3.2] UE5ぷちコンジェットコースター向け Blender の ベジェカーブ(BezierCurve)からUE5のSplineに座標わたせたよ(精度の問題で未完成)まとめ

ベジェカーブ作る前に日本語の場合は英語モードに切り替えなきゃスクリプトエラーになります。

BezierCurveはできるだけ大きく描きます。

BlenderPython

# Blender import
import bpy
import math
import bmesh
import csv

print("start python code....------------------------------------------>>>")

basedir="F:/SandBox/UE5PuchiCon22/Blender_Curve_To_Spline/"
with open(basedir+"/test.csv",'w',newline='') as file:

    writer = csv.writer(file,delimiter = ',') 
    count = 0
    writer.writerow(["","x","y","z",
            "i_x","i_y","i_z",
            "o_x","o_y","o_z"])
    
    print("bpy.data.curves= "+str(bpy.data.curves))
    for obj in bpy.data.curves:
        print("obj.name= "+str(obj.name))
        for object in bpy.data.objects:
            print("object.name= "+object.name)
        ob_curve = bpy.data.objects.get(obj.name)
        print("ob_curve= "+str(ob_curve))
        if(str(ob_curve)=="None"):
            print("ob_curve =is= NoneType")
        else:
            for curve in obj.splines:
                print("curve= "+str(curve))
                
                for bezpoint in curve.bezier_points:
                    print("bezpoint= "+str(bezpoint))
                    if(str(bezpoint)=="NoneType"):
                        print("bezpoint =is= NoneType")
                    else:
                        xyz = ob_curve.matrix_world @ bezpoint.co
                        xyz_left = ob_curve.matrix_world @ bezpoint.handle_left
                        xyz_right = ob_curve.matrix_world @ bezpoint.handle_right
                        count += 1
                        writer.writerow([count, xyz[0], xyz[1], xyz[2],
                        xyz_left[0], xyz_left[1], xyz_left[2],
                        xyz_right[0], xyz_right[1], xyz_right[2]])
            

出力されたCSV

値はかなり大きめじゃないとだめよ

,x,y,z,i_x,i_y,i_z,o_x,o_y,o_z
1,13.595291137695312,230.46768188476562,70.73152160644531,158.9687042236328,225.82052612304688,70.73152160644531,-178.57012939453125,236.6106414794922,70.73152160644531
2,-207.3365020751953,-38.245094299316406,120.08828735351562,-198.0128631591797,17.276376724243164,181.6839141845703,-222.84031677246094,-130.56887817382812,17.66411781311035
3,43.76624298095703,-265.9769287109375,0.0,-181.01539611816406,-265.9769287109375,0.0,258.02471923828125,-265.9769287109375,0.0
4,231.6976318359375,-64.63948059082031,49.9024543762207,191.0831298828125,-174.81529235839844,-94.65201568603516,255.28945922851562,-0.641462504863739,133.87005615234375

CSVにそって構造体作ります。ブループリント>構造体

CSVをUEにドラッグして読みこみ

BP_SplineにSplinrコンポーネント付けて、コンストラクションスクリプトでこれつくります。

なにかは描かれた

こっから先は精度の問題?

できたっていうのかなこれ。

ZIP
Blender_Curve_To_Spline.zip

https://drive.google.com/file/d/1n4y_EoBTJDpaKdJnUNLTfLLxueqsYcGm/view?usp=sharing

UE532_CurveSpline2.zip

https://drive.google.com/file/d/1uk8QwaZbL_PE1HEF8umtN76axFFBJAoC/view?usp=sharing

参考URL

https://blenderartists.org/t/world-location-of-bezier-points/1219282

https://teratail.com/questions/146037

Text Editorでデバッグ時にprintで出力したものがPython Consoleに出てこなくて困っていましたが、勘違いしていました。Python Consoleではなくて、System Consoleの方に出てきます。

メニューバー Window > Toggle System Console で別ウィンドウでコマンドプロンプトがたちあがります。

https://wiz.ooo/cg/2054

https://docs.blender.org/api/current/bpy.ops.mesh.html

https://zenn.dev/hotcocoa/articles/5c5ab06c40862b

https://reflectorange.net/archives/193.html