300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Unity第一人称手游-左侧控制移动 右侧控制视角和方向(第一人称 类似吃鸡游戏)

Unity第一人称手游-左侧控制移动 右侧控制视角和方向(第一人称 类似吃鸡游戏)

时间:2024-05-09 12:35:34

相关推荐

Unity第一人称手游-左侧控制移动 右侧控制视角和方向(第一人称 类似吃鸡游戏)

Unity第一人称手游-左侧控制移动,右侧控制视角和方向(第一人称,类似吃鸡游戏)

文章最后会附上 项目下载地址 备注:资源是URP的,普通平台修改资源材质即可

效果图

实现原理及步骤

左侧遥杆移动->移动获取位置和中心点的偏移,控制人物前后左右移动。(Unity ->Canvas->Image)

右侧视角控制->手指左右旋转获取偏移,控制相机的方向和偏移。

代码(部分代码)完整代码可下载项目下载地址

首先实现 IDragHandler 接口1.移动 和 旋转public virtual void OnDrag(PointerEventData ped){bool _right = ped.position.x > (Screen.width / 2);Vector2 pos;if (!_right) {if (RectTransformUtility.ScreenPointToLocalPointInRectangle(imgAnalog.rectTransform, ped.position, ped.pressEventCamera, out pos)){pos.x = ((pos.x - (imgAnalog.rectTransform.rect.width / 2)) / imgAnalog.rectTransform.sizeDelta.x);pos.y = ((pos.y + (imgAnalog.rectTransform.rect.height / 2)) / imgAnalog.rectTransform.sizeDelta.y);inputVectorAnalogic = new Vector3(pos.x * 2 + 1, 0, pos.y * 2 - 1);inputVectorAnalogic = (inputVectorAnalogic.magnitude > 1.0f) ? inputVectorAnalogic.normalized : inputVectorAnalogic;joystickImgAnalog.rectTransform.anchoredPosition = new Vector3(inputVectorAnalogic.x * (imgAnalog.rectTransform.sizeDelta.x / 3), inputVectorAnalogic.z * (imgAnalog.rectTransform.sizeDelta.y / 3));}}else if (_right) {if (RectTransformUtility.ScreenPointToLocalPointInRectangle(imgLook.rectTransform, ped.position, ped.pressEventCamera, out pos)){pos.x = ((pos.x - (imgLook.rectTransform.rect.width / 2)) / imgLook.rectTransform.sizeDelta.x);pos.y = ((pos.y + (imgLook.rectTransform.rect.height / 2)) / imgLook.rectTransform.sizeDelta.y);inputVectorLook = new Vector3(pos.x * 2 + 1, 0, pos.y * 2 - 1);inputVectorLook = (inputVectorLook.magnitude > 1.0f) ? inputVectorLook.normalized : inputVectorLook;joystickImgLook.rectTransform.anchoredPosition = new Vector3(inputVectorLook.x * (imgLook.rectTransform.sizeDelta.x / 3), inputVectorLook.z * (imgLook.rectTransform.sizeDelta.y / 3));} }}2, update 更新数据void Update(){//Lookvar md = new Vector2(inputVectorLook.z, inputVectorLook.x);camLook.transform.localRotation = Quaternion.Euler(xyBase.x + md.x * -60, 0, 0);player.transform.rotation = Quaternion.Euler(0, xyBase.y + md.y * 180, 0);var md2 = new Vector2(inputVectorAnalogic.z, inputVectorAnalogic.x);Vector3 forwardMovement = player.transform.forward * md2.x;Vector3 rightMovement = player.transform.right * md2.y;charController.SimpleMove(Vector3.ClampMagnitude(forwardMovement + rightMovement, 1.0f) * (Input.GetKey(KeyCode.LeftShift) ? speed * 2: speed));}

文章最后会附上 项目下载地址 备注:资源是URP的,普通平台修改资源材质即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。