实现该功能的技术点
- 子物体来控制旋转,不能旋转父物体会影响主物体的移动
- 插值旋转
- 手指按下位置插值到手指真实的按下位置
代码展示
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SlideController : MonoBehaviour
{
private bool _down;
private Vector3 _downPos;
private Transform _childTr;
public float speed=1;
public float lerpSpeed = 20;
private void Awake()
{
_childTr = transform.GetChild(0);
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
_downPos = Input.mousePosition;
_down = true;
}
if (Input.GetMouseButtonUp(0))
_down = false;
if(!_down) return;
float eulerY = 0;
var slideDir = (Input.mousePosition.x - _downPos.x);
slideDir = slideDir * (750f / Screen.width);
if (_down)
{
transform.Translate(Time.deltaTime * speed*new Vector3(slideDir,0,0));
eulerY = slideDir > 0? 30:-30;
}
_childTr.localRotation = Quaternion.Lerp( _childTr.localRotation,Quaternion.Euler(0,eulerY,0),Time.deltaTime*10);
_downPos = Vector3.Lerp(_downPos, Input.mousePosition, Time.deltaTime * lerpSpeed);
}
}