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

一、实例1:实例化
1、准备工作:制备预制体,命名。如Circle
2、Create Empty,名字自取。如:CirclePrefab
3、给CirclePrefab添加Test.cs
    public GameObject CirclePrefab; // 预制体变量,用于存储Circle预制体的引用

    // Start is called before the first frame update
    void 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 update
    void Start()
    {
        // 使用标签查找GameObject
        GameObject 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)名字为food
        food.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 update
    void Start()
    {
        //Debug.Log(nodeTitle.text.Length);//测试能否获取文本长度

        if (nodeBtn != null)//如果nodeBtn已被赋值
        {
            Transform nodeTrans = nodeBtn.transform;  //把nodeBtn的Transform,赋值给nodeTrans变量
            RectTransform nodeRect = nodeBtn.GetComponent<RectTransform>();//获取nodeBtn的RectTransform
            if (nodeRect != null)
            {
                int widthNodeBtn = nodeTitle.text.Length*25+30;//按钮的宽度等于文本的长度*25 + 30
                nodeRect.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 update
    void Start()
    {
        CreateNode();//游戏开始运行时生成Node物体
    }

    public void CreateNode()
    {
        //Debug.Log("测试创建物体");
        Instantiate(node,this.transform);//node:原型(模板);this.transform:克隆出来的物体是挂载物体的子物体
    }
}
五、实例5:在实例4的基础上,实例化文本不同的按钮

1、

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

湖南安全技术职业学院校长邓德艾一行到我中心考察交流

6月4日上午&#xff0c;湖南安全技术职业学院校长邓德艾一行莅临方班网安人才教育服务中心交流研讨&#xff0c;一方面是访企拓岗&#xff0c;另一方面是针对产教融合、政校企合作人才培养展开深入研讨。为将本次研讨进行得更深入全面&#xff0c;方班网安人才教育服务中心邀请…

C++17并行算法与HIPSTDPAR

C17 parallel algorithms and HIPSTDPAR — ROCm Blogs (amd.com) C17标准在原有的C标准库中引入了并行算法的概念。像std::transform这样的并行版本算法保持了与常规串行版本相同的签名&#xff0c;只是增加了一个额外的参数来指定使用的执行策略。这种灵活性使得已经使用C标准…

AI数字人的开源解决方案

目前&#xff0c;国内外已经涌现出一些优秀的数字人开源解决方案&#xff0c;这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…

Sklearn中逻辑回归建模

分类模型的评估 回归模型的评估方法&#xff0c;主要有均方误差MSE&#xff0c;R方得分等指标&#xff0c;在分类模型中&#xff0c;我们主要应用的是准确率这个评估指标&#xff0c;除此之外&#xff0c;常用的二分类模型的模型评估指标还有召回率&#xff08;Recall&#xff…

振弦采集仪在隧道工程中的安全监测与控制研究

振弦采集仪在隧道工程中的安全监测与控制研究 隧道工程的安全监测与控制是保障隧道施工和运营安全的重要工作。隧道工程常面临的问题包括地层变形、地下水位变化、地震影响等&#xff0c;这些问题对隧道结构的安全性和使用寿命有着重要影响。因此&#xff0c;隧道工程中的安全…

JVM性能优化案例:减少对象频繁创建

JVM性能优化案例&#xff1a;减少对象频繁创建 案例背景 某金融应用系统在处理大量并发交易时&#xff0c;响应时间过长&#xff0c;并且有时出现内存溢出&#xff08;OutOfMemoryError&#xff09;的问题。经过分析&#xff0c;发现问题主要出在频繁的对象创建和较差的内存管…

OpenCV查找图像中的轮廓并且展示

1、查找轮廓随机用不同的颜色画出 import cv2 import numpy as npdef get_contour_colors(num_contours):# 定义颜色表 (BGR 格式)colors [(255, 0, 0),(255, 50, 0),(255, 100, 0),(255, 150, 0),(255, 200, 0),(255, 255, 0),(200, 255, 0),(150, 255, 0),(100, 255, 0),(5…

Linux常⽤服务器构建-ssh和scp

目录 1.ssh <1>ssh介绍 <2>安装ssh A.安装ssh服务器 B.远程登陆 <3>使⽤ssh连接服务器 2.scp 本地⽂件复制到远程&#xff1a; 本地⽬录复制到远程&#xff1a; 远程⽂件复制到本地&#xff1a; 远程⽬录复制到本地&#xff1a; 1.ssh <1>…

【LLM之RAG】Self-RAG论文阅读笔记

研究背景 尽管大型语言模型&#xff08;LLM&#xff09;展示出了显著的能力&#xff0c;但它们在生成回答时经常包含事实错误&#xff0c;因为它们仅依赖于封装在模型中的参数知识。增强型检索生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;是一种方法&…

leetcode695 岛屿的最大面积

题目 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。 岛屿的面积是岛上值…

ubuntu18.04离线源制作

给客户部署有时需要纯内网环境&#xff0c;那这样就连不了网络。 一些包就下载不下来&#xff0c;而大家都知道用deb离线安装是非常麻烦的&#xff0c;各种依赖让你装不出来。 这里教大家打包源。 我准备2台机器&#xff0c;42和41 42可以联网&#xff0c;41不能联网。我想在…

在AI云原生时代应该如何应对复杂的算力环境

引言 随着在2019年ChatGPT4的爆火,AI这个之前常常被人觉得非常高深的技术渐渐的被越来越多的人们所了解,越来越多的公司、组织和开发者开始投入AI的使用和开发中来.随着AI和LLM的火热,算力资源也变的越来越紧缺,所以如何高效的管理和使用算力资源也变成了必须要面对的问题。 …

2024全站焕新,重塑3D轻量体验!

3D模型当前应用广泛&#xff0c;正以惊人的速度实现数据增长&#xff0c;轻量化需求随之增多。老子云团队一直在探索如何借助自研轻量化技术的能力&#xff0c;打破用户模型处理思维惯性&#xff0c;构建更高效、实用、简单的体验范式&#xff0c;来帮助用户解决3D素材数据处理…

教学辅助系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;教师管理&#xff0c;作业管理&#xff0c;学生管理&#xff0c;管理员管理&#xff0c;作业提交管理&#xff0c;教学视频管理 教室账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0…

L1-098 再进去几个人

L1-098 再进去几个人 分数 5 全屏浏览 切换布局 作者 陈越 单位 浙江大学 数学家、生物学家和物理学家坐在街头咖啡屋里&#xff0c;看着人们从街对面的一间房子走进走出。他们先看到两个人进去。时光流逝。他们又看到三个人出来。 物理学家:“测量不够准确。” 生物学家:“…

不到2毛钱的常用小功率功放AiP8002带关断模式的 2W 音频功率放大器

前言&#xff1a; SOP-8 8002封装和丝印 8002是当前小功率音频功放的不二选择&#xff0c;性能较好&#xff0c;价格低廉&#xff0c;不到2毛钱&#xff0c;国内有大把厂家生产&#xff0c;不同厂家生产的最大功率有2W、3W两种。本文以无锡中微爱芯的AIP8002做介绍。 1、概 述…

11.2 Go 常用包介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

充电桩出口:跨国贸易的机遇与挑战之旅

在新能源浪潮席卷全球的今天&#xff0c;充电桩作为电动汽车的“加油站”&#xff0c;正逐渐从幕后走向台前。 而在这场跨国贸易的舞台上&#xff0c;充电桩的出口之路&#xff0c;既充满了诱人的机遇&#xff0c;也伴随着不小的挑战。 机遇&#xff0c;源自日益增长的全球市场…

stable-diffusion.cpp 文字生成图片

纯 C/C 中 [Stable Diffusion] 的推断 https://github.com/CompVis/stable-diffusion ## 特点 - 基于 [ggml]&#xff08;https://github.com/ggerganov/ggml&#xff09; 的普通 C/C 实现&#xff0c;工作方式与 [llama.cpp]&#xff08;https://github.com/ggerganov/llam…

ArcGIS for js 4.x FeatureLayer 点选查询

示例&#xff1a; 代码如下&#xff1a; <template><view id"mapView"></view></template><script setup> import "arcgis/core/assets/esri/themes/light/main.css"; import Map from "arcgis/core/Map.js"; im…