Unity输入控制物体旋转和延迟缩放-课程作业
作业题目:编写一个程序,使立方体可以根据玩家输入的信号实现上、下、左、右旋转以及放大、缩小的功能。
具体要求:
(1)当玩家按住键盘上的W/S/A/D以及上下左右箭头都可以让立方体基于世界坐标轴进行上、下、左、右旋转,旋转速度为每秒120°。
(2)当玩家按下M键时,立方体会在2秒内将x/y/z各个轴的缩放值逐渐变化为当前的2倍;当玩家按下N键时,立方体会在2秒内将x/y/z各个轴的缩放值逐渐变化为当前的0.5倍。注:如果已在缩放过程中,则重复按键无效。
gif图中的左右翻转是绕z轴侧翻有点不符合题目要求,代码中已改成绕y轴左右旋转符合题目要求。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ControllerCube : MonoBehaviour
{// Update is called once per framevoid Update(){TransfromRotation();TransfromLocalScale();}private float rotationSpeed = 120.0f;// 每秒120度private float hInput; // 水平输入private float vInput; // 垂直输入// 题目1:旋转void TransfromRotation(){hInput = Input.GetAxis("Horizontal");// 水平方向,对应绕y轴旋转vInput = Input.GetAxis("Vertical");// 垂直方向,对应绕x轴旋转// 注意左右旋转与水平方向的数值相反transform.Rotate(vInput * rotationSpeed * Time.deltaTime, -hInput * rotationSpeed * Time.deltaTime, 0, Space.World);}private float scaleTime = 0.0f;// 统计当前累计多少时间private float scaleTimer = 2.0f;// 2秒内完成缩放private bool isScaling = false; // 是否在缩放Vector3 nScale, yScale; // 新缩放值,原始缩放值// 题目2:缩放void TransfromLocalScale(){if (Input.GetKeyDown(KeyCode.M)){if (!isScaling)// 在缩放中,不能更改{isScaling = true;// 开始缩放yScale = transform.localScale;// 记录原始缩放值nScale = yScale * 2;// 目标缩放值,放大2倍}}else if (Input.GetKeyDown(KeyCode.N)){if (!isScaling)// 在缩放中,不能更改{isScaling = true;// 开始缩放yScale = transform.localScale;// 记录原始缩放值nScale = yScale / 2;// 目标缩放值,缩小2倍}}// 在缩放中才能缩放if (isScaling)// 还没缩放到2秒{if (scaleTime < scaleTimer){scaleTime += Time.deltaTime;// 累计叠加时间// 执行具体缩放代码// 1.使用内置函数,Lerp线性,根据系数0-1,在原始缩放值到目标缩放值线性插值,直至到达目标缩放值//transform.localScale = Vector3.Lerp(yScale, nScale, scaleTime / 2.0f);// 2.自己写的缩放逻辑/*我的思路,模仿Lerp内置函数1.目标缩放值-原始缩放值 得到要 缩放的差值2.新缩放值 = 原始缩放值 + 缩放差值 * 时间系数*/float t = Mathf.Min(scaleTime, 2) / 2.0f; // 控制系数在0~1之间transform.localScale = yScale + (nScale - yScale) * t;}else// 缩放完2秒{scaleTime = 0.0f;// 重置计时isScaling = false;// 缩放完}}}
}
Unity输入控制物体旋转和延迟缩放-课程作业相关推荐
- 3d 数学(叉乘、四元素、四元素旋转、四元素和四元素相乘、鼠标控制物体旋转、发射子弹、环形发射子弹、子弹缓冲池)
目录 1.叉乘 2.四元素 3.四元素旋转 4.四元素和四元素相乘 5.鼠标控制物体旋转 6.发射子弹 7.环形发射子弹 8.子弹缓冲池 1.叉乘 两个向量叉乘,得到一个新的向量,新向量跟原始两个向量 ...
- Unity Camera围绕物体旋转和缩放简单实现
想实现Camera围绕物体旋转和缩放这个功能,我们第一时间想到的就是RotateAround()方法但是使用该方法就面临着一个问题,当你鼠标横着拖动屏幕使相机围绕物体旋转90度后,在竖着拖动时会发现相 ...
- Unity 陀螺仪姿态识别、 控制物体旋转移动
陀螺仪在Unity中最常用的应用就是控制摄像机的旋转 using UnityEngine; using UnityEngine.UI; public class NewTest : MonoBehav ...
- Unity手势控制物体球形旋转
目的:当我想让物体绕Y轴旋转时,无论他当前的朝向都可以绕绝对Y轴转,同理X轴,Z轴.同时不可以有万向锁. 原理:当我们物体绕轴旋转时,其实是矩阵相乘,所以我们需要先算出当前要旋转角度的旋转矩阵,代码如 ...
- Unity鼠标控制物体拖拽旋转
using System.Collections; using System.Collections.Generic; using UnityEngine; public enum ShowType ...
- unity3D 鼠标控制物体旋转带阻尼效果
最近做了一个鼠标拖拽360°旋转查看物体的功能,很基础的一个功能,代码不多写的很快 但是最后出来的效果不是很满意,感觉没有灵魂,很死板僵硬,所以做了一点小修改,在鼠标拖拽结束时计算最后鼠标的加速度,让 ...
- Unity鼠标控制物体360°旋转和点击移动
一:操作 创建一个游戏对象(方块) 把代码挂在摄像机上 二:代码 public Camera ca; public GameObject transformObj; Ray ray; ...
- unity鼠标控制镜头旋转_Unity3D实现鼠标控制视角转动|chu
前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动. 代码如下: C#脚本(在Unity 5.5.1 下能运行): using System.Collections; using ...
- unity 陀螺仪控制节点旋转
/********************************************************************Desc: 陀螺仪对相机的逻辑类. ************* ...
- WebGL入门(三十四)-三维空间中鼠标控制物体旋转,用鼠标控制立方体的旋转
用鼠标控制立方体的旋转 1. demo效果 2. 实现要点 2.1 注册鼠标事件 2.1.1 注册鼠标事件函数的声明 2.1.2 注册鼠标事件函数的调用 2.2 纹理图片加载 2.3 图形绘制 3. ...
最新文章
- linux 查看线程详细信息,Linux 下查看线程信息
- 子图同构问题与Ullmann Algorithm 算法(一)
- Python学习笔记——文件写入和读取
- hoj 1067 Rails //poj1363 Rails 栈的简单应用
- 姚班大神陈立杰最新动向:MIT毕业后将进入诺奖摇篮,成为UC伯克利Miller研究员...
- 【Paper】2019_Bearing-only circumnavigation control of the multi-agent system around a moving target
- Weka学习三(ensemble算法)
- 7-1 内存分区分配--首次适应算法 (100 分)
- 将内存消耗减少20倍
- 由导师决定硕博士能否毕业?教育部:将充分采纳!
- VS2010可反复安装MSDN的方法
- 必须收藏:20个开发技巧教你开发高性能计算代码
- BZOJ 1283 费用流
- 代发核心期刊骗局_警惕“代发论文”骗局,落入骗子圈套
- 【Java】15分钟快速体验阿里Java诊断工具Arthas
- securecrt批量登录linux,SecureCRT批量配置使用会话key
- 各种编程技术资料分享
- C语言入门教程|| C语言 程序结构|| C语言 基本语法
- java读取tiff图像的像素值
- node.js+mysql实现分库分表存查数据:
热门文章
- 技术面试中常见的问题以及提升建议
- 苹果无法安装app_APP做了ios企业签名后无法安装?原因有这些
- 微信小游戏声明文件(d.ts)
- 华硕FX63VM笔记本bios如何设置U盘启动
- 多文件自平衡云传输 (六)番外篇 —————— 开开开山怪
- 【魏先生搞定Python系列】一文搞定SQLAlchemy学习与使用
- Sping AOP 源码解析(一、动态 AOP 自定义标签 aop:aspectj-autoproxy)
- android命令行启动,Android中使用am命令实现在命令行启动程序详解
- VUE项目中调用高德地图
- A Generalization of Transformer Networks to Graphs