마우스로 캐릭터 방향 바꾸기



스크립트 작성

 Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);

        Plane GroupPlane = new Plane(Vector3.up, Vector3.zero);

float rayLength;

        if(GroupPlane.Raycast(camearRay, out rayLength))

        {

            Vector3 pointTolook = camerRay.GetPoint(rayLength);

            transform.LookAt(new Vector3(pointTolook.x, transform.position.y, pointTolook.z));

        }


코드분석

Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition); : 마우스의 위치를 ScreenPointToRay를 이용해 카메라로 부터의 스크린의 점을 통해 레이를 반환한다.

Plane  GroupPlane = new Plane(Vector3.up, Vector.zero); : 월드 좌표로 하늘방향에 크기가 1인 단위 백터와 원점을 갖는다.

if(GroupPlane.Raycast(cameraRay, out rayLength) ; : 레이가 평면과 교차했는지 여부를 체크한다.

Vector3 pointTolook = camerRay.GetPoint(rayLenghth); : rayLenghth거리에 위치값을 반환한다.

transform.LookAt ~~: 위에서 구한 pointTolook 위치값을 캐릭터가 바라 보도록 한다.

Plane GroupPlane  = new Plane(Vector3.up, Vector.zero); 그냥 쓸수 없고 이렇게 하는 이유는??

유니티에서 Plane을 만드는 생성자는 3가지로 오버로딩 되어있다.(= 평면을 만들 수 있는 조건)

평면을 결정하는 최소 조건!

  1. 한 직선 위에 있지 않은 세 점
  2. 한 직선과 그 직선 위에 있지 않은 한 점
  3. 한 점에서 만나는 두 직선
  4. 서로 평행한 두 직선

첫 번째 사용

normal은 평면의 수직 방향을 얘기한다. 벡터는 방향과 크기를 가지고있지만 특정 위치를 나타내지는 않는다.
그래서 위치를 표현 할 수 있는 점이나, 거리를 인자로 받아야한다. 
1) public Plane(Vector3 inNormalVector3 inPoint);
노멀위치부터 한점의 위치,
2) public Plane(Vector3 inNormal, float d);
노멀위치로 부터 길이(d : 원점으로 부터의 거리)
3) public Plane(Vector3 a, Vector3 b, Vector3 c);
평면을 만드는 조건 :  한직선위에 있지 않는 세점

학습참고 평면조건 https://docs.unity3d.com/ScriptReference/Plane-ctor.html

+ Recent posts