Unity随机Prefab,自动前往某点处理
对与U3D AI,看了下,自己做了小功能,以备后用啊!
一,在某区域随机产生某个对象
C# 文件名称为RadomAPoint.cs
- using UnityEngine;
- using System.Collections;
- public class RadomAPoint : MonoBehaviour {
- public GameObject mObjArea; // 随机区域
- public GameObject prefabObj; // 对象prefab
- public string mytag; // 对象标签
- public string targetTag; // 目标对象标签
- public int ObjectNumber; // 场景中整体prefab 个数。
- private Bounds mbouds;
- private Vector3 tmp;
- // Use this for initialization
- void Start () {
- mbouds = mObjArea.GetComponent<Collider>().bounds;
- InvokeRepeating("NewPrefabInstance", 1, 5);//1秒后调用LaunchProjectile () 函数,之后每5秒调用一次
- }
- // Update is called once per frame
- void Update () {
- }
- void NewPrefabInstance()
- {
- GameObject[] root = GameObject.FindGameObjectsWithTag(mytag);
- if (root.Length <= ObjectNumber)
- {
- Vector3 randomPos = RadomVector3(mbouds.min, mbouds.max);
- //GameObject tmpGameObj = Resources.Load(prefabName) as GameObject;
- //tmpGameObj.transform.position = randomPos;
- Quaternion q = Quaternion.identity;
- GameObject tmpGameObj = GameObject.Instantiate(prefabObj, randomPos, q) as GameObject;
- tmpGameObj.GetComponent<AIBehaviourScript>().TargetObject = GameObject.FindWithTag(targetTag).transform;
- }
- }
- Vector3 RadomVector3(Vector3 min, Vector3 max)
- {
- tmp.x = Random.Range(min.x, max.x);
- tmp.y= Random.Range(min.y, max.y);
- return tmp;
- }
- }
二、自己做了个prefab,添加了自动找到目标的功能。
特别简单的代码:
- using UnityEngine;
- using System.Collections;
- public class AIBehaviourScript : MonoBehaviour
- {
- public Transform TargetObject = null;
- void Start()
- {
- if (TargetObject != null)
- {
- GetComponent<NavMeshAgent>().destination = TargetObject.position;
- }
- }
- void Update()
- {
- }
- }
三,遇到目标后,自动销毁
代码:
- using UnityEngine;
- using System.Collections;
- public class BoxCollisionDestory : MonoBehaviour
- {
- public string tagName;
- // Use this for initialization
- void Start () {
- }
- // Update is called once per frame
- void Update () {
- }
- void OnTriggerEnter(Collider other)
- {
- if (other.gameObject.tag == tagName)
- {
- GameObject.Destroy(other.gameObject);
- }
- }
- }
四,说明
这个过程中,要设置目标点为的属性如下:
而prefab对象也需要给它一个rigidbody,否则他们的碰撞不起作用。
基本上做了一个能随机位置产生一个对象,然后对象自动寻找目的,到达目的地的小功能!
Unity随机Prefab,自动前往某点处理的更多相关文章
- Unity随机随学
1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的步骤很多,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标-> ...
- unity组件路径自动生成
unity 有时候找路径太麻烦 写了一个自动生成脚本的工具 using System.Collections.Generic; using System.IO; using System.Text; ...
- Unity 随机地图房间通道生成
之前的博客中已经说了随机房间生成: https://www.cnblogs.com/koshio0219/p/12604383.html 但实现房间生成只是整个地图生成最初最简单的一步.下面讨论如何随 ...
- Unity游戏开发——自动为动画剪辑添加事件 之 最后几帧的事件不能被调用的问题
最近在做一个根据配置表自动生成动画剪辑clip以及controller的功能.做法是根据配置表配置的动作以及每个动作的关键帧,自动为每个clip添加事件.这样做可以把动画的事件处理在游戏运行之前就计算 ...
- 客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!
相信一些玩主板超频的人都知道,给CPU加电压能够提升CPU的处理速度,很多超频爱好者通过采购超频性能较好,且价格较低的主板和CPU来玩超频,并且通过一些参数的问题能让屌丝设备发挥出高富帅的性能.但是玩 ...
- Unity导入FBX自动进行动画切分
手动处理动画分割 在导入FBX模型过程中,若带有动画呢,需要对它进行切分. 当然这个工作可以在Unity中完成. 比如: 这样手动来分割进行. 自动动画切分 这就需要代码了. 把代码保存成cs文件 ...
- Unity容器实现自动注册
如何创建Unity容器? 首先NuGet搜索Unity, 该示例中使用的版本为4.0.1 新建控制台程序 示例中使用常规操作, 创建一个IPay接口, 分别有两个实现类: ApplePay.Huawe ...
- Unity 随机房间地图生成
无论是在迷宫还是类似于地牢的游戏地图中,利用程序来生成每次都不一样的地图是一件叫人兴奋不已的事. 这时我们需要解决两个非常重要的随机事件: 1.在一定范围内随机出各不相同但又不能互相重叠的房间 2.优 ...
- unity, 保存prefab时material丢失问题
在程序运行时用replacePrefab(gameObj,prefab)或createPrefab(gameObj,prefab)保存prefab,遇到保存出来的prefab中material丢失的问 ...
随机推荐
- mysql status
要查看MySQL运行状态,要优化MySQL运行效率都少不了要运行show status查看各种状态,下面是参考官方文档及网上资料整理出来的中文详细解释: 状态名 作用域 详细解释 Aborted_cl ...
- mysql too many max_connections
debian 环境 mysql MySQL Community Server 5.6.27 首先修改 my.cnf文件 全局查找 find / -name my.cnf* [mysqld] 配置 ...
- strcat
将两个char类型链接. char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s); 结果放在d中 prin ...
- RTX——第12章 系统时钟节拍和时间管理
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 RTX 操作系统的时钟节拍和时间管理函数,其中时间管理函数是 RTX 的基本函数,初学 ...
- JDK1.6.0+Tomcat6.0的安装配置
JDK1.6.0+Tomcat6.0的安装配置是如何进行的呢?我们按照下面几个步骤来: 1.安装JDK 这是进行JSP开发的重要一步,也是安装JSP引擎(Tomcat.Resin.Weblogic等) ...
- 【Unity笔记】UGUI中Canvas屏幕适配
1.通过RectTransform中的Anchors和Pivot来进行控件和窗体的布局适配. Anchors控制当前Panel相对于父窗体的布局位置,可以设置为居中或者左上角,当父窗体拉伸的时候当前P ...
- Android——ImageView的scaleType属性与adjustViewBounds属性 (转)二
1 android:scaleType="center" (1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按照图片的原大小居中显示,不缩 ...
- 双行表头DatagridView的简单实现
DatagridView默认不支持多行表头的实现,一些第三方的控件,比如Spread就可以,因此要实现这个功能,只能自己想办法了.介绍两种思路:1,用重写DataGridView的Paint等方法,可 ...
- 使用JPedal取代PDFBox
http://wanggp.iteye.com/blog/1144177 ———————————————————————————————————————————————— 之前都是使用PDFBOX0. ...
- jQuery Masonry-让你的网页更自然的强大的动态不规则布局插件!
Masonry是 一款非常强大的jQuery动态网格布局插件,可以帮助开发人员快速开发类似剪贴画的界面效果.和CSS中float的效果不太一样的地方在 于,float先水平排列,然后再垂直排列,使用M ...