【Unity】简单案例脚本实现 | 鼠标观察/键盘控制移动飞行/行走/碰撞检测

《Unity5实战-使用C#和Unity开发多平台游戏》第二章-构建一个让你置身3D空间的演示
鼠标观察/键盘控制移动飞行/行走/碰撞检测
Unity版本:2019.4.23f1c1

  • 注意脚本名称和组件添加,不在文章中一一强调
  • 场景模型都是在资源商店选择的免费下载(选择Sort by Price(Low to High)排序)搜索参考关键字:airplane、sky
  • 整篇的实例代码是修改累加的,为了防止混乱我就全部贴上,不强调新增或删减部分

搭建:一架飞机模型(脚本挂载物体),天空盒(照明设置),摄像机Camera
原始画面:
在这里插入图片描述

跟随鼠标观察周围脚本

运行效果:

在这里插入图片描述
如果改为鼠标X则只能水平旋转(我这里是摄像机角度有些倾斜,不是飞机
在这里插入图片描述
在这里插入图片描述

using UnityEngine;
using System.Collections;public class MouseLook : MonoBehaviour
{//观察周围public enum RotationAxes{MouseXAndY=0,MouseX=1,MouseY=2}public RotationAxes axes = RotationAxes.MouseXAndY;public float sensitivityHor = 9.0f;//旋转速度public float sensitivityVert = 9.0f;public float miniumVert = -45.0f;public float maximumVert = 45.0f;private float _rotationX = 0;void Start(){Rigidbody body = GetComponent<Rigidbody>();if (body != null)body.freezeRotation = true;}// Update is called once per framevoid Update(){if (axes == RotationAxes.MouseX)//水平旋转{transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);//GetAxis()获取鼠标的输入}else if (axes == RotationAxes.MouseY)//垂直旋转{_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;//基于鼠标增加垂直角度_rotationX = Mathf.Clamp(_rotationX, miniumVert, maximumVert);//将垂直角度限制在最小值和最大值之间float rotationY = transform.localEulerAngles.y;//保持Y的角度一样(也就是水平没有旋转)transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);//使用存储旋转值创建新的Vector}else//水平且垂直旋转{_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;_rotationX = Mathf.Clamp(_rotationX, miniumVert, maximumVert);float delta = Input.GetAxis("Mouse X") * sensitivityHor;//旋转变化量float rotationY = transform.localEulerAngles.y + delta;//使用delta增加旋转角度transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);}}
}

第一人称控件

在这里插入图片描述

运行效果:键盘WSAD或上下左右,鼠标移动水平高度
在这里插入图片描述在这里插入图片描述
在这里插入图片描述


//using System.Collections.Generic;
using UnityEngine;
using System.Collections;public class FPS : MonoBehaviour
{public float speed = 3.0f;//观察周围public enum RotationAxes{MouseXAndY = 0,MouseX = 1,MouseY = 2}public RotationAxes axes = RotationAxes.MouseXAndY;public float sensitivityHor = 9.0f;//旋转速度public float sensitivityVert = 9.0f;public float miniumVert = -45.0f;public float maximumVert = 45.0f;private float _rotationX = 0;void Start(){Rigidbody body = GetComponent<Rigidbody>();if (body != null)body.freezeRotation = true;}// Update is called once per framevoid Update(){if (axes == RotationAxes.MouseX)//水平旋转{transform.Translate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);//GetAxis()获取鼠标的输入}else if (axes == RotationAxes.MouseY)//垂直旋转{_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;//基于鼠标增加垂直角度_rotationX = Mathf.Clamp(_rotationX, miniumVert, maximumVert);//将垂直角度限制在最小值和最大值之间float rotationY = transform.localEulerAngles.y;//保持Y的角度一样(也就是水平没有旋转)transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);//使用存储旋转值创建新的Vector}else//水平且垂直旋转{_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;_rotationX = Mathf.Clamp(_rotationX, miniumVert, maximumVert);float delta = Input.GetAxis("Mouse X") * sensitivityHor;//旋转变化量float rotationY = transform.localEulerAngles.y + delta;//使用delta增加旋转角度transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);}float deltaX = Input.GetAxis("Horizontal") * speed;float deltaZ = Input.GetAxis("Vertical") * speed;transform.Translate(deltaX, 0, deltaZ);}
}

碰撞检测

问题:如果前面有一堵墙飞机往前会直接穿过去
在这里插入图片描述

运行效果:碰到墙壁无法穿过
在这里插入图片描述

在这里插入图片描述


//using System.Collections.Generic;
using UnityEngine;
using System.Collections;public class FPS : MonoBehaviour
{public float speed = 3.0f;private CharacterController _charController;void Start(){_charController = GetComponent<CharacterController>();}// Update is called once per framevoid Update(){float deltaX = Input.GetAxis ("Horizontal") * speed;float deltaZ = Input.GetAxis ("Vertical") * speed;Vector3 movement = new Vector3 (deltaX, 0, deltaZ);movement = Vector3.ClampMagnitude (movement, speed);movement *= Time.deltaTime;movement = transform.TransformDirection  (movement);_charController.Move (movement);}
}

重力添加

添加重力gravity就能改为陆地行走,在面板将重力改为0则飞行模式
在这里插入图片描述

using System.Collections;
using UnityEngine;[RequireComponent(typeof(CharacterController))]
[AddComponentMenu("Control Script/FPS Input")]
public class FPS : MonoBehaviour
{public float speed = 6.0f;public float gravity = -9.8f;private CharacterController _charController;// Start is called before the first frame updatevoid Start(){_charController = GetComponent<CharacterController>();}// Update is called once per framevoid Update(){float deltaX = Input.GetAxis("Horizontal") * speed;float deltaZ = Input.GetAxis("Vertical") * speed;Vector3 movement = new Vector3(deltaX, 0, deltaZ);movement = Vector3.ClampMagnitude(movement, speed);movement.y = gravity;movement *= Time.deltaTime;movement = transform.TransformDirection(movement);_charController.Move(movement);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下nvm的安装和使用

1、nvm简介 nvm是一个nodejs的版本管理工具&#xff0c;它可以在同一台机器上安装和切换不同版本的node的工具。常用在一台机器不同项目需要不同的node环境时&#xff0c;对node版本的自由切换使用。 2、nvm下载安装 2.1 下载 地址&#xff1a; https://github.com/coreybu…

设计模式——建造者模式

目录 建造者模式盖房项目需求基本介绍四个角色实例代码注意事项和细节抽象工厂模式 VS 建造者模式 建造者模式 盖房项目需求 传统方式&#xff1a;打地基&#xff0c;砌墙&#xff0c;封顶 盖房子步骤 public abstract class AbstractHouse {// 地基public abstract void b…

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好&#xff01;我是马哥python说 &#xff0c;一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

【优选算法系列】【专题二滑动窗口】第二节.1004. 最大连续1的个数 III和1658. 将 x 减到 0 的最小操作数

文章目录 前言一、最大连续1的个数 III 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、将 x 减到 0 的最小操作数 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、最大连…

【halcon】halcon 函数文件 以及 脚本引擎如何调用外部函数文件 上篇

前言 halcon有几种文件&#xff1a; 本地程序函数&#xff08;.hdev&#xff09;外部函数文件&#xff08;.hdvp)库函数(.hdp) 说多了容易混淆&#xff0c;今天就说&#xff0c;我觉得最有用的&#xff1a;外部函数文件&#xff08;.hdvp) 步骤 先写一段halcon脚本&#x…

宝塔部署QQ机器人,提示OpenSSL 1.0.2k-fips 26 Jan 2017

1、报错预览 Traceback (most recent call last):File "/www/wwwroot/python/bot-one/main.py", line 5, in <module>import requestsFile "/www/wwwroot/python/bot-one/343ae0eb0d491a10a1a00c0621b03ed0_venv/lib/python3.9/site-packages/requests/_…

粤嵌实训医疗项目(小组开发)--day05

目录 一、医生功能模块 ------------前端实现------------ ------------后端接口------------ 功能一&#xff1a;分页查询医生基础信息&#xff08;介绍MybatisPlus如何使用分页&#xff09; 功能二&#xff1a;根据搜索栏名称查找对应医生&#xff08;讲解自定义查询集&…

【Cocos新手进阶】父级预制体中的数据列表,在子预制体中的控制方法!

本篇文章主要讲解&#xff0c;cocos中在预制体操作过程中&#xff0c;父级预制体生成的数据列表中&#xff0c;绑定了子预制体中的事件&#xff0c;在子预制体的时间中如何控制上级列表的具体操作教程。 日期&#xff1a;2023年11月10日 作者&#xff1a;任聪聪 一、实际效果情…

k8s-Pod控制器

一、Pod控制器 1.Pod控制器及其功用 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层&#xff0c;确保pod资源符合预期的状态&#xff0c;pod的资源出现故障时&#xff0c;会尝试进行重启&#xff0c;当根据重启…

企业安全—三保一评

0x00 前言 本篇主要是讲解三保一评的基础知识&#xff0c;以及对为什么要进行这些内容的原因进行总结。 0x01 整体 1.概述 三保分别是&#xff0c;分保&#xff0c;等保&#xff0c;关保。 分保就是指涉密信息系统的建设使用单位根据分级保护管理办法和有关标准&#xff0c…

植物补光灯,哪种效果好?

室内种植物有诸多好处&#xff1a;空间装饰、吸收有害物质、释放氧气&#xff0c;使室内空气更加清新&#xff1b;植物的蒸腾作用可以增加室内的湿度&#xff0c;改善秋冬季干燥的室内环境&#xff0c;可谓是天然的加湿器。 然而由于缺乏太阳光&#xff0c;在室内养植并不是一…

服装展示服务预约小程序的内容如何

互联网电商深入&#xff0c;很多服装商家开始线上卖货经营、会员管理及私域营销等&#xff0c;这也是当今商家们的一个优选项&#xff0c;当然除了直接卖货以外&#xff0c;展示和预约、客户交互也同样是不少商家需要的。 那么商家通过服装展示预约小程序能够实现什么效果呢&a…

被腾讯云感动哭了,5年内都不用再买服务器了!

我一直在寻找一个稳定、高效、可靠的云服务器提供商&#xff0c;以支持我的个人网站和业务。最近&#xff0c;我发现了腾讯云&#xff0c;它提供了一款非常优惠的2核4G云服务器&#xff0c;而且可以用超低的价格一次性购买5年的服务期限&#xff01;看到这么贴心的腾讯云&#…

小程序订单中心path设置本次审核不通过,审核原因:小程序尚未发布,无法审核。

小程序尚未发布&#xff0c;无法审核。 先按照这篇文章把小程序审核通过&#xff0c;小程序版本审核未通过&#xff0c;需在开发者后台「版本管理—提交审核——小程序订单中心path」设置订单中心页path&#xff0c;请设置后再提交代码审核 小程序审核通过后&#xff0c;发布…

React进阶之路(三)-- Hooks

文章目录 Hooks概念理解什么是HooksHooks解决了什么问题 useState基础使用状态的读取和修改组件的更新过程使用规则回调函数作为参数 useEffect什么是函数副作用基础使用依赖项控制执行时机清理副作用发送网络请求 useRefUseContext Hooks概念理解 什么是Hooks Hooks的本质&am…

力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构探索 ✅LeetCode每日一道 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 思路1&#xff1a;暴力求解思路2&#xff1a;原地合并 LeetCode 88. 合并两个有序数组…

修改Android Studio默认的gradle目录

今天看了一下&#xff0c;gradle在C盘占用了40多G。我C盘是做GHOST的&#xff0c;放在这里不方便。所以就要修改。 新建目录名&#xff08;似乎无必要&#xff09; ANDROID_SDK_HOMEG:\SOFTWARES\android-sdk GRADLE_USER_HOMEG:\SOFTWARES\.gradle 修改目录 File->Setti…

C# 异步日志记录类,方便下次使用,不用重复造轮子

先定义接口类&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 异常 {internal interface ILog{Task WriteErrorLog(string message);Task WriteInfoLog(string message);Task W…

Git 安全警告修复手册:解决 `fatal: detected dubious ownership in repository at ` 问题 ️

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2.HTML中常用浏览器

2.常用浏览器 2.1 什么是浏览器 浏览器是网页显示&#xff0c;运行的平台。常用的浏览器有IE&#xff0c;火狐&#xff0c;谷歌&#xff0c;Safari和Opera等 平时成为五大浏览器 2.2 浏览器内核 浏览器内核&#xff08;渲染引擎&#xff09;&#xff1a;负责读取网页内容&…