translate의 두가지
오버로딩
보면 기본적으로 space.self로 되어있는것을알수있다(로컬좌표계)
월드좌표계로 다루고 싶다면 오버로딩된 두번째 메소드로 두번째매개변수인 relativeto를 space.world로 명시해주면된다.
transform.Translate(new Vector(3,0,0)) 을 사용하여
물체를 90도만큼 회전을 시키고,
로컬좌표계x축으로이동을하게되면
오브젝트의 기준의 x축으로 이동을 하기때문에 월드좌표계에서의z축으로 이동한다.
즉 로컬의 회전값도 기준이된다.
참고로 relativeto를
다른오브젝트.transform으로 하면
그 다른오브젝트가 기준이되어 움직인다!
개발 중 이해가 안됐던 부분이다.
몬스터가 화면에서 멀어질 때 플레이어의
주변으로 재배치하는 로직인데,
여기서 playerDir은 플레이어의 Input.GetAxisRaw() 수직, 수평값이다. (Vector 2)
여기서 두번째 매개변수를 명시해주지 않았으므로 default값인 Space.self이다.
그럼 이 스크립트가 속해있는 몬스터 오브젝트가 기준이 될거라 생각했는데, 플레이어의 기준이었다.
두번째 매개변수를 임의로 Space.World라고 해도 차이가 없는걸 보니(플레이어 기준으로 20만큼 떨어져서 재배치)
playerDir를 다뤘으므로 player의 수직수평값이 기준이되어 Translate()가 적용되는 것 같다.
case "Enemy":
if(coll.enabled)
{
transform.Translate(playerDir*20 + new Vector3(Random.Range(-3f,3f), Random.Range(-3f,3f), 0f));
}
break;
translate의 두가지
오버로딩
보면 기본적으로 space.self로 되어있는것을알수있다(로컬좌표계)
월드좌표계로 다루고 싶다면 오버로딩된 두번째 메소드로 두번째매개변수인 relativeto를 space.world로 명시해주면된다.
transform.Translate(new Vector(3,0,0)) 을 사용하여
물체를 90도만큼 회전을 시키고,
로컬좌표계x축으로이동을하게되면
오브젝트의 기준의 x축으로 이동을 하기때문에 월드좌표계에서의z축으로 이동한다.
즉 로컬의 회전값도 기준이된다.
참고로 relativeto를
다른오브젝트.transform으로 하면
그 다른오브젝트가 기준이되어 움직인다!
개발 중 이해가 안됐던 부분이다.
몬스터가 화면에서 멀어질 때 플레이어의
주변으로 재배치하는 로직인데,
여기서 playerDir은 플레이어의 Input.GetAxisRaw() 수직, 수평값이다. (Vector 2)
여기서 두번째 매개변수를 명시해주지 않았으므로 default값인 Space.self이다.
그럼 이 스크립트가 속해있는 몬스터 오브젝트가 기준이 될거라 생각했는데, 플레이어의 기준이었다.
두번째 매개변수를 임의로 Space.World라고 해도 차이가 없는걸 보니(플레이어 기준으로 20만큼 떨어져서 재배치)
playerDir를 다뤘으므로 player의 수직수평값이 기준이되어 Translate()가 적용되는 것 같다.
case "Enemy":
if(coll.enabled)
{
transform.Translate(playerDir*20 + new Vector3(Random.Range(-3f,3f), Random.Range(-3f,3f), 0f));
}
break;