1.说明

第一人称角色控制器很常见,unity的标准资源包里也有,但试了一下,那个好像只有摇杆移动方向,无法使用摇杆进行视角旋转,所以我这里还是自己动手实现一个吧。制作两个虚拟摇杆,左边的控制前后左右的运动,右边的控制旋转视角方向。如下动图所示

2.制作摇杆

我们用图片制作一个摇杆。首先新建一个image,改名为JoyStick-move(创建 image会自动创建一个Canvas),表示一个控制移动的摇杆,再建一个 image 子组件,改名为ViewPort,表示摇杆外面的圈圈,然后再建一个image孙子组件,改名为Content,表示摇杆里面的小圈圈,所以JoyStick-move、ViewPort、Content都是image。然后再把JoyStick-move复制一份得到改名为JoyStick-rotate,表示一个控制视角的摇杆,结构如下

之后我们分别修改ViewPoint和Content的图片为摇杆应该有的样子,摇杆图片网上搜一下,或者自己用PS做一个 ,反正也就是两个圈圈。

我们可以给JoyStick-move添加一个ScrollRect组件就可以实现摇杆的拖拽效果了,但拖拽区域是一个矩形,我们最好改为圆形,所以我们可以写一个脚本ScrollCircle继承于ScrollRect

ScrollCircle.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class ScrollCircle : ScrollRect
{float radius = 0;public Vector2 output;// Start is called before the first frame updatevoid Start(){output = new Vector2();radius = (transform as RectTransform).rect.size.x * 0.5f;}public override void OnDrag(PointerEventData eventData) {base.OnDrag(eventData);Vector2 pos = content.anchoredPosition;if (pos.magnitude > radius) { pos = pos.normalized * radius;SetContentAnchoredPosition(pos);}}// Update is called once per framevoid Update(){output = content.localPosition / radius;}
}

把ScrollCircle.cs拖给JoyStick-move,然后再把我们的ViewPort和Content对象分别拖给ScrollCircle.cs的Viewport和Content属性。不出意外的话就可以使用该摇杆了,自己调整好位置,大概截图(截图的箭头指向属性,但实际上要拖到属性右边的输入框)

3.第一人称角色控制器

老规矩,使用一个capsule当主角,首先创建一个空对象,改名为FPSPlayer,然后创建一个Capsule和 一个Camera当做FPSPlayer的子物体,结构如下

我们还需要给FPSPlayer增加一个CharacterController组件,这样才能更好地控制人物。
接下来要做的是写移动脚本和旋转视角的脚本,分别取名为MoveScript.cs和RotateScript.cs。内容如下

MoveScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MoveScript : MonoBehaviour
{public ScrollCircle scroll;  // 摇杆对象public CharacterController PlayerController;  // 角色控制器public float MoveSpeed = 10f; // 移动速度public Vector3 MoveVec3;private float horizontal;private float vertical;private float gravity = 9.8f;public float JumpSpeed = 15f;void Start(){}void Update(){if (PlayerController.isGrounded){   // 键盘输入// horizontal = Input.GetAxis("Horizontal");// vertical = Input.GetAxis("Vertical");// 摇杆输入horizontal = scroll.output.x;vertical = scroll.output.y;MoveVec3 = (transform.forward * vertical + transform.right * horizontal) * MoveSpeed;//判断玩家是否按下空格键if (Input.GetAxis("Jump") == 1){MoveVec3.y = MoveVec3.y + JumpSpeed;}}MoveVec3.y = MoveVec3.y - gravity * Time.deltaTime;PlayerController.Move(MoveVec3 * Time.deltaTime);}
}

RotateScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RotateScript : MonoBehaviour
{void Start(){// player = GameObject.Find("Capsule");}public ScrollCircle scroll; // 摇杆对象public Transform RotationTarget;  // 被旋转对象private float rotateX;private float rotateY;public float RotateSensitivity = 50f;public float xRotation;// Update is called once per framevoid Update(){// 鼠标// rotateX = Input.GetAxis("Mouse X") * RotateSensitivity * Time.deltaTime;// rotateY = Input.GetAxis("Mouse Y") * RotateSensitivity * Time.deltaTime;// 摇杆rotateX = scroll.output.x * RotateSensitivity * Time.deltaTime;rotateY = scroll.output.y * RotateSensitivity * Time.deltaTime;xRotation = xRotation - rotateY;xRotation = Mathf.Clamp(xRotation, -90f, 90f);RotationTarget.Rotate(Vector3.up * rotateX);this.transform.localRotation = Quaternion.Euler(xRotation, 0, 0);}
}

把MoveScript.cs拖给FPSPlayer,把RotateScript.cs拖给Camera,然后给变量赋一下值,如下截图

不出意外的话现在已经可以使用摇杆控制了

【unity 】第一人称角色控制器手机虚拟双摇杆相关推荐

  1. [Unity3D]第一人称角色控制器

    [Unity3D]最简单最详细的第一人称角色控制器 自学Unity3D有一段时间了,一直想弄一个第一人称角色控制器,网上还是有很多教程和资料,但感觉有很多教程和资料理解起来比较复杂,在这里我结合网上所 ...

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

    Unity第一人称手游-左侧控制移动,右侧控制视角和方向(第一人称,类似吃鸡游戏) 文章最后会附上 项目下载地址 备注:资源是URP的,普通平台修改资源材质即可 效果图 实现原理及步骤 左侧遥杆移动- ...

  3. UE4 在游戏运行时更改变量 (通过鼠标滑轮来更改第一人称角色的最大行走速度)

    在上一篇博客中(UE4 更改组件变量 (以修改第一人称角色模板的最大行走速度和跳跃高度为例))已经创建了最大行走速度这个变量,如何在游戏运行时修改它从而达到动态调整速度的效果? 效果: 步骤: 1.创 ...

  4. 详解Unity中的角色控制器

    前言 如何让玩家所操纵的角色动起来,这在Unity中很容易实现,但是如何确保玩家所操作的角色不会产生一些非常违反物理常识的情况?而这就需要进行大量的检测,已确保玩家所操纵的角色正常.所幸Unity为我 ...

  5. unity第一人称射击游戏,枪击游戏,功能完整可以当大作业或者毕设

    unity第一人称射击游戏,枪击游戏(含源码和exe导出文件,下载链接在文末) unity第一人称枪击游戏,分为海岛地图和沙漠地图,可以开镜射击,敌人可以移动,菜单页面有开始游戏,游戏说明,退出三个按 ...

  6. 【Unity】多种方法实现第一人称角色移动(一)角色控制器

    前言   在Unity中要实现第一人称视角移动的方法有很多,每种方法各有优劣,本次要介绍的就是使用角色控制器CharacterController来实现的方法.   在阅览下面的步骤之前,你首先需要一 ...

  7. Unity第一人称控制器使用

    简介:本节主要介绍使用官方自带的FPS包来实现第一人称控制,鉴于官方提供的案例已经十分完备,无需重复造轮子,故本文章不含任何代码实现~ 资源商店获取包 众所周知,能在资源商店找到的模型或者脚本就不要自 ...

  8. Unity第一人称控制器

    不得不说,unity最新的轻量级角色控制器搭配新输入系统确实好用.不过我不会(doge).想学习的小伙伴可以直接在Hub里面下载unity的第一人称控制器模板,个人觉得非常适合学习. 简单的第一人称控 ...

  9. Unity 第一人称、第三人称、漫游视角 控制器.

    前言 这是以前写的人物控制器(包含第一人称.第三人称.漫游视角),这里做个记录,方便后续参考使用. 实现 模型使用官方的,操作使用鼠标右键控制视角,键盘WASD.Shift控制人物移动. 切换到漫游视 ...

  10. Unity 第三人称角色控制器:动画混合树、Cinemachine等功能或插件的使用

    前言: 无论是RPG.ACT.AVG还是TPS游戏,都有大量的以第三人称为人物视角的游戏作品,尤其是TPS,直接以第三人称为特点来命名 游戏类型: RPG:角色扮演游戏 ACT:动作游戏 AVG:冒险 ...

最新文章

  1. python面向对象编程138讲_Python---面向对象编程-1
  2. 数据集标注工具_如何提高数据标注质量,提供精细化标注数据集?丨曼孚科技...
  3. paip.语义分析--单字词名词表
  4. jquery中的DOM操作集锦
  5. 转:亿级Web系统的高容错性实践(好博文)
  6. Resource is out of sync with the file system
  7. 用《只狼》教你学会Git(中)
  8. Packet Tracer 思科模拟器入门教程 之九 路由器的基本配置
  9. 工序排班问题数学模型
  10. SD卡简单介绍(个人笔记)杜绝垃圾堆里刨食
  11. 图像处理之计算二值连通区域的质心
  12. php控制舵机,分享一个关于SG90舵机的实验(+串口控制)
  13. 是不是选择任何一个方向,都会游向同一个宿命呢
  14. 单元格的边框没有被显示出来
  15. 关于python语言和人工智能以下哪个说法不正确_民用建筑包括()和()。
  16. 字幕滚动效果---非常酷哦
  17. html语言中kbd的含义,HTML: kbd 标签
  18. 微型计算机指令系统-移位指令
  19. C++条件运算符(三目运算符+逗号运算符)案例实练
  20. 计算机发展史—从织布机到IBM!

热门文章

  1. uniapp的button按钮使用boder:none依然无法去掉黑色边框的解决。
  2. iphone模拟器安装app
  3. python绘制基因结构图_手把手教你从头绘制基因簇结构图
  4. java知识点ppt背景图片,Java 给PowerPoint文档设置背景颜色和背景图片
  5. 水调歌头.明月几时有 小儿拼音版
  6. 今日头条推荐算法原理首公开,头条首席算法架构师带来详细解读
  7. Mac命令行出现-bash: command not found的解决办法
  8. sunshine in the rain
  9. Ubuntu 挂载ISO文件
  10. sensor gyro_3d not found