unity2d Ugui--Image城市道路汽车行驶

目录

1.车辆生成与回收

2.路径点控制

3.车辆控制


1.车辆生成与回收
using System.Collections.Generic;
using UnityEngine;public class RoadContr : MonoBehaviour
{public WayPoint[] wayPoints; //出生点public Transform pare;[SerializeField]private Car[] fabCar;public Dictionary<int, Queue<Car>> dic_car = new();private int carNum = 0;private void OnEnable(){InvokeRepeating("CarCreate", 1, 1);}private void CarCreate(){if (fabCar.Length<1) { return; }if (carNum < 30){carNum++;Car car = Instantiate(fabCar[Random.Range(0, fabCar.Length)], pare);WayPoint way = wayPoints[Random.Range(0, wayPoints.Length)];car.rect.anchoredPosition = way.rect.anchoredPosition;car.Init(way,this);}else{CancelInvoke("CarCreate");}}public void CarRecycle(int index , Car car) {if (!dic_car.ContainsKey(index)){dic_car[index] = new Queue<Car>();}if (dic_car[index].Count > 10){Destroy(car.gameObject);}else{car.gameObject.SetActive(false);dic_car[index].Enqueue(car);}CreateOneCar();}private void CreateOneCar(){Car car = null;int ran = Random.Range(0, fabCar.Length);if (!dic_car.ContainsKey(ran)){dic_car[ran] = new Queue<Car>();}if (dic_car[ran].Count > 0){car = dic_car[ran].Dequeue();}else { car = Instantiate(fabCar[ran], pare);}WayPoint way = wayPoints[Random.Range(0, wayPoints.Length)];car.rect.anchoredPosition = way.rect.anchoredPosition;car.gameObject.SetActive(true);car.Init(way, this);}
}
2.路径点控制
using System.Collections.Generic;
using UnityEngine;public class WayPoint : MonoBehaviour
{public bool isDestroy;public RectTransform rect;[Header("0上1下2左3右")]public int curDirect = -1;[Header("下一路径点")]public List<WayPoint> nextWayPoints_1;/// <summary>/// 获取下一路径点/// </summary>public WayPoint GetNextWayPoint(){if (nextWayPoints_1.Count == 1){return nextWayPoints_1[0];}else{return nextWayPoints_1[Random.value < 0.5 ? 0 : 1];}}}
3.车辆控制
using UnityEngine;
using UnityEngine.UI;public class Car : MonoBehaviour
{[SerializeField] private Image carImg;//0:scaleX 上:1 右:-1 、1: scaleX 下1 左-1[SerializeField] private Sprite[] carSprites;[SerializeField] private int carIndex;public RectTransform rect;[SerializeField] private WayPoint curWay;       // 当前路径点[SerializeField] private WayPoint nextWay;       // 下一路径点[SerializeField] private float speed;[SerializeField]private int direction = -1;private RoadContr road;public void Init(WayPoint cur_way,RoadContr _road){curWay = cur_way;road = _road;direction = curWay.curDirect;nextWay = curWay.GetNextWayPoint();UpdateCarImage();}private void Update(){if (!gameObject.activeInHierarchy) { return; }if (Vector2.Distance(rect.anchoredPosition, nextWay.rect.anchoredPosition) <= 0.1f){// 到达if (nextWay.isDestroy){//回收road.CarRecycle(carIndex, this);return;}else{//获取新的下一个路径点Init(nextWay, road);}}else { Vector2 newPosition = Vector2.MoveTowards(rect.anchoredPosition, nextWay.rect.anchoredPosition, speed * Time.deltaTime);rect.anchoredPosition = newPosition;}}private Vector3 dir_scale = new(-1, 1, 1);private void UpdateCarImage(){if (direction == 0 || direction == 1){carImg.rectTransform.localScale = dir_scale;}else {carImg.rectTransform.localScale = Vector3.one;}if (direction == 0 || direction == 2){carImg.sprite = carSprites[0];}else{carImg.sprite = carSprites[1];}}
}

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

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

相关文章

node调试

vscode安装插件&#xff1a;JavaScript Debugger (Nightly) 点击后生成一个launch.json文件 打断点&#xff0c;并发送一个请求来执行代码到断点处 按右上的向下箭头&#xff0c;进入源码&#xff0c;进行查看&#xff0c;左边查看变量等值

IDEA创建简单web(servlet)项目(server为tomcat)

引言 鉴于网上很少有关于IDEA开发servlet项目的教程&#xff08;24版idea&#xff0c;并且servlet技术十分复古&#xff0c;很少有人用到&#xff0c;能够理解&#xff0c;该文章旨在为在校的学生提供一个参考&#xff0c;项目技术简单&#xff09;本人在此总结从头开始到项目…

哪个牌子的儿童护眼灯好?五款平价护眼台灯推荐

护眼台灯在近年来成为家长和长时间使用电子设备人群关注的家电/学生产品。对于家中有孩子或经常面对电子屏幕的人士来说&#xff0c;很多人可能已经对这类产品有所了解并进行了购买。然而&#xff0c;部分家长对护眼台灯的认识还不够深入&#xff0c;因此尚未为孩子选择一款合适…

无公网IP与服务器完成企业微信网页应用开发远程调试详细流程

文章目录 前言1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 前言 本文主要介绍如何在企业微信开发者中心通过使用内网穿透工具提供的公网域名成功验证回调本地接口服务! …

postman教程-21-Newman运行集合生成测试报告

上一小节我们Postman Newman的安装方法&#xff0c;本小节我们讲解一下Postman Newman的具体使用方法。 使用Newman运行集合 1、导出Postman集合&#xff1a; 在Postman中&#xff0c;选择你想要运行的集合&#xff0c;然后点击“导出”按钮&#xff0c;选择导出为“Collect…

【CS.PL】Lua 编程之道: 控制结构 - 进度24%

3 初级阶段 —— 控制结构 文章目录 3 初级阶段 —— 控制结构3.1 条件语句&#xff1a;if、else、elseif3.2 循环语句&#xff1a;for、while、repeat-until3.2.1 输出所有的命令行参数3.2.2 while.lua3.2.3 repeat.lua及其作用域 &#x1f525;3.2.4 for.lua (For Statement)…

.gitignore文件使用

.gitignore简介 .gitignore文件是Git 版本控制系统中的一个重要配置文件&#xff0c;它用于指定哪些文件或目录应该被Git忽略&#xff0c;即不被纳入版本控制中。 .gitignore编写规则 在文件中添加要忽略的文件和目录的模式。每一行表示一个模式。 使用通配符来匹配多个文件或目…

eclipse 老的s2sh(Struts2+Spring+Hibernate) 项目 用import导入直接导致死机(CPU100%)的解决

1、下载Apache Tomcat - Apache Tomcat 8 Software Downloads 图中是8.5.100的版本&#xff0c;下面的设置用的是另一个版本的&#xff0c;其实是一样。 2、先将Server配好&#xff0c;然后再进行导入操作。 2、选择jdk 当然&#xff0c;这里也可以直接“Download and instal…

python调用web_service

安装依赖 pip install suds示例代码 from suds.client import Client from suds.plugin import MessagePlugin import logging# 启用日志记录以便调试 logging.basicConfig(levellogging.INFO) logging.getLogger(suds.transport).setLevel(logging.DEBUG)class LogPlugin(Me…

ARM功耗管理框架之SCP

安全之安全(security)博客目录导读 目录 一、功耗管理框架中的SCP 二、SCP的示例 三、SCP固件 四、SCP启动流程 五、SCP的memory map 六、SCP与AP的通信 思考:功耗管理框架?SCP?PPU?LPI?之间的关系?如何配合? 一、功耗管理框架中的SCP 二、SCP的示例

【Python】中的X[:,0]、X[0,:]、X[:,:,0]、X[:,:,1]、X[:,m:n]、X[:,:,m:n]和X[: : -1]

Python中 x[m,n]是通过numpy库引用数组或矩阵中的某一段数据集的一种写法&#xff0c;m代表第m维&#xff0c;n代表m维中取第几段特征数据。 通常用法&#xff1a; x[:,n]或者x[n,:] X[:,0]表示对一个二维数组&#xff0c;取该二维数组第一维中的所有数据&#xff0c;第二维中…

使用本地数据对transformers模型进行微调训练

模型 transformers模型是使用比较多的模型&#xff0c;奈何各个都是体积大&#xff0c;找了一个使用人多不是很大的模型进行训练。 需要魔法 bert-base-uncased模型仓库地址 huggingface下的所有仓库都是git的&#xff0c;也就意味着你可以使用 git clone 可以下载仓库内所有的…

跟着AI学AI_07张量、数组、矩阵

说明这三个概念不是一个范畴的东西&#xff0c;但是很容易混淆&#xff0c;因此放到一起进行说明。 张量&#xff08;Tensor&#xff09; 张量是一个多维数组的通用概念&#xff0c;用于表示具有任意维度的数值数据。在数学和计算机科学中&#xff0c;张量是广泛用于表示数据的…

震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商”

震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商” 近日&#xff0c;罗戈网在青岛举办了2024第三届低碳供应链&物流创新发展高峰论坛&#xff0c;此次峰会聚焦“物流碳中和&#xff0c;可持续供应链”这一核心议题&#xff0c;汇聚国内外双碳践行企业、低碳…

【嵌入式系统实践】实验四综合实验部分代码

由于综合实验未给出一个固定的思路或者目标&#xff0c;这里仅写出部分内容&#xff0c;以便于期末复习背诵手写代码用。 自己写的func.h和func.c涵盖了期末所考手写代码部分&#xff0c;背诵过来就挂不了科。 // functions.h #ifndef FUNCTIONS_H #define FUNCTIONS_Hextern …

D 25章 进程的终止

D 25章 进程的终止 440 25.1 进程的终止&#xff1a;_exit()和exit() 440 1. _exit(int status)&#xff0c; status 定义了终止状态&#xff0c;父进程可调用 wait 获取。仅低8位可用&#xff0c; 调用 _exit() 总是成功的。 2.程序一般不会调用 _exit()&#xff0c; 而是…

C++:调整数组顺序使奇数位于偶数前面【面试】

在C&#xff0c;如果要调整数组顺序使所有奇数位于偶数前面&#xff0c;这里提供一种简单且常用的方法&#xff1a;双指针技术。这种方法不需要额外的空间&#xff0c;并且时间复杂度为O(n)。 以下是使用双指针技术实现的示例代码&#xff1a; #include <iostream> #in…

Release和Debug的区别?Release有什么好处?【面试】

Release和Debug的区别&#xff1a; 优化&#xff1a;Debug版本通常不进行优化&#xff0c;以便更容易调试&#xff1b;Release版本则经过高度优化&#xff0c;以提高性能。调试信息&#xff1a;Debug版本包含详尽的调试信息&#xff0c;如符号信息和源代码映射&#xff1b;Rel…

对iOS开发中的链接器ld64和-ld_classic的深入理解

哈喽&#xff0c;大家好&#xff0c;随着iOS应用程序的开发日益增多&#xff0c;开发者们经常会在Xcode中遇到一些特定的编译器和链接器选项。其中&#xff0c;ld64和-ld_classic是两个常见的概念。这一期将深入介绍这两个概念&#xff0c;以帮助iOS开发者更好地理解它们的作用…

什么是全局对象和全局变量

在JavaScript中&#xff0c;全局对象和全局变量是两个重要的概念&#xff0c;它们与代码的执行环境和作用域紧密相关。 全局对象 全局对象&#xff08;Global Object&#xff09;是在代码的任何地方都能访问到的对象。在浏览器环境中&#xff0c;全局对象通常是window对象&am…