【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例

通过网盘分享的文件:CubeMoveMusic.unitypackage
链接: https://pan.baidu.com/s/1Rq-HH4H9qzVNtpQ84WXyUA?pwd=a7xn 提取码: a7xn 

运行游戏点击空格动态创建拉伸的方块,由Speed控制速度,新方向是随机上下左右生成。 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CubeMoveGameCamera : MonoBehaviour
{private Vector3 constDir;public GeneMap geneMap;void Start(){constDir = transform.position - geneMap.defaultPos;}// Update is called once per framevoid Update(){transform.position = constDir + geneMap.GetPos();}
}

生成移动方块以及单方向拉伸方块脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class GeneMap : MonoBehaviour
{public enum Side{Top, Bottom, Left, Right}public GameObject cubePrefab;private GameObject movingCubeGo;private Transform movingCubeTrans;private Side moveSide;public Vector3 defaultPos;public float speed = 1f;private Matrix4x4 rotationMatrix4x4;private void Start(){rotationMatrix4x4 = Matrix4x4.TRS(Vector3.zero, cubePrefab.transform.localRotation, Vector3.one);}Side MirrorSide(Side side){if (side == Side.Top){return Side.Bottom;}if (side == Side.Bottom){return Side.Top;}if (side == Side.Left){return Side.Right;}if (side == Side.Right){return Side.Left;}Debug.LogError("?");return Side.Top;}public bool IsMoving(){return movingCubeGo != null;}public Vector3 GetPos(){Vector3 pos = defaultPos;if (IsMoving()){//利用上一个移动物体的方向,通过不同方向的移动物体局部大小得到偏移量,而0.5f是下一个新物体一半的偏移Vector3 oldOffset = Vector3.zero;switch (moveSide){case Side.Top:oldOffset = new Vector3(0, 0, movingCubeTrans.localScale.z - 0.5f);break;case Side.Bottom:oldOffset = new Vector3(0, 0, -movingCubeTrans.localScale.z + 0.5f);break;case Side.Left:oldOffset = new Vector3(-movingCubeTrans.localScale.x + 0.5f, 0, 0);break;case Side.Right://例如上一个物体是右方向,则使用局部大小x作为偏移量数值,并且需要-0.5f来让新物体的整体恰好在前一个延伸物体的内部。oldOffset = new Vector3(movingCubeTrans.localScale.x - 0.5f, 0, 0);break;default:break;}pos = movingCubeTrans.position + rotationMatrix4x4.MultiplyPoint(oldOffset);}return pos;}private void Update(){if (movingCubeGo != null){if (moveSide == Side.Top || moveSide == Side.Bottom){movingCubeTrans.localScale = new Vector3(1, 1, movingCubeTrans.localScale.z + speed * Time.deltaTime);}else{movingCubeTrans.localScale = new Vector3(movingCubeTrans.localScale.x + speed * Time.deltaTime, 1, 1);}}if (Input.GetKeyDown(KeyCode.Space)){Vector3 pos = GetPos();movingCubeGo = GameObject.Instantiate(cubePrefab);movingCubeTrans = movingCubeGo.transform;List<int> sideList = new List<int>();for (int i = 0; i < 4; i++){if (i != (int)moveSide && i != (int)MirrorSide(moveSide)){sideList.Add(i);}}int randomIndex = Random.Range(0, sideList.Count);moveSide = (Side)sideList[randomIndex];//1、新物体在进行朝着新方向移动时,需要对子物体Cube调整局部位置(目的:锚点轴心偏移,实现单方向延伸)//2、newOffset用于将新移动物体偏移到新移动方向的上一个物体边缘位置点Vector3 newOffset = Vector3.zero;Vector3 newLocalScale = Vector3.one;Transform childTrans = movingCubeTrans.Find("Cube");childTrans.GetComponent<MeshRenderer>().material.SetColor("_Color", new Color(Random.Range(0, 256) / 255f, Random.Range(0, 256) / 255f, Random.Range(0, 256) / 255f, 1));switch (moveSide){case Side.Top:childTrans.localPosition = new Vector3(0, 0, 0.5f);newOffset = new Vector3(0, 0, 0.5f);newLocalScale = new Vector3(1, 1, 0);break;case Side.Bottom:childTrans.localPosition = new Vector3(0, 0, -0.5f);newOffset = new Vector3(0, 0, -0.5f);newLocalScale = new Vector3(1, 1, 0);break;case Side.Left:childTrans.localPosition = new Vector3(-0.5f, 0, 0);newOffset = new Vector3(-0.5f, 0, 0);newLocalScale = new Vector3(0, 1, 1);break;case Side.Right://例如右方向的Cube子物体需要偏移(0.5f,0,0)保证锚点是在物体左侧childTrans.localPosition = new Vector3(0.5f, 0, 0);//右方向的新物体起点要在上一个物体的右侧边缘点作为起点,故x轴+0.5fnewOffset = new Vector3(0.5f, 0, 0);//右方向的新物体大小X轴要从0开始newLocalScale = new Vector3(0, 1, 1);break;default:break;}movingCubeTrans.position = pos + rotationMatrix4x4.MultiplyPoint(newOffset);movingCubeTrans.localScale = newLocalScale;}}
}

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

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

相关文章

新版IDEA创建数据库表

这是老版本的IDEA创建数据库表&#xff0c;下面可以自己勾选Not null&#xff08;非空),Auto inc&#xff08;自增长),Unique(唯一标识)和Primary key&#xff08;主键) 这是新版的IDEA创建数据库表&#xff0c;Not null和Auto inc可以看得到&#xff0c;但Unique和Primary key…

jmeter中对接口进行循环请求后获取相应数据

1、工作中遇到一个场景就是对某个单一接口进行循环请求&#xff0c;并需要获取每次请求后返回的相应数据&#xff1b; 2、首先就在jmeter对接口相关组件进行配置&#xff0c;需要组件有&#xff1a;循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…

【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数

背景 Webpack 打包后的代码是不会直接暴露 __webpack_require__ 函数&#xff0c;目的是为了避免污染全局变量同时也为了保护 webpack 的打包后的模块都隐藏在闭包函数里&#xff0c;达到数据的安全性。 而有时我们为了测试某个函数&#xff0c;想直接获取这个内置函数&#…

最新常见的图数据库对比,选型,架构,性能对比

图数据库排名 地址&#xff1a;https://db-engines.com/en/ranking/graphdbms 知识图谱查询语言 SPARQL、Cypher、Gremlin、PGQL 和 G-CORE 语法 / 语义 / 特性 SPARQL Cypher Gremlin PGQL G-CORE 图模式匹配查询 语法 CGP CGP CGP(无可选)1 CGP CGP 语义 子…

CentOS7使用源码安装PHP8教程整理

CentOS7使用源码安装PHP8教程整理 下载安装包解压下载的php tar源码包安装所需的一些依赖扩展库安装前的配置修改配置文件1、进入php8的安装包 配置环境变量开机自启启动服务创建软连接常见问题1、checking for icu-uc > 50.1 icu-io icu-i18n... no2、configure: error: Pa…

php-phar打包避坑指南2025

有很多php脚本工具都是打包成phar形式&#xff0c;使用起来就很方便&#xff0c;那么如何自己做一个呢&#xff1f;也找了很多文档&#xff0c;也遇到很多坑&#xff0c;这里就来总结一下 phar安装 现在直接装yum php-cli包就有phar文件&#xff0c;很方便 可通过phar help查看…

博睿数据获中国信通院泰尔终端实验室致谢!

近日&#xff0c;博睿数据收到中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;的感谢信&#xff0c;信中对博睿数据积极参与信通院牵头的“铸基计划——高质量数字化转型推进行动”&#xff0c;并在新技术研究、标准建设、课题共创、专家智库等多项工作中提…

分布式理解

分布式 如何理解分布式 狭义的分布是指&#xff0c;指多台PC在地理位置上分布在不同的地方。 分布式系统 分布式系**统&#xff1a;**多个能独立运行的计算机&#xff08;称为结点&#xff09;组成。各个结点利用计算机网络进行信息传递&#xff0c;从而实现共同的“目标或者任…

centos哪个版本建站好?centos最稳定好用的版本

在信息化飞速发展的今天&#xff0c;服务器操作系统作为构建网络架构的基石&#xff0c;其稳定性和易用性成为企业和个人用户关注的重点。CentOS作为一款广受欢迎的开源服务器操作系统&#xff0c;凭借其强大的性能、出色的稳定性和丰富的软件包资源&#xff0c;成为众多用户建…

计算机网络 (58)无线局域网WLAN

前言 无线局域网WLAN&#xff08;Wireless Local Area Network&#xff09;是一种利用无线通信技术将计算机设备互联起来&#xff0c;构成可以互相通信和实现资源共享的网络体系。 一、定义与特点 定义&#xff1a; WLAN通过无线信道代替有线传输介质连接两个或多个设备形成一个…

vim 中粘贴内容时提示: -- (insert) VISUAL --

目录 问题现象&#xff1a;解决方法&#xff1a;问题原因&#xff1a; 问题现象&#xff1a; 使用 vim 打开一个文本文件&#xff0c;切换到编辑模式后&#xff0c;复制内容进行粘贴时有以下提示&#xff1a; 解决方法&#xff1a; 在命令行模式下禁用鼠标支持 :set mouse …

总结与展望,龙蜥社区第 30 次运营委员会会议线上召开

2025 年 1 月 20 日&#xff0c;龙蜥社区召开了第 30 次运营委员会线上会议&#xff0c;来自 24 家理事单位的 22 位委员及委员代表出席&#xff0c;本次会议由运营委员凝思软件李晨斌主持。会上总结和回顾了龙蜥社区 1 月运营发展情况&#xff0c;同步了龙蜥社区 3 大运营目标…

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…

智能体0门槛开发

分享一个智能体开发流程。 2025 年啊&#xff0c;好多专家还有行业报告都觉得这是智能体&#xff08;AI Agent&#xff09;应用的头一年。相关的应用在商业、工业、消费等好些领域都到了关键的时候&#xff0c;这意味着从实验室走向大规模实际应用的重要转变。而且呢&#xff0…

计算机网络 (53)互联网使用的安全协议

一、SSL/TLS协议 概述&#xff1a; SSL&#xff08;Secure Sockets Layer&#xff09;安全套接层和TLS&#xff08;Transport Layer Security&#xff09;传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发&#xff0c;广泛应用于基于万维网的各种网络…

grafana新增email告警

选择一个面板 比如cpu 新增一个临界点表达式 input选A 就是A的值达到某个临界点 触发告警 我这边IS ABOVE0.15就是cpu大于0.15%就触发报警&#xff0c;这个值怎么填看指标的值显示 这里要设置一下报警条件 这边随便配置下 配置标签和通知&#xff0c;选择你的邮件 看下告警…

npm常见报错整理

npm install时报UNMET PEER DEPENDENCY 现象 npm install时报UNMET PEER DEPENDENCY,且执行npm install好几遍仍报这个。 原因 不是真的缺少某个包,而是安装的依赖版本不对,警告你应该安装某一个版本。 真的缺少某个包。 解决 看了下package.json文件,我的react是有的…

24_游戏启动逻辑梳理总结

首先这个项目从游戏根入口GameRoot.cs的初始化开始 分为 服务层初始化Svc.cs 与 业务系统层初始化Sys.cs 而服务层 分为 资源加载服务层ResSvc.cs 与 音乐播放服务层AudioSvc.cs 而在 资源加载服务层ResSvc.cs中 初始化了 名字的 配置文件 而音乐播放服务层AudioSvc.cs 暂时没…

UE求职Demo开发日志#8 强化前置条件完善,给物品加图标

1 强化前置条件完善 StrengthManager里实现一个Check前置的函数 bool CheckPreAllIsActive(int index)&#xff0c;所有的前置都已经激活就返回true&#xff0c;否则返回false 之后在强化的时候加入条件检查&#xff1a; 1.所有前置技能全部激活 2.本身没有强化过 最后测…

QT:tftp client 和 Server

1.TFTP简介 TFTP&#xff08;Trivial File Transfer Protocol,简单文件传输协议&#xff09;是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69。 FTP是一个传输文件的简单协议&#xff0c;…