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

我们用图片制作一个摇杆。首先新建一个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 update
void 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 frame
void Update()
{
output = content.localPosition / radius;
}
}
把ScrollCircle.cs拖给JoyStick-move,然后再把我们的ViewPort和Content对象分别拖给ScrollCircle.cs的Viewport和Content属性。不出意外的话就可以使用该摇杆了,自己调整好位置,大概截图(截图的箭头指向属性,但实际上要拖到属性右边的输入框)

老规矩,使用一个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 frame
void 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,然后给变量赋一下值,如下截图


不出意外的话现在已经可以使用摇杆控制了
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O