1、挂载脚本到角色的父物体A上
2 、以屏幕左边的触摸为移动,右边为转向操作
3、加载角色时,将角色的父物体设置为A,须将角色的位置和角度置0
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TouchMove : MonoBehaviour
{
public float x = 189f;
public float y = 1f;
public float z = 562f;
[SerializeField]
private Transform camera;
public float dx = 2;
public float dy = 14;
public float dz = -10;
public int speed = 8;
public int roteSpeed = 45;
public Vector3 dretOne = Vector3.zero;
public bool if_move = false;
public bool if_rote = false;
Vector2 deltaPos = Vector2.zero;
int roteDirt =0;
public int screenWidth = Screen.width;
public int screenHeight = Screen.height;
void Start()
{
}
void Update()
{
if (Input.touchCount == 1)
{
Touch touch = Input.GetTouch(0);
if (touch.position.x < screenWidth / 2)
{
checkMove(touch);
}else if(touch.position.x > screenWidth / 2)
{
checkRote(touch);
}
} else if (Input.touchCount > 1)
{
Touch touch1 = Input.GetTouch(0);
Touch touch2 = Input.GetTouch(1);
if (touch1.position.x < screenWidth / 2)
{
checkMove(touch1);
}
else if (touch1.position.x > screenWidth / 2)
{
checkRote(touch1);
}
if (touch2.position.x < screenWidth / 2)
{
checkMove(touch2);
}
else if (touch2.position.x > screenWidth / 2)
{
checkRote(touch2);
}
}
if (if_move)
{
Move();
}
if (if_rote)
{
Rote();
}
}
void checkRote(Touch touch)
{
if (touch.phase == TouchPhase.Began)
{
Debug.Log("Touch began");
if_rote = true;
Debug.Log("触碰位置:" + touch.position);
}
else if (touch.phase == TouchPhase.Moved )
{
deltaPos = touch.deltaPosition;
if (Math.Abs(deltaPos.x) > 2 )
{
if(deltaPos.x<0)
{
roteDirt = -1;
}
else
{
roteDirt = 1;
}
}
Debug.Log("Touch moved:" + deltaPos);
}
else if (touch.phase == TouchPhase.Ended)
{
Debug.Log("Touch ended");
if_rote = false;
roteDirt = 0;
}
}
void checkMove(Touch touch)
{
deltaPos = touch.deltaPosition;
if (touch.phase == TouchPhase.Began)
{
Debug.Log("Touch began");
if_move = true;
Debug.Log("触碰位置:" + touch.position);
}
if (touch.phase == TouchPhase.Moved )
{
if (Math.Abs(deltaPos.x) > 2 || Math.Abs(deltaPos.y) > 2)
{
dretOne = new Vector3(deltaPos.x, 0, deltaPos.y).normalized;
}
Debug.Log("Touch moved:" + deltaPos);
}
else if (touch.phase == TouchPhase.Ended)
{
Debug.Log("Touch ended");
if_move = false;
dretOne = Vector3.zero;
}
}
void Rote()
{
transform.Rotate(Vector3.up * roteDirt*roteSpeed * Time.deltaTime, Space.Self);
}
void Move()
{
transform.localPosition += dretOne * Time.deltaTime * speed;
}
public void BackBtn()
{
transform.position = new Vector3(x, y, z);
}
void CameraLook()
{
camera.position = transform.position + new Vector3(dx, dy, dz);
}
}