2017.12.17笔记-关于角色和相机的控制
来源:互联网 发布:阅读杂志的软件 编辑:程序博客网 时间:2024/06/06 09:05
利用刚体的velocity进行移动,缺点:只能以世界坐标轴进行移动,暂时没发现velocity下用局部坐标系移动的方法:
void VMove() { if (Input.GetAxisRaw("Horizontal") > 0) { moveControl.velocity = new Vector3(speed, moveControl.velocity.y, moveControl.velocity.z); } else if (Input.GetAxisRaw("Horizontal") < 0) { moveControl.velocity = new Vector3(-speed, moveControl.velocity.y, moveControl.velocity.z); } else { moveControl.velocity = new Vector3(0, moveControl.velocity.y, moveControl.velocity.z); } if (Input.GetAxisRaw("Vertical") > 0) { moveControl.velocity = new Vector3(moveControl.velocity.x, moveControl.velocity.y, speed); } else if (Input.GetAxisRaw("Vertical") < 0) { moveControl.velocity = new Vector3(moveControl.velocity.x, moveControl.velocity.y, -speed); } else { moveControl.velocity = new Vector3(moveControl.velocity.x, moveControl.velocity.y, 0); } }
局部坐标移动方法:
void Move() { if (Input.GetAxisRaw("Horizontal") > 0) { this.transform.Translate(Vector3.right * speed*Time.deltaTime,Space.Self); } else if (Input.GetAxisRaw("Horizontal") < 0) { this.transform.Translate(Vector3.left * speed * Time.deltaTime, Space.Self); } else { this.transform.Translate(Vector3.zero); } if (Input.GetAxisRaw("Vertical") > 0) { this.transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.Self); } else if (Input.GetAxisRaw("Vertical") < 0) { this.transform.Translate(Vector3.back * speed * Time.deltaTime, Space.Self); } else { this.transform.Translate(Vector3.zero); } }
鼠标右键转动视野方法:
网上查得的方法如下
if (Input.GetMouseButton(1)) { //根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X) float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; //根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y) rotationY += Input.GetAxis("Mouse Y") * sensitivityY; //角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value rotationY = Mathf.Clamp(rotationY, minimumY, maximumY); //总体设置一下相机角度 transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); }
如果只挂载到camera下的话,不满足角色移动需求,研究后修改代码如下:
物体层级关系:胶囊为camera的父物体。胶囊上挂载PlayerControl。camera上挂载CameraControl
PlayerControl控制旋转代码:
if (Input.GetMouseButton(1)) { //根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X) float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; //总体设置一下相机角度 transform.localEulerAngles = new Vector3(0, rotationX, 0); }
CameraControl控制旋转代码:
if (Input.GetMouseButton(1)) { //根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y) rotationY += Input.GetAxis("Mouse Y") * sensitivityY; //角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value rotationY = Mathf.Clamp(rotationY, minimumY, maximumY); //总体设置一下相机角度 transform.localEulerAngles = new Vector3(-rotationY, 0, 0); }
这样一来,配合局部坐标系移动方法,使得角色移动视角控制类似与WOW游戏人物的控制
关于鼠标滚轮拉近拉远视角,网上所示的更改camera视野方法,更适用于狙击枪的瞄准模式,如下:
float fov = playerCamera.fieldOfView; fov += Input.GetAxis("Mouse ScrollWheel") * sensitivity1; fov = Mathf.Clamp(fov, minFov, maxFov); playerCamera.fieldOfView = fov;
接下来要解决的问题:滚轮拉近拉远角色方法以及配合右键旋转,还有就是按住左键绕角色旋转且不旋转角色本身。
阅读全文
0 0
- 2017.12.17笔记-关于角色和相机的控制
- 关于Unity3d代码控制相机的cullingmask
- 关于用户-角色-权限控制的疑问
- Unity3D第三视觉角色相机控制
- 人物动画的控制和相机跟随
- RPG黑暗之光(3)EasyTouch插件的使用、角色控制、相机跟随、状态记录
- 高通AR-关于切换相机跟踪图片的控制
- 转载他人:角色移动和相机跟随
- 关于相机传感器和镜头的关系
- UE4学习笔记5th:游戏控制的相机
- UE4学习笔记11th:玩家控制的相机
- 基于角色的访问控制:RBAC模型笔记
- Unity3D自学笔记——架构应用(八)人物移动与角色相机的跟随
- 相机标定简单的笔记和理解
- 基于角色和用户组的扩展访问控制模型
- 基于角色和用户组的扩展访问控制模型
- unity 通过键盘控制角色的移动和旋转
- 关于相机的使用
- 兄弟连学python03--- 利润算法
- 菜鸟wz的Python周记(4) 列表推倒式制作九九乘法表
- JaveScript的初识
- UVA12633:Super Rooks on Chessboard (FFT)
- ubuntu常用软件安装及遇到的问题
- 2017.12.17笔记-关于角色和相机的控制
- keras入门
- 服务器 常用命令
- 深度学习--卷积神经网络工作原理
- 历史记录
- TensorFlow入门教程集合
- ECharts官方教程(九)【ECharts中的事件和行为】
- ECharts官方教程(十)【小例子:自己实现拖拽】
- SSL双向认证下提升用户友好性的两例