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);
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.