マップレベル上でアクターをコピーして

再生して戻ってくると、コピーしたオブジェクトがない。

画鋲📌ピンをクリックすると

でてきた。

かってにアンロードせんでくれるかいな?
マップレベル上でアクターをコピーして

再生して戻ってくると、コピーしたオブジェクトがない。

画鋲📌ピンをクリックすると

でてきた。

かってにアンロードせんでくれるかいな?
複数のカメラのスクリーンショットを自動的に撮るPython
Log Python: Automation Library: Failed to convert parameter ‘camera’ when calling function ‘AutomationBlueprintFunctionLibrary.TakeHighResScreenshot’ on ‘Default__AutomationBlueprintFunctionLibrary’ TypeError: NativizeProperty: Cannot nativize ‘SceneCaptureActor’ as ‘Camera’ (ObjectProperty) TypeError: NativizeObject: Cannot nativize ‘SceneCaptureActor’ as ‘Object’ (allowed Class type: ‘CameraActor’)
IS FIX Code
import unreal
import time
class OnTick(object):
""" Register a function and run it on tick, """
def __init__(self):
# make a generator function so we can call next on it,
EditorLevelLibrary = unreal.EditorLevelLibrary()
all_level_actors=EditorLevelLibrary.get_all_level_actors()
CameraActors=[]
for actor in all_level_actors:
#CameraBool=actor.find_camera_component_when_view_target
CameraComponent=actor.get_component_by_class(unreal.CameraComponent)
#print("CameraComponent="+str(CameraComponent))
#className=CameraComponent.get_class()
#print("CameraComponent.get_class() ="+str(className))
if(str(CameraComponent)=="None"):
pass
else:
#if(str(CameraComponent) in "CineCameraComponent"):
# pass
#else:
CameraActors.append(actor)
self.CameraActors=CameraActors
#self.actors = (actor for actor in unreal.EditorLevelLibrary.get_selected_level_actors())
self.actors = iter(CameraActors)
self.tickcount=0
self.CapturedCount=0
# register a callback on tick
self.on_tick = unreal.register_slate_post_tick_callback(self.__tick__)
def __tick__(self, deltatime):
""" Function we will call every tick, """
try:
print(deltatime) # Print the deltatime just for sanity check so we
# know a tick was made,
# Get the next actor from our generator function,
actor = next(self.actors)
"""
actor_location = actor.get_actor_location()
actor_rotation = actor.get_actor_rotation()
# Solve the camera position, and rotation
position = actor_location + unreal.Vector(0.0, 0.0, 0.0)
# roll(z), pitch(tate), yaw(yoko)
rotation = unreal.Rotator(actor_rotation.roll+0.0, actor_rotation.pitch+5.0,actor_rotation.yaw+0.0)
unreal.EditorLevelLibrary.set_level_viewport_camera_info(
position,
rotation
)
"""
errorBool=False
try:
CameraComponent=actor.get_component_by_class(unreal.CameraComponent)
print("actor= "+str(actor))
print("CameraComponent= "+str(CameraComponent))
unreal.AutomationLibrary.take_high_res_screenshot(
1920,
1080,
str(self.CapturedCount)+"_"+actor.get_name() + ".hdr",
camera=actor,
capture_hdr=True,
comparison_tolerance=unreal.ComparisonTolerance.HIGH
)
errorBool=False
except Exception as error:
errorBool=True
pass
if(errorBool==False):
# Count
self.CapturedCount=self.CapturedCount+1
"""
unreal.EditorLevelLibrary.pilot_level_actor(actor)
unreal.EditorLevelLibrary.editor_set_game_view(True)
# Take the screenshot,
unreal.AutomationLibrary.take_high_res_screenshot(
1920,
1080,
actor.get_name() + ".hdr",
camera=actor,
capture_hdr=True,
comparison_tolerance=unreal.ComparisonTolerance.HIGH,
delay=0.25
)
unreal.EditorLevelLibrary.eject_pilot_level_actor()
"""
# Count
self.tickcount=self.tickcount+1
CameraActors=self.CameraActors
CameraActorsLen=len(CameraActors)
endActor=CameraActors[CameraActorsLen-1]
print("self.tickcount="+str(self.tickcount)+" :CameraActorsLen="+str(CameraActorsLen))
if(str(self.tickcount)==str(CameraActorsLen)):
print("finish")
unreal.unregister_slate_post_tick_callback(self.on_tick)
except Exception as error:
#pass
print(error)
try:
unreal.unregister_slate_post_tick_callback(self.on_tick)
except Exception as error:
pass
#if __name__ == '__main__':
instance = OnTick()
関連URL
https://forums.unrealengine.com/t/python-api-highrescreenshot/132783/10
https://docs.unrealengine.com/5.1/en-US/PythonAPI/class/EditorLevelLibrary.html
https://docs.unrealengine.com/5.0/en-US/PythonAPI/class/AutomationLibrary.html
https://docs.unrealengine.com/5.1/en-US/taking-screenshots-in-unreal-engine/

