unity Camera第一人称移动,3中方法实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class Player : MonoBehaviour {
public GameObject CapsulePlayer, MainCamerahead;
private float aixsX, aixsY, mouseScroll;
private int moveSpeed;
private int standardMoveSpeed = ;
private int runMoveSpeed = ;
private int mouseScrollSpeed = ;
private float mouseScrolbackSpeed = 0.05f;
private CharacterController charaControl;
private Camera charaCam;
public float mouseNumOne = , mouseNumTwo = ;
public static bool chufa = false;
void Awake()
{
charaControl = GetComponent<CharacterController>();
charaCam = MainCamerahead.GetComponent<Camera>();
}
void Update()
{
aixsX = Input.GetAxis("Horizontal");
aixsY = Input.GetAxis("Vertical");
mouseScroll = Input.GetAxis("Mouse ScrollWheel");
if (Input.GetKey(KeyCode.LeftShift))
{
moveSpeed = runMoveSpeed;
}
else
{
moveSpeed = standardMoveSpeed;
} charaControl.SimpleMove(transform.forward * moveSpeed * aixsY * 0.02f + transform.right * moveSpeed * aixsX * 0.02f); /* ***********************镜头跟随鼠标移动的第一种方法**********************
float mousex = Input.GetAxis("Mouse X") * 2f;
float mousey = Input.GetAxis("Mouse Y") * 2f;
if (mousex > 180)
{
mousex = 180;
}
else if (mousex < -180)
{
mousex = -180;
}
if (Mathf.Abs(mousey) < 120f)
{
MainCamerahead.transform.localRotation = charaCam.transform.localRotation * Quaternion.Euler(-mousey, 0, 0);
CapsulePlayer.transform.localRotation = transform.localRotation * Quaternion.Euler(0, mousex, 0);
}
*/ //镜头跟随鼠标移动的第二种写法 (总之写法有很多,自己用着舒服就行)
if (chufa )
{
mouseNumOne += Input.GetAxis("Mouse Y");
mouseNumTwo += Input.GetAxis("Mouse X");
if (mouseNumOne > )
{
mouseNumOne = ;
}
else if (mouseNumOne < -)
{
mouseNumOne = -;
}
if (Mathf.Abs(mouseNumOne) < 90f)
{
MainCamerahead.transform.Rotate(new Vector3(- * Input.GetAxis("Mouse Y"), , ));
CapsulePlayer.transform.Rotate(, 1.6f * Input.GetAxis("Mouse X"), );
}
}
else
{
//鼠标滑动镜头跟着滑动
if (Input.GetMouseButton())
{
mouseNumOne += Input.GetAxis("Mouse Y");
mouseNumTwo += Input.GetAxis("Mouse X");
if (mouseNumOne > )
{
mouseNumOne = ;
}
else if (mouseNumOne < -)
{
mouseNumOne = -;
}
if (Mathf.Abs(mouseNumOne) < 90f)
{
MainCamerahead.transform.Rotate(new Vector3(- * Input.GetAxis("Mouse Y"), , ));
CapsulePlayer.transform.Rotate(, 1.6f * Input.GetAxis("Mouse X"), );
}
}
} //放大缩小功能 if (charaCam.fieldOfView > )
{
charaCam.fieldOfView -= mouseScrolbackSpeed;
}
else if (charaCam.fieldOfView < )
{
charaCam.fieldOfView += mouseScrolbackSpeed;
}
else
{
charaCam.fieldOfView -= mouseScroll * mouseScrollSpeed;
}
}
}
Demo链接:https://pan.baidu.com/s/1s8At3pMXI94-6Ri14_JvPw
提取码:1cbw
代码写的不好,大家多多包涵。
unity Camera第一人称移动,3中方法实现的更多相关文章
- 关于Unity中FPS第一人称射击类游戏制作(专题十)
当前Unity最新版本5.6.3f1,我使用的是5.5.1f1 场景搭建 1: 导入人物模型, 手持一把枪;2: 导入碎片模型;3: 创建一个平面;4: 创建一个障碍物;5: 导入人物模型;6: 配置 ...
- unity中制作模拟第一人称视角下的指南针
private int zRotation; public GameObject obj; public void Update() { //obj = GameObject.Find("C ...
- unity中自制模拟第一人称视角
public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...
- 【Unity3D】Unity自带组件—完成第一人称人物控制
1.导入unity自带的Character Controllers包 2.可以看到First Person Controller组件的构成 Mouse Look() : 随鼠标的移动而使所属物体发生旋 ...
- Unity——第一人称控制器的实现
Unity--第一人称控制器的实现 一.功能描述 在一个场景中实现人物的前后左右移动和跳跃功能:其中前后左右移动通过W.A.S.D方向键实现,跳跃功能通过空格键实现,并且考虑到重力作用,来调节跳跃功能 ...
- C#开发Unity游戏教程之Unity中方法的参数
C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...
- [3D]第一人称相机类Camera
自己根据C++ D3D的源码改写一个相机类(第一人称). using System; using System.Collections.Generic; using System.Linq; usin ...
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...
- 基于HTML5及WebGL开发的2D3D第一人称漫游进行碰撞检测
为了实现一个基于HTML5的场景小游戏,我采用了HT for Web来实现,短短200行代码,我就能实现用“第一人称”来操作前进后退上下左右,并且实现了碰撞检测. 先来看下实现的效果:http://h ...
随机推荐
- app开发中的经常遇到的问题
1.banner不显示: 原因:配置文件中的 域名写错了. img_path = https://www.beicaiduo.com/znbsite/static/tinymce/upload/ 解决 ...
- Hexo next主题下添加天气插件
最近在优化hexo 新搭建的博客,想给博客添加一个天气插件,奈何找了很久也没发现,好不容易发现一个天气插件 心知天气:https://www.seniverse.com/widget/get 运气不好 ...
- Kubernetes之调度器和调度过程
scheduler 当Scheduler通过API server 的watch接口监听到新建Pod副本的信息后,它会检查所有符合该Pod要求的Node列表,开始执行Pod调度逻辑.调度成功后将Pod绑 ...
- Unity 案例
Unity 案例-用Unity 开发的产品 水电站管理.监控.培训系统 石油加工管理系统 房地产开发 污水处理系统 陆海空军事训练 城市和社区监控,管理系统 虚拟展馆 家庭自动化系统 石油加工管理系统 ...
- 02--STL序列容器(Vector)
一:vector容器简介 图片和顺序栈相似,但是vector数组是动态数组,支持随机存取--->但是在尾部添加或者溢出元素非常快速,中间插入删除费时 vector是将元素置于一个动态数组中加以管 ...
- Ubuntu屏幕分辨率无1920 1080
xrandr 没有1920X1080分辨率,所以手动添加一个1080P分辨率,先输入“cvt 1920 1080”命令,查询一下1080P分辨率的有效扫描频率 然后 sudo xrandr --new ...
- QPS从0到4000请求每秒,谈达达后台架构演化之路
达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...
- Aras前端的一些知识
top.aras包含了aras前端大部分的API /* * uiShowItem * 打开物体视窗 * parameters: * 1) itemTypeName - may be empty str ...
- jdbcTemplate批量插入处理数据
最近有个需求,就是批量处理数据,但是并发量应该很大,当时第一时间想到得是mybatis的foreach去处理,但是后来通过查资料发现,相对有spring 的jdbcTemplate处理速度,mybat ...
- redis---------AOF文件异常导致的redis无法载入
AOF损坏时的对策1.若在写AOF文件时Server崩溃则可能导致AOF文件损坏而不能被Redis载入.可通过如下步骤修复: 创建一个AOF文件的备份: cp appendonly.aof appen ...