position 값을 변경시켜서 위아래로 움직이는 간단한 shake 애니메이션을 만들었는데,
여러 불편한 점이 생김..
1. position은 부모에 상대적인 위치로만 설정 가능 (즉, 현재 position에 상대적인 게 아니고 부모 기준 (0, 0)으로부터의 상대적 위치..)
현재 position 기준으로 shake 하게 하고 싶으면 쓸데없이 부모 노드를 하나 추가하든가, 코드로 손봐야 함.
2. AnimationPlayer를 코드 상에서 생성한 뒤 Animation을 붙여주려고 하는데,
뭔 animation library가 필요하대? 그래서 하라는 대로 library를 만들어줌. 여기까지만 해도 괜찮았음.. 그런데..
var anime = AnimationPlayer.new()
pot.add_child(anime)
var library := load("res://animations/plant_animations.res") as AnimationLibrary
anime.add_animation_library("plant_animations", library)
print(anime.get_animation_list())
anime.play("plant_animations/shake")
위 코드에서 볼 수 있듯이, library를 load해서 쓰는 것도 뭔가 별로인데
library를 add하려면 이름도 지정해줘야 된다네? 전에 이미 library를 생성할 때 저장을 위해서 "plant_animations" 라는 이름을 붙여줬음에도 불구하고
또 이름을 붙여야 된다니(물론 당연히 일반 파일명하고 변수명은 별개긴 하지. 근데 애초에 만든 library 변수를 저장하기 위해 -> 파일로 저장 -> 근데 또 불러오기 위해 변수명을 지정.. 하는 이 일련의 단계가 비효율적인 것 같음).. 그냥 어딘가에 전역변수처럼 저장되어서 바로 불러올 수 있게 하는 방법은 없는 건가..
(Global 저장 어쩌구 하는 문구가 보이긴 하는데 대체 어떻게 저장하고 불러오는지를 모르겠음;; 저장하는 순간 global하지 않게 되는 것 같은데.. 뭐지..)
하튼 질문을 정리하자면..
1. shake animation을 만들고 싶은데, 현재 위치 기준으로 shake하려면 '빈 부모 노드 추가' 또는 '코드로 처리' 하는 것 말고는 방법이 없나?
2. animation library를 손쉽게 불러온 뒤 Animation player에 연결시키는 법은 없을까?
아니 애초에 Animation player에 animation을 추가해서 재생시키려면 위 방법 밖에 없는 건가..?
잘 아시는 분 답변 해주시면 감사.. 검색을 해도 잘 안 나오니까 어렵네..
오늘 밖에서 뭐 하다 와서 지금 잘 예정이라 만약 답변 달리면 내일쯤 확인할 듯.. 미리 죄송
1. 루트root모션 말하는 거임? 2. ㅇㅇ 왜 이름을 한번 더 지정해줘야 하냐면 AnimationLibrary가 AnimationPlayer에 저장되는 방식이 Dictionary라서 키값을 지정해줘야해서 그럼. 귀찮으면 걍 이름 부분에 library.name이엇나 이런거 쓰셈
1. 루트..모션 찾아보니까 내가 하려는 거랑은 다른 것 같음. 난 그냥 '속성 트랙' 추가한 다음 position 변수를 (10, 0), (-10, 0) 번갈아가면서 움직이는 효과를 준 거였는데, 걍 부모 노드 추가해서 좌표를 보정(?)해주는 것 말고는 답이 없는 것 같다 2. ㅇㅎ 이 방법 밖에 없는 거면 매번 load하지 말고 그냥 애니메이션 파일들 참조용 autoload 스크립트 하나 만들어놓고 써야겠구만 답변 ㄳㄳ 항상 고맙다