[Unreal Engine] Editor Utility Blue Printでdialogを途中から表示するには
EUB上で Show Message Dialogノードを使う

eub ue5 blueprint dialog editor utility blueprint
クラスの定義はヘッダファイルで行います。
#include <string>
using namespace std;
class Class1
{
//
private:
string name; //メンバ変数
//
public:
void print1(); //メンバ関数のプロトタイプ宣言
void print2(); //メンバ関数のプロトタイプ宣言
//
};cppでのメソッドの実装
void クラス::実装するメソッド名()
#include "Class1.h"
#include <iostream>
using namespace std;
//
void Class1::print1()
{
name = "print1";
cout << name << "が処理されました\n";
return;
}
//
void Class1::print2()
{
name = "print2";
cout << name << "が処理されました。どうしてニンニク味のガムってないんだろう?\n";
return;
}クラスからインスタンスを生成して利用するサンプルです。
Class1 *インスタンス名 = new Class1();
インスタンス名 – > 使用するメソッド名();
#include "Class1.h"
int main() {
Class1 *cla2 = new Class1();
cla2->print1(); //print1が処理されました
cla2->print2(); //print2が処理されました
delete cla2;
return 0;
}あくまで、自分の研究例ですと
スカートで足に追従させたいものは
「膝にスキニングしたほうが作業的に効率的」です。
ジャンプや走るモーションで
前側のスカートは膝で突き破るので、
膝にスキンウェイト当てておきます。
というより
タイトスカートのスキンウェイトは、まず足にスキンウェイトを足の一部のようにスキンウェイトをコピーします。
前側の又の部分は左右の足から同じ左0.5、右0.5になるようにスキンウェイトします。
ロングタイトスカートはこれでできます。

スカートのケージモデルが膝に追従する例です。
ただ、まだ、突き破っているので、スカートモデルと体の隙間をもっと大きくした方がいいでしょう
あとは物理で動かしたい頂点は下のようにします
さらに、フレアスカートの場合は
スカートの左右と後ろ部分は、放射状にジョイントをいれヒザのスキンウェイトとグラデーションするようにスキンウェイトします。あとは、おかずさんのkawaii physics で、マニュアル通り設定します。
関連
パーティクルなんてプレイヤーが遠くなったらDeactivateしてしまえば軽量化なんてしなくても大体の場合、負荷のボトルネックにはならないみたい
BluePrint でActor選んで
ビューポートでNaiagaraを配置
SphereColiderを追加して半径を1250から1800に指定
コリジョン設定をOverlapAll
Begin OverlapでNaiagaraのVisibleとActivateしてついでにSet Relative Location 0,0,0
End OverlapでNaiagaraのVisibleとDeactivate
してしまえばNaiagaraがボトルネックになることは避けられる。
Particle Stateの
Kill Particles When Lifetime Has Elapsed
Loop Particles Life Time
Let Infinity Lived Particles Die When Emitter Deactives
ライフタイムが経過したときにパーティクルを殺す <あとからするとうまくいかない
ループ パーティクルの寿命 <意味不明
エミッタが非アクティブになったときに無限に生きたパーティクルを消滅させる <うまくいった。
音楽のランダムの歴史から言って
途切れなくランダムにする方法は理論から行くと長ければ長いほど途切れたと錯覚しやすいので長くする。
エミッタの更新の
Life Cycleは
loop Duration 60

