实例化游戏物体的实例(生成游戏物体)

一、实例1:实例化
1、准备工作:制备预制体,命名。如Circle
2、Create Empty,名字自取。如:CirclePrefab
3、给CirclePrefab添加Test.cs
    public GameObject CirclePrefab; // 预制体变量,用于存储Circle预制体的引用// Start is called before the first frame updatevoid Start(){CreateCircle(); // 在游戏开始时调用CreateCircle方法生成物体}void CreateCircle(){// 使用Instantiate方法从预制体创建一个新的游戏对象实例GameObject newCircle = Instantiate(CirclePrefab);// 将新创建的物体设置为某个特定位置// newCircle.transform.position = new Vector3(x, y, z);// 让新创建的物体成为当前游戏对象的子物体// newCircle.transform.SetParent(this.transform);}
4、回到Unity,赋值
二、实例2:随机实例化不同物体

限定时间,限定范围,随机位置,随机生成陷阱内的物体

三、实例3:实例化UI物体,随机显示图片
1、Unity设置

(1) UI-Image,名字自取。如:food,设置图片大小80*80,制成预制体,删除Hierarchy中的food

(2) 选中Canvas,Create Empty。名字自取,如:foodArea

(3) 选中foodArea,按住Alt,选择放大到和Canvas大小相同,添加一个名为“FoodArea”的标签

2、新建foodArea.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class foodArea : MonoBehaviour
{public int Xlimit = 35;//X轴的限制范围public int Ylimit = 19;public int xoffset = 17;//X轴的偏移量public GameObject foodPrefab;//预制体的空白图片public Sprite[] foodSprites;//存储食物图片的数组(图片用来填装预制体的空白)private Transform foodEmpties;//图片位置//存放食物图片的空物体位置// Start is called before the first frame updatevoid Start(){// 使用标签查找GameObjectGameObject foodArea = GameObject.FindWithTag("FoodArea");if (foodArea != null)//如果找到了{foodEmpties = foodArea.transform;//图片位置在foodArea的Transform位置上//将foodEmpties设置为找到的GameObject的Transform}else{Debug.LogError("找不到带有'FoodArea'标签的GameObject");}CreateFood();}public void CreateFood(){// 在限制范围内随机生成食物的X和Y坐标int index = Random.Range(0, foodSprites.Length);//从图片数组中随机选择一个索引(在0和图片数量之间)GameObject food = Instantiate(foodPrefab);//实例化的预制体(foodPrefab)名字为foodfood.GetComponent<Image>().sprite = foodSprites[index];//设置食物预制体上Image组件的sprite为随机选中的图片food.transform.SetParent(foodEmpties, false);//将食物设置为foodEmpties的子物体,并保持其本地位置不变int x = Random.Range(-Xlimit + xoffset, Xlimit);int y = Random.Range(-Ylimit, Ylimit);food.transform.localPosition = new Vector3(x * 25, y * 25, 0);//实例化的物体的本地位置}
}
3、赋值
四、实例4:实例化长度随文字数量变化的可拖拽的按钮
1、准备工作:

(1) UI-Button TextMeshPro,名字自取。如TestBtn

(2) Create Empty,名字自取。如:nodesPrefab

(3) 将TestBtn中的文字和按钮拆分,并设置为nodesPrefab的子物体

(4) Text(TMP)的额外设置

Raycast:用户点击或触摸屏幕时,由摄像机的位置发出的一条射线。

这条射线起点是摄像机的位置,它连到被点击的屏幕的位置并发射到场景中的无限远

Unity会对这条射线与场景中的所有物体进行碰撞检测(物体是否与射线相交)。并根据碰撞结果触发相应的事件(如点击按钮、拖动滑动条等)

Raycast Target:用于设置该文本是否可以成为射线投射(Raycast)的目标

勾选时,可被检测到,可设置触发相应事件

不勾选时:无交互事件(无交互事件的时候不要勾选)

2、设置按钮长度随文本字数改变

(1) 新建Nodes.cs

(2) 在nodesPrefab上添加Nodes.cs

