作业题目:编写一个程序,使立方体可以根据玩家输入的信号实现上、下、左、右旋转以及放大、缩小的功能。

具体要求:
(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输入控制物体旋转和延迟缩放-课程作业相关推荐

  1. 3d 数学(叉乘、四元素、四元素旋转、四元素和四元素相乘、鼠标控制物体旋转、发射子弹、环形发射子弹、子弹缓冲池)

    目录 1.叉乘 2.四元素 3.四元素旋转 4.四元素和四元素相乘 5.鼠标控制物体旋转 6.发射子弹 7.环形发射子弹 8.子弹缓冲池 1.叉乘 两个向量叉乘,得到一个新的向量,新向量跟原始两个向量 ...

  2. Unity Camera围绕物体旋转和缩放简单实现

    想实现Camera围绕物体旋转和缩放这个功能,我们第一时间想到的就是RotateAround()方法但是使用该方法就面临着一个问题,当你鼠标横着拖动屏幕使相机围绕物体旋转90度后,在竖着拖动时会发现相 ...

  3. Unity 陀螺仪姿态识别、 控制物体旋转移动

    陀螺仪在Unity中最常用的应用就是控制摄像机的旋转 using UnityEngine; using UnityEngine.UI; public class NewTest : MonoBehav ...

  4. Unity手势控制物体球形旋转

    目的:当我想让物体绕Y轴旋转时,无论他当前的朝向都可以绕绝对Y轴转,同理X轴,Z轴.同时不可以有万向锁. 原理:当我们物体绕轴旋转时,其实是矩阵相乘,所以我们需要先算出当前要旋转角度的旋转矩阵,代码如 ...

  5. Unity鼠标控制物体拖拽旋转

    using System.Collections; using System.Collections.Generic; using UnityEngine; public enum ShowType ...

  6. unity3D 鼠标控制物体旋转带阻尼效果

    最近做了一个鼠标拖拽360°旋转查看物体的功能,很基础的一个功能,代码不多写的很快 但是最后出来的效果不是很满意,感觉没有灵魂,很死板僵硬,所以做了一点小修改,在鼠标拖拽结束时计算最后鼠标的加速度,让 ...

  7. Unity鼠标控制物体360°旋转和点击移动

    一:操作 创建一个游戏对象(方块) 把代码挂在摄像机上 二:代码 public Camera ca;     public GameObject transformObj; Ray ray;     ...

  8. unity鼠标控制镜头旋转_Unity3D实现鼠标控制视角转动|chu

    前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动. 代码如下: C#脚本(在Unity 5.5.1 下能运行): using System.Collections; using ...

  9. unity 陀螺仪控制节点旋转

    /********************************************************************Desc: 陀螺仪对相机的逻辑类. ************* ...

  10. WebGL入门(三十四)-三维空间中鼠标控制物体旋转,用鼠标控制立方体的旋转

    用鼠标控制立方体的旋转 1. demo效果 2. 实现要点 2.1 注册鼠标事件 2.1.1 注册鼠标事件函数的声明 2.1.2 注册鼠标事件函数的调用 2.2 纹理图片加载 2.3 图形绘制 3. ...

最新文章

  1. linux 查看线程详细信息,Linux 下查看线程信息
  2. 子图同构问题与Ullmann Algorithm 算法(一)
  3. Python学习笔记——文件写入和读取
  4. hoj 1067 Rails //poj1363 Rails 栈的简单应用
  5. 姚班大神陈立杰最新动向:MIT毕业后将进入诺奖摇篮,成为UC伯克利Miller研究员...
  6. 【Paper】2019_Bearing-only circumnavigation control of the multi-agent system around a moving target
  7. Weka学习三(ensemble算法)
  8. 7-1 内存分区分配--首次适应算法 (100 分)
  9. 将内存消耗减少20倍
  10. 由导师决定硕博士能否毕业?教育部:将充分采纳!
  11. VS2010可反复安装MSDN的方法
  12. 必须收藏:20个开发技巧教你开发高性能计算代码
  13. BZOJ 1283 费用流
  14. 代发核心期刊骗局_警惕“代发论文”骗局,落入骗子圈套
  15. 【Java】15分钟快速体验阿里Java诊断工具Arthas
  16. securecrt批量登录linux,SecureCRT批量配置使用会话key
  17. 各种编程技术资料分享
  18. C语言入门教程|| C语言 程序结构|| C语言 基本语法
  19. java读取tiff图像的像素值
  20. node.js+mysql实现分库分表存查数据:

热门文章

  1. 技术面试中常见的问题以及提升建议
  2. 苹果无法安装app_APP做了ios企业签名后无法安装?原因有这些
  3. 微信小游戏声明文件(d.ts)
  4. 华硕FX63VM笔记本bios如何设置U盘启动
  5. 多文件自平衡云传输 (六)番外篇 —————— 开开开山怪
  6. 【魏先生搞定Python系列】一文搞定SQLAlchemy学习与使用
  7. Sping AOP 源码解析(一、动态 AOP 自定义标签 aop:aspectj-autoproxy)
  8. android命令行启动,Android中使用am命令实现在命令行启动程序详解
  9. VUE项目中调用高德地图
  10. A Generalization of Transformer Networks to Graphs