パーティクルのスポーンのInitialize Particleの
lifetimeは
Random Rageにして
5から60の値の設定

関係ないが
Scale Mesh SIzeはパーティクルのスポーン時にMesh AttributeがUniformで1.0になってないと表示されなくなる。
完成したもの

HangingParticulatesで





これは自分の中でかなりおおきな発見だった。
Shading Modelを変更しなくても、透明で、ベースカラー、Metalic スペキュラ、ラフネス、エミッシブ、Normal、タンジェント、ワールド位置オフセット、ワールドディスプレースメント、テッセレーション乗数、アンビエントオクルージョン、屈折が使える

詳細は以下
https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/HowTo/Transparency/
【UnrealEngine】水っぽいマテリアルを作ったときのメモ(屈折率)
https://qiita.com/nchhujimiyama/items/8d2c820f2a1367864569
他にも

import unreal
import codecs
import os
def my_makedirs(path):
if not os.path.isdir(path):
os.makedirs(path)
my_makedirs(SaveDir)
print("SaveDir= "+SaveDir)
print("FileName= "+FileName)
savePath=SaveDir+"/"+FileName+".tga"
print("savePath= "+savePath)
editorAssetLib = unreal.EditorAssetLibrary()
texture2d=editorAssetLib.load_asset(assetPath)
#canvasRenderTarget2D=editorAssetLib.load_asset(assetPath)
#texture2d=unreal.Texture2D(canvasRenderTarget2D)
print("texture2d= "+str(texture2d))
task = unreal.AssetExportTask()
task.set_editor_property('automated', True)
task.set_editor_property('filename', savePath)
task.set_editor_property('object', texture2d)
task.set_editor_property('prompt', False)
task.set_editor_property('exporter', unreal.TextureExporterTGA())
check = unreal.Exporter.run_asset_export_task(task)
if check==True:
pass
else:
print(u"tga イメージの生成に失敗しました")task = unreal.AssetExportTask()
task.set_editor_property('automated', True)
task.set_editor_property('filename', outfilepath)
task.set_editor_property('object', texture2d)
task.set_editor_property('prompt', False)
task.set_editor_property('exporter', unreal.TextureExporterTGA())
check = unreal.Exporter.run_asset_export_task(task)
if check==True:
pass
else:
alert(u"tga イメージの生成に失敗しました")
参考
/Game/ThirdPerson/Blueprints/
には
BP_ThirdPersonCharacter 1つしか入ってないわりに女かい。ってなる
(オーバーライドしてるのが女だから)
複製してBP_ThirdPersonCharacter_Quinn としておく
複製してBP_ThirdPersonCharacter_Manny としておく
メッシュは SKM_Manny_Simple
アニメーションBPは ABP_Manny

にしたものを
BP_ThirdPersonCharacter_Manny としておく。
これだけ、したら親のアニムBPのABP_Mannyをみていこう。
https://lunanelis.hatenablog.com/entry/2022/04/07/034505
イベントグラフは
ネリスさんの書いた通り
他にアニメ用フラグを追加したければここのSequenceにピン追加して書く。

AnimGraphは
上のLocomotionのっステートを=でつないでアニメーションをキャッシュしている。
(新規アニメーションのcacheで出せるノード)

IdleとWalk/Runをキャッシュしているってこと。

MainStateのLocomotionの中に入ってみるとキャッシュを使ってる。

あとはMainStateの説明だけどわかりやすく上のノードたち回した。
ToFallingとToLandの2つが新しくできたステーツエイリアスノード
このノードにくっついてる条件(⇔みたいなヤツ)を、設定したステート中に満たすとワープしてこれるというノード

To Fallingは LocomotionとLandのときにワープしてこれるみたい。

ToLandは JumpとFall Loop のときにワープしてこれるみたい。

で実際入ってくる条件はいつもどおり矢印に設定する感じ


コントロールリグの説明は
UE備忘録本舗さんの動画を見たほうが分かりやすかったよ