Unity 는 물 체 를 마우스 클릭 위치 로 이동 합 니 다.

3401 단어 unity이동 하 다.
본 논문 의 사례 는 유 니 티 가 마우스 클릭 위치 로 이동 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
목적: 물 체 를 마우스 클릭 에 대응 하 는 공간 위치 로 이동 시 키 고 물 체 를 클릭 한 대상 에 게 기울 이지 못 하 게 합 니 다.
먼저,클릭 화면 에 대응 하 는 공간 위 치 를 가 져 와 야 합 니 다.이것 은 먼저 화면 좌 표를 가 져 온 다음 에 공간 좌표 로 전환 할 수 있 습 니 다.방사선 을 통 해 공간 위 치 를 직접 얻 을 수 있다.
그 다음 에 물 체 를 목적지 로 이동 시 키 면 직접 차 이 를 통 해 이동 할 수 있 고 물 체 를 목표 점 으로 볼 수 있 으 며 Lookat()를 직접 사용 할 수 없다.왜냐하면 이 함 수 는 물체 의 앞 면 을 목표 점(즉 물체 의 forward 지향)으로 하 는 것 이기 때문이다.
물체 에서 목표 점 까지 의 벡터 는 물 체 를 X,Y,Z 방향 에서 모두 회전 시 키 고 경사 가 생 길 수 있다).목표 점 과 물체 의 높이 가 일치 하지 않 을 때,예 를 들 어 서 있 는 사람 은 그 를 지면 위의 어느 위치 로 가게 한다.만약 에 사용 하면
Lookat 는 사람 이 목표 점 을 비 뚤 게 볼 수 있 습 니 다.아래 그림 에서 보 듯 이 우리 가 원 하 는 것 은 사람 이 물 체 를 향 한 방향 일 뿐 입 니 다.

//       Z   ,     ,        
using UnityEngine;
using System.Collections;
 
public class Move : MonoBehaviour {
 
  private Vector3 targetPos;
 // Use this for initialization
 void Start () {
 
 }
 
 // Update is called once per frame
 void Update () {
 
 
    if (Input.GetMouseButtonDown(0))
    {
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
      RaycastHit hit;
      if(Physics.Raycast(ray,out hit,1000.0f)){       
        targetPos = hit.point;
      }
  
      turnForward2(transform, targetPos);
    }
    //transform.LookAt(targetPos);
    transform.position = Vector3.Lerp(transform.position, targetPos, Time.deltaTime);
 
  
 
 }
 
  /// <summary>
  ///    transform.LookAt(targetPos);              ,              
  ///              ,         ,  y       
  /// </summary>
  /// <param name="origin"></param>
  /// <param name="target"></param>
  void turnForward(Transform origin,Vector3 target) {
 
 
    //Vector3 forward_dir = target - origin.position;
 
    //Quaternion rotate = Quaternion.FromToRotation(origin.forward, forward_dir);
    //float angle = rotate.eulerAngles.y;
    //origin.rotation *= rotate;
 
    //            XOZ  ,     y         
    Vector3 t1 = new Vector3(origin.position.x, 0, origin.position.z);
    Vector3 t2 = new Vector3(target.x, 0, target.z);
 
    Vector3 forward_dir = t2-t1;
    Quaternion rotate = Quaternion.FromToRotation(origin.forward, forward_dir);
    float angle = rotate.eulerAngles.y;
    origin.rotation *= rotate;//    。
  }
 
  /// <summary>
  ///   y   
  /// </summary>
  /// <param name="origin"></param>
  /// <param name="target"></param>
  void turnForward2(Transform origin, Vector3 target)
  {
 
 
    Vector3 forward_dir = target - origin.position;
 
    Quaternion rotate = Quaternion.FromToRotation(origin.forward, forward_dir);
    float angle = rotate.eulerAngles.y;
    // origin.rotation *= rotate;
    // origin.Rotate(0f, angle, 0f);
    origin.Rotate(Vector3.up,angle);
 
  }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기