using System.Collections;
using System.Collections.Generic;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;public class Nodes : MonoBehaviour
{public GameObject nodeBtn;//在Unity中声明并指定nodeBtn是哪个物体public TextMeshProUGUI nodeTitle;// Start is called before the first frame updatevoid Start(){//Debug.Log(nodeTitle.text.Length);//测试能否获取文本长度if (nodeBtn != null)//如果nodeBtn已被赋值{Transform nodeTrans = nodeBtn.transform;  //把nodeBtn的Transform,赋值给nodeTrans变量RectTransform nodeRect = nodeBtn.GetComponent<RectTransform>();//获取nodeBtn的RectTransformif (nodeRect != null){int widthNodeBtn = nodeTitle.text.Length*25+30;//按钮的宽度等于文本的长度*25 + 30nodeRect.sizeDelta = new Vector2(widthNodeBtn, 30);//按钮的宽,高Debug.Log(nodeRect.sizeDelta);//测试是否获取了nodeBtn的RectTransform中的size}else{Debug.LogError("无法从nodeBtn获取RectTransform组件");}}else{Debug.LogError("nodeBtn不存在");}}
}
3、设置按钮可拖拽

(1) 打开Nodes.cs

  
public Vector2 dragOffset; // 存储拖拽偏移量public void OnMouseDown(){// 当鼠标按下时,计算偏移量Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);//将鼠标屏幕坐标转换成世界坐标dragOffset = new Vector2(worldPos.x, worldPos.y) - (Vector2)this.transform.position;//偏移量=世界坐标-当前物体所在的位置}
public void OnMouseDrag(){Debug.Log("拖拽事件");// 将鼠标的屏幕坐标转换为世界坐标Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);// 计算新的位置(考虑偏移量)Vector2 newPosition = new Vector2(worldPos.x, worldPos.y) - dragOffset;// 更新物体的位置this.transform.position = new Vector2(newPosition.x, newPosition.y);}

(2) 回到Unity,选中Button,添加Event Trigger组件,并赋值

4、把nodesPrefab制成预制体,并在Hierarchy面板上删除该预制体
5、实例化按钮物体

(1) 新建Test.cs,挂载到Hierarchy界面上的物体上,如:Canvas上

(2) 打开Test.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test : MonoBehaviour
{public Nodes node;//// Start is called before the first frame updatevoid Start(){CreateNode();//游戏开始运行时生成Node物体}public void CreateNode(){//Debug.Log("测试创建物体");Instantiate(node,this.transform);//node:原型(模板);this.transform:克隆出来的物体是挂载物体的子物体}
}
五、实例5:在实例4的基础上,实例化文本不同的按钮

1、

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

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

相关文章

基于matlab的MTCNN(多任务卷积神经网络)人脸检测算法

关键词&#xff1a;Matlab&#xff1b;深度学习&#xff1b;多任务卷积神经网络&#xff1b;人脸检测&#xff1b; 背景 在不受约束的环境中&#xff0c;由于个体姿势的多样性、光照条件的变化以及潜在的遮挡问题&#xff0c;人脸检测和对齐任务面临诸多挑战。近期的研究表明…

Elasticsearch搜索引擎(高级篇)

3.1 查询语法 | 《ElasticSearch入门到实战》电子书 (chaosopen.cn) day09-Elasticsearch02 - 飞书云文档 (feishu.cn) 目录 第一章 DSL查询 1.1 基本语法 1.2 叶子查询 全文检索查询 精确查询 1.3 复合查询 算分函数查询 bool查询 1.4 排序 1.5 分页 基础分页 深度分…

numpy的基本操作

1.常用方法创建array print(np.array([1, 2, 3], dtype"f4"))# 32位浮点型 print(np.array([1.5, 2.2, 3]))# 默认浮点型 print(np.array([1, 2, 3, 4, 5], ndmin3))# 3维数组 print(np.array([range(i, i 5) for i in [1, 2, 3]]))# print(np.zeros(shape[5, …

从开源EPR产品Odoo学习

前言 一个先进、敏捷、经济高效、可快速扩展的Odoo免费开源企业信息化解决方案,让企业获得适应未来发展的长期创新和增长能力。 Odoo 的免费开源模式 让我们可利用无数开发人员和业务专家,在短短数年内,打造数百款应用。凭借强大的技术基础,Odoo 的框架是非常独特且优秀的…

LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码

LIMS&#xff08;实验室&#xff09;信息管理系统源码、有哪些应用领域&#xff1f;采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码 LIMS实验室信息管理系统&#xff0c;是一种基于计算机硬件和数据库技术&#xff0c;集多个功能模块为一体的信息管理系统。该系统主…

前后端分离对于后端来说,是利好还是利弊呢?

前后端分离已经成为前端开发的主流模式&#xff0c;这种模式极大的解放了后端&#xff0c;让后端人员不再即当爹又当妈了&#xff0c;那么这种模式对于后端来说是利好还是利弊呢&#xff0c;如何趋利避害呢&#xff0c;贝格前端工场为大家分享一下。 一、什么前后端分离的开发…

Redis的一点入门了解

Redis NoSql概述 1、单机MySQL的时代 90年代&#xff0c;一个网站的访问量一般不会太大&#xff0c;单个数据库完全足够应付&#xff0c;技术上更多的会去使用静态页面html&#xff0c;对此服务器压根没多少压力&#xff1b; 但即使在这样的情况下&#xff0c;也会存在着一些…

【Linux】程序地址空间之动态库的加载

我们先进行一个整体轮廓的了解&#xff0c;随后在深入理解细节。 在动态库加载之前还要说一下程序的加载&#xff0c;因为理解了程序的加载对动态库会有更深的理解。 轮廓&#xff1a; 首先&#xff0c;不管是程序还是动态库刚开始都是在磁盘中的&#xff0c;想要执行对应的可…

IT入门知识博客文章大纲第一部分《IT基础知识》(1/10)

目录 IT入门知识博客文章大纲第一部分《IT基础知识》&#xff08;1/10&#xff09; 1.引言 2.第一部分&#xff1a;IT基础知识 2.1 计算机硬件 CPU&#xff1a;计算机的心脏 内存&#xff1a;数据的临时居所 存储设备&#xff1a;数据的长期仓库 输入输出设备&#xff1…

PostgreSQL基础(十四):PostgreSQL的数据迁移

文章目录 PostgreSQL的数据迁移 PostgreSQL的数据迁移 PostgreSQL做数据迁移的插件非常多&#xff0c;可以从MySQL迁移到PostgreSQL也可以基于其他数据源迁移到PostgreSQL。 这种迁移的插件很多&#xff0c;这里只说一个&#xff0c;pgloader&#xff08;非常方便&#xff0…

Coursera耶鲁大学金融课程:Financial Markets 笔记Week 01

Financial Markets 本文是学习 https://www.coursera.org/learn/financial-markets-global这门课的学习笔记 这门课的老师是耶鲁大学的Robert Shiller https://en.wikipedia.org/wiki/Robert_J._Shiller Robert James Shiller (born March 29, 1946)[4] is an American econ…

SQL Server Management Studio (SSMS) 20.1 - 微软数据库管理工具

SQL Server Management Studio (SSMS) 20.1 - 微软数据库管理工具 请访问原文链接&#xff1a;https://sysin.org/blog/ssms/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 笔者注&#xff1a;SQL Server 2014 及之前版本内置…

基于负相关误差函数的4集成BP神经网络matlab建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...............................................................…

植物大战僵尸杂交版 v2.0.88 mac版 Plants vs. Zombies 杂交版下载

特别注意&#xff1a;该游戏最低系统要求为macOS Sonoma 14.X&#xff0c;低于此系统版本的请勿下载&#xff01; 游戏介绍 植物大战僵尸杂交版是由B站UP主“潜艇伟伟迷”制作的一款结合了《植物大战僵尸》原有元素与创新玩法的游戏。这款游戏以其独特的“杂交”植物概念在B站…

等待 chrome.storage.local.get() 完成

chrome.storage.local.get() 获取存储处理并计数&#xff0c;内部计数正常&#xff0c;外部使用始终为0&#xff0c;百思不得其解。 如何在继续执行之前等待异步chrome.storage.local.get()完成-腾讯云开发者社区-腾讯云 (tencent.com) 原来我忽略了异步问题&#xff0c;最简…

mybatis中SQL语句运用总结

union 连接查询 连接两个表后会过滤掉重复的值 <resultMap id"BaseResultMap" type"com.sprucetec.pay.etl.model.BillDetail"><id column"id" jdbcType"INTEGER" property"id"/><result column"pay_…

SSM 基于大数据技术的创业推荐系统-计算机毕业设计源码02979

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

cocos creator如何使用cryptojs加解密(及引入方法)

cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 如果想转请评论留个言并注明原博 Sclifftop 13805064305 阿浚 cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 步骤 获取库 1. npm install crypto-js -g&#xff0c;加不加…

除了英伟达,这些AI概念公司在2024年还有巨大的投资价值(五)

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经在英伟达还没拆股前&#xff0c;股价还是100多美元时&#xff08;2019年&#xff09;就曾多次公开发布文章呼吁大家关注并投资英伟达&#xff0c;以下是猛兽财经在2019年到2022年间公开发布的关于英伟达的部分文…

ARM32开发--PWM高级定时器

目录 文章目录 前言 目标 学习内容 需求 高级定时器通道互补输出 开发流程 通道配置 打开互补保护电路 完整代码 练习题 总结 前言 在嵌入式软件开发中&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;技术被广泛应用于控制各种电子设备的亮度、速度等参数。…