当前位置: 首页 > news >正文

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];}}
}

相关文章:

  • 多层级iframe下JS调用点击事件
  • Sui的Fastcrypto加密库刷新速度记录
  • 【单片机】三极管的电路符号及图片识别
  • 机动车检测站授权签字人精选试题(附答案)
  • elasticsearch的入门与实践
  • 入侵检测系统(IDS)
  • 【文末附gpt升级秘笈】关于“登月游戏”的详细内容介绍
  • java程序什么时候需要在运行的时候动态修改字节码对象
  • minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析
  • [Qt] Qt Creator中配置 Vs-Code 编码风格
  • 算法第八天:leetcode 35.搜索插入位置
  • TVBOX 最新版下载+视频源教程
  • 深入理解Java中的并发编程
  • 【LeetCode215】数组中的第K个最大元素
  • 爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传
  • @jsonView过滤属性
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Android交互
  • canvas 高仿 Apple Watch 表盘
  • Fabric架构演变之路
  • Java到底能干嘛?
  • log4j2输出到kafka
  • nodejs实现webservice问题总结
  • oschina
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从tcpdump抓包看TCP/IP协议
  • 大数据与云计算学习:数据分析(二)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端自动化解决方案
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 小程序01:wepy框架整合iview webapp UI
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #14vue3生成表单并跳转到外部地址的方式
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (28)oracle数据迁移(容器)-部署包资源
  • (4)(4.6) Triducer
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)shell调试方法
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 5种线程安全集合
  • .NET 发展历程
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...