(涉及角度范围限制、资源加载、预设体、屏幕坐标世界坐标互相转换)

//把主相机设置为FPS(空物体)的子物体,枪设置为主相机的字物体

public class FPS : MonoBehaviour {

public float speed;

//角度限制数值设置

public float MinimumX = -90;

public float MaximumX = 90;

//获取主相机

private Transform mCarmeraTransform;

//获取枪

private Transform mGunTransform;

//父物体旋转目标角度

private Quaternion mParentTargetRot;

//相机旋转目标角度

private Quaternion mCameraTargetRot;

//枪的旋转目标角度

private Quaternion mGunTargetRot;

// Use this for initialization

void Start () {

//隐藏光标

//Cursor.visible = false;

//用下标找子物体

mCarmeraTransform = transform.Find("Main Camera");

//mGunTransform = transform.GetChild(0);

//获取初始本地旋转角度

mParentTargetRot = transform.localRotation;

mCameraTargetRot = mCarmeraTransform.localRotation;

//mGunTargetRot = mGunTransform.localRotation;

}

// Update is called once per frame

void Update () {

//if (Input.GetKeyDown(KeyCode.Escape))

//{

// Cursor.visible = true;

//}

//直接调用方法

Move();

//旋转

float yRot = Input.GetAxis("Mouse X");

float xRot = Input.GetAxis("Mouse Y");

//获得物体旋转后的旋转角度

mParentTargetRot *= Quaternion.Euler(xRot, 0, 0);

mCameraTargetRot *= Quaternion.Euler(0, yRot, 0);

//mGunTargetRot *= Quaternion.Euler(0, yRot, 0);

//限制父物体角度移动范围

mParentTargetRot = ClampRotationAroundXAxis(mParentTargetRot);

//旋转设置为缓动

transform.localRotation = Quaternion.Slerp(transform.localRotation, mParentTargetRot, Time.deltaTime);

mCarmeraTransform.localRotation = Quaternion.Slerp(mCarmeraTransform.localRotation, mCameraTargetRot, Time.deltaTime);

//mGunTransform.localRotation = Quaternion.Slerp(mGunTransform.localRotation, mGunTargetRot, Time.deltaTime);

}

//使用WASD进行摄像机前后左右的位移

void Move(){

//位移

float hor = Input.GetAxis("Horizontal");

float ver = Input.GetAxis("Vertical");

transform.Translate(new Vector3(hor, 0, ver) * Time.deltaTime * speed);

}

//限制角度范围

Quaternion ClampRotationAroundXAxis(Quaternion q)

{

q.x /= q.w;

q.y /= q.w;

q.z /= q.w;

q.w = 1.0f;

float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan(q.x);

angleX = Mathf.Clamp(angleX, MinimumX, MaximumX);

q.x = Mathf.Tan(0.5f * Mathf.Deg2Rad * angleX);

return q;

}

}

//鼠标点击创建一个球

public class CreatBall : MonoBehaviour {

private GameObject ballPerfab;

private float z;

// Use this for initialization

void Start () {

ballPerfab = Resources.Load("Ball");

Transform plane = GameObject.Find("Plane").transform;

z = Camera.main.WorldToScreenPoint(plane.position).z;

}

// Update is called once per frame

void Update () {

//世界坐标 position

//本地坐标 localposition

//屏幕坐标 => 世界坐标 ScreenToWorld

//世界坐标 => 屏幕坐标 WorldToScreen

//视口坐标(0,1) 屏幕左下角为(0,0)

if (Input.GetMouseButtonDown(0))

{

Vector3 screenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, z);

Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPoint);

GameObject ball = Instantiate(ballPerfab, worldPosition, Quaternion.identity);

}

}

}

unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动、摄像机随鼠标移动旋转、鼠标点击添加物体...相关推荐

  1. unity 摄像头跟着鼠标移动_unity中镜头跟随鼠标移动

    摄像头移动 在游戏中大家的第一人称 第三人称都是靠摄像头的移动来实现的 ,现在给大家介绍一下摄像头的随着鼠标的旋转以及控制器运动的脚本 在项目中的Main Camera上添加脚本名字随便: 然后就是脚 ...

  2. unity中自制模拟第一人称视角

    public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...

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

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

  4. unity 摄像头跟着鼠标移动_unity第三视角移动,摄像机跟随

    在以前的仿真项目中用到了第三人称视角的移动, W . S . A . D 控制角色的前后左右移动,摄像机跟随角色移动,并且摄像 机做了缓冲处理.鼠标右键长按旋转控制镜头旋转,中键滑轮控制镜头拉进拉远. ...

  5. unity 摄像头跟着鼠标移动_Unity新手入门:摄像机随玩家一起移动

    using UnityEngine; using System.Collections; public class CameraControl : MonoBehaviour { // 玩家对象 pr ...

  6. Unity用代码写行走移动(第一人称)

    利用代码写物体移动,首先我们要知道按键检测 一般按键检测if (Input.GetKey(KeyCode.按键值)) 比如说我按W触发就是 if (Input.GetKey(KeyCode.W) 前进 ...

  7. Unity使用键盘wasd控制绑定角色和第一人称摄像机随鼠标移动

    首先创建一个物体,然后里面加上摄像机并且调整到相应的位置 在创建的物体上添加一个组件character controller 键盘控制移动代码 public float speed = 6.0F; p ...

  8. 十分钟带你打造unity3d第一人称射击

    那抱歉,上次那个Unity+kinect还没有更新,最近在深一步研究,不久将更新(绝对不负众望)!现在进入正题,十分钟带你打造unity3D第一人称射击游戏! 看完本篇博客,你将学会第一人称控制,粒子 ...

  9. 开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器

    [开源互助-原创文章,转载请说明出处] 第三帖中已经创建了一个cardboard自带的demo应用,但它是不能移动的,玩家只能站在原地,通过头部转动来观察四周,除此之外,玩家并没有更多的手段与游戏场景 ...

  10. ThreeJS第一人称视角处理

    简介 第一人称控件指针锁定API允许您在游戏界面中锁定鼠标或其他指针设备,以便您不用绝对定位光标就可以获得坐标变化值,从而准确地判断用户正在做什么,并且还可以防止用户意外地进入另一块屏幕或别的什么地方 ...

最新文章

  1. 丹佛斯变频器型号说明_英威腾变频器Goodrive20系列产品型号说明及功能介绍
  2. IIS发布 MVC 配置
  3. 【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
  4. 关于51CTO博客大赛的感想
  5. matlab 捕食者和猎物,MATLAB - 追求曲线(捕食者/猎物)
  6. Windows下MySQL数据库更改数据存储位置
  7. numpy中的argpartition
  8. 2020辽宁国家公务员考试申论模拟题:过度医疗
  9. 炒短线的好方法.以及如何买入涨停股票
  10. 学会 Arthas,让你 3 年经验掌握 5 年功力!
  11. 【转】TOEFL写作27分完全攻略
  12. 【ECshop错误集锦】解决ECShop发送邮件提示:Error: need RCPT command
  13. 英文外链怎么做效果好?
  14. matlab 画网格
  15. idea导入Moudle时,报错:Module “xxx” must not contain source root ““. The root already belongs to module ““
  16. 第一个小游戏“三子棋”超详细
  17. 快捷方式自动修复小工具
  18. 基于PHP的食堂管理系统
  19. 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)
  20. 计算机导论ppt创意作品,《计算机导论》全套PPT电子课件教案-第1章 绪论.ppt

热门文章

  1. Axure RP 介绍
  2. C++求出200以内的所有质数(素数),并按每行5个输出在屏幕上。
  3. Linux上查找最大文件的 3 种方法
  4. excel中indirect函数使用方法和应用实例
  5. html字体字号颜色怎么设置,HTML 字体颜色怎么设置?
  6. 用对象的上转型对象、方法重写,抽象编程:求柱体的体积。
  7. Python爬虫实战之利用多线程爬取千图网的素材图片
  8. java 数据内地地址_我国大陆居民×××Java验证
  9. android版身份证号码校验
  10. 请求服务器获取微信openid,Golang通过小程序获取微信openid的方法示例