개인 자료란 (JE)

  서버 커뮤니티

Profile ron_sa 정품인증자

ron_sa a469b8b74d5b4b778a78cd225101abff

Profile

질문하기 스크립트

좌표가 다른 이유..??

2021.07.25 조회 수 100 추천 수 0
스크립트 애드온 2.6-beta2 

command /test:
    trigger:
        set {ks.loc} to location 4 forward and 1.5 above the player
        send "%{ks.loc}%"

제가 이런식으로 플레이어가 바라보는 4칸앞과 1.5칸 위의 좌표를 {ks.loc}에 저장했는데요, 

그러나 마인크래프트에서의 ^ ^1.5 ^4 좌표와 {ks.loc} 이 일치하지 않더라고요..


https://youtu.be/45KMmBbI9eI


비슷하긴 하지만 결국 다르길래 물어봅니다..!


어떻게 해야 두 좌표를 일치시킬 수 있을가요?

5개의 댓글

스크립터브혼
2021.07.25

forward는 플레이어가 바라보는 방향입니다. 플레이어가 기준이 되죠.

명령어에서 사용하는 ^는 좌표계입니다. 각각 x, y, z를 의미하죠. 월드가 기준입니다.


플레이어가 하늘을 보고있다면 forward는 하늘방향입니다. 앞이나 옆이 아니에요.

west, east, south, north를 사용해보세요.

ron_sa
2021.07.26
@스크립터브혼

월드가 기준인 좌표는 ~ 아니였나요..? 그리고 저는 플레이어가 바라보고 있는 방향을 기준으로 4칸앞, 1.5칸위를 원한게 맞아요!

앞에서 말하신것 처럼 하늘을 보고 있다면 하늘방향이 되게끔 말이에요..!

스크립터브혼
2021.07.26
@ron_sa
#> 시작위치로부터 각각 x, y, z만큼 이동한 위치를 반환합니다.
#> @param loc 시작위치
#> @param x 왼쪽 이동거리
#> @param y 윗쪽 이동거리
#> @param z 앞쪽 이동거리
#> @return 이동된 위치
function ExprLocationMove(loc:location, x:number, y:number, z:number) :: location:
    set {_pitch} to pitch of {_loc}
    set {_yaw} to yaw of {_loc}
    set {_v::x} to vector from yaw {_yaw} - 90 and pitch 0
    set {_v::y} to vector from yaw {_yaw} and pitch {_pitch} - 90
    set {_v::z} to vector from yaw {_yaw} and pitch {_pitch}
    loop "x" and "y", "z":
        set vector length of {_v::%loop-value%} to {_%loop-value%}
        set {_loc} to {_loc} ~ {_v::%loop-value%}
    return {_loc}
command /test:
    trigger:
        set {ks.loc} to ExprLocationMove( player, 0, 1.5, 4 )
        send "%{ks.loc}%"

벡터로 직접 이동 방향을 만들어서 구현했습니다. 이 함수로 해보세요.

0, 1.5, 4^0 ^1.5 ^4 와 같습니다.

ron_sa
2021.07.26
@스크립터브혼

진짜 감사합니다..! 잘 작동하네요!


그리고 제가 함수와 관련된건 알아도 벡터에 대해선 아직 잘 몰라서 혹시 벡터를 이해할 수 있을만한 글이나 링크를 주실 수 있으신가요?



그리고

 set vector length of {_v::%loop-value%} to {_%loop-value%} 

이 구문에서 {_%loop-value%} 가 모든 변수와  충돌이 일어나는 이름이라고 나와서

function ExprLocationMove(loc:location, xl:number, yl:number, zl:number) :: location:
    set {_pitch} to pitch of {_loc}
    set {_yaw} to yaw of {_loc}
    set {_v::x} to vector from yaw {_yaw} - 90 and pitch 0
    set {_v::y} to vector from yaw {_yaw} and pitch {_pitch} - 90
    set {_v::z} to vector from yaw {_yaw} and pitch {_pitch}
    loop "x" and "y", "z":
        set vector length of {_v::%loop-value%} to {_%loop-value%l}
        set {_loc} to {_loc} ~ {_v::%loop-value%}
    return {_loc}

이렇게 바꿨더니 이제 {_v::%loop-value%} 와 {_v::x} 가 충돌한다고 하네요.. 이건 같아야 하는게 맞으니 어떻게 바꿔야 할지 모르겠어요

혹시 다르게 바꾸는 방법이나 저 구문에서만 경고메시지가 안뜨게 할 수 있나요..??


스크립터브혼
2021.07.26
@ron_sa

해당 함수가 정의된 파일에 아래 코드를 추가하세요.

on load:
    suppress conflict warning

변수 이름 중복 경고를 하지 않겠다는 의미입니다.


벡터는 수학에서 말하는 그 벡터입니다.

https://skriptlang.github.io/Skript/expressions.html#ExprVectorAngleBetween

skript docs에서 벡터 익스프레션 참고하세요.