using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DogManager : MonoBehaviour
{
Ray ray;
RaycastHit hit;
Vector3 old_pos = Vector3.zero; //移动前的位置
Vector3 step = Vector3.zero; //位移向量
Vector3 aimPoint = Vector3.zero; //目标位置
Quaternion ratation; //要转向的目标方向
CharacterController controller;
public float speed;
void Awake()
{
controller = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.CompareTag("plane"))
{
old_pos = transform.position;
aimPoint = hit.point;
// aimPoint.y = 1;
step = aimPoint - transform.position;
ratation = Quaternion.LookRotation(step);
}
}
}
DoMove();
isToAim();
}
/// <summary>
/// 移动
/// </summary>
void DoMove()
{
if (step != Vector3.zero)
{
transform.rotation = Quaternion.Lerp(transform.rotation, ratation, 0.1f);
controller.Move(Vector3.ClampMagnitude(step, 0.1f) * speed);
}
}
/// <summary>
/// 移动结束
/// </summary>
void isToAim()
{
if ((transform.position - old_pos).magnitude >= step.magnitude)
{
step = Vector3.zero;
}
}
}
unity 点击地面物体旋转并移动到点击位置
最新推荐文章于 2024-02-17 20:52:34 发布