对与U3D  AI,看了下,自己做了小功能,以备后用啊!

一,在某区域随机产生某个对象

C# 文件名称为RadomAPoint.cs

  1. using UnityEngine;
  2. using System.Collections;
  3. public class RadomAPoint : MonoBehaviour {
  4. public GameObject mObjArea; // 随机区域
  5. public GameObject prefabObj;    // 对象prefab
  6. public string mytag;       // 对象标签
  7. public string targetTag;    // 目标对象标签
  8. public int ObjectNumber;    // 场景中整体prefab 个数。
  9. private Bounds mbouds;
  10. private Vector3 tmp;
  11. // Use this for initialization
  12. void Start () {
  13. mbouds = mObjArea.GetComponent<Collider>().bounds;
  14. InvokeRepeating("NewPrefabInstance", 1, 5);//1秒后调用LaunchProjectile () 函数,之后每5秒调用一次
  15. }
  16. // Update is called once per frame
  17. void Update () {
  18. }
  19. void NewPrefabInstance()
  20. {
  21. GameObject[] root = GameObject.FindGameObjectsWithTag(mytag);
  22. if (root.Length <= ObjectNumber)
  23. {
  24. Vector3 randomPos = RadomVector3(mbouds.min, mbouds.max);
  25. //GameObject tmpGameObj = Resources.Load(prefabName) as GameObject;
  26. //tmpGameObj.transform.position = randomPos;
  27. Quaternion q = Quaternion.identity;
  28. GameObject tmpGameObj = GameObject.Instantiate(prefabObj, randomPos, q) as GameObject;
  29. tmpGameObj.GetComponent<AIBehaviourScript>().TargetObject = GameObject.FindWithTag(targetTag).transform;
  30. }
  31. }
  32. Vector3 RadomVector3(Vector3 min, Vector3 max)
  33. {
  34. tmp.x = Random.Range(min.x, max.x);
  35. tmp.y= Random.Range(min.y, max.y);
  36. return tmp;
  37. }
  38. }

二、自己做了个prefab,添加了自动找到目标的功能。

特别简单的代码:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class AIBehaviourScript : MonoBehaviour
  4. {
  5. public Transform TargetObject = null;
  6. void Start()
  7. {
  8. if (TargetObject != null)
  9. {
  10. GetComponent<NavMeshAgent>().destination = TargetObject.position;
  11. }
  12. }
  13. void Update()
  14. {
  15. }
  16. }

三,遇到目标后,自动销毁

代码:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class BoxCollisionDestory : MonoBehaviour
  4. {
  5. public string tagName;
  6. // Use this for initialization
  7. void Start () {
  8. }
  9. // Update is called once per frame
  10. void Update () {
  11. }
  12. void OnTriggerEnter(Collider other)
  13. {
  14. if (other.gameObject.tag == tagName)
  15. {
  16. GameObject.Destroy(other.gameObject);
  17. }
  18. }
  19. }

四,说明

这个过程中,要设置目标点为的属性如下:

而prefab对象也需要给它一个rigidbody,否则他们的碰撞不起作用。

基本上做了一个能随机位置产生一个对象,然后对象自动寻找目的,到达目的地的小功能!

Unity随机Prefab,自动前往某点处理的更多相关文章

  1. Unity随机随学

    1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的步骤很多,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标-> ...

  2. unity组件路径自动生成

    unity 有时候找路径太麻烦 写了一个自动生成脚本的工具 using System.Collections.Generic; using System.IO; using System.Text; ...

  3. Unity 随机地图房间通道生成

    之前的博客中已经说了随机房间生成: https://www.cnblogs.com/koshio0219/p/12604383.html 但实现房间生成只是整个地图生成最初最简单的一步.下面讨论如何随 ...

  4. Unity游戏开发——自动为动画剪辑添加事件 之 最后几帧的事件不能被调用的问题

    最近在做一个根据配置表自动生成动画剪辑clip以及controller的功能.做法是根据配置表配置的动作以及每个动作的关键帧,自动为每个clip添加事件.这样做可以把动画的事件处理在游戏运行之前就计算 ...

  5. 客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!

    相信一些玩主板超频的人都知道,给CPU加电压能够提升CPU的处理速度,很多超频爱好者通过采购超频性能较好,且价格较低的主板和CPU来玩超频,并且通过一些参数的问题能让屌丝设备发挥出高富帅的性能.但是玩 ...

  6. Unity导入FBX自动进行动画切分

    手动处理动画分割 在导入FBX模型过程中,若带有动画呢,需要对它进行切分. 当然这个工作可以在Unity中完成. 比如: 这样手动来分割进行. 自动动画切分   这就需要代码了. 把代码保存成cs文件 ...

  7. Unity容器实现自动注册

    如何创建Unity容器? 首先NuGet搜索Unity, 该示例中使用的版本为4.0.1 新建控制台程序 示例中使用常规操作, 创建一个IPay接口, 分别有两个实现类: ApplePay.Huawe ...

  8. Unity 随机房间地图生成

    无论是在迷宫还是类似于地牢的游戏地图中,利用程序来生成每次都不一样的地图是一件叫人兴奋不已的事. 这时我们需要解决两个非常重要的随机事件: 1.在一定范围内随机出各不相同但又不能互相重叠的房间 2.优 ...

  9. unity, 保存prefab时material丢失问题

    在程序运行时用replacePrefab(gameObj,prefab)或createPrefab(gameObj,prefab)保存prefab,遇到保存出来的prefab中material丢失的问 ...

随机推荐

  1. 多进程监控自动关机工具升级远程关闭多台server——C# works with PowerShell

    之前给单位做过一个多进程监控的自动关机工具,详见那篇blog. 这次领导又加了需求,说要等进程监控结束后,不止需要关闭主控端server,还需要关闭其他servers.于是就用到了我上篇文章所介绍的知 ...

  2. 【WPF】样式与模板:鼠标移入/悬浮时按钮的背景色不改变

    情况:鼠标移到按钮上,默认情况是按钮背景色会改变的,网上也能搜到很多如何自定义改变的背景色. 需求:现在需求反过来,想要鼠标移到按钮上,保持按钮的背景色不改变. 一种思路:在样式文件中,使用Multi ...

  3. [小技巧]Linux的一些信息获取

    1. Linux 系统登录之后,显示如下 Last login: Thu Jan :: UTC on ttyS0 Linux xxx # PREEMPT Wed Jul :: CST armv7l 那 ...

  4. [转]ListView学习笔记(一)——缓存机制

    要想优化ListView首先要了解它的工作原理,列表的显示需要三个元素:ListView.Adapter.显示的数据: 这里的Adapter就是用到了适配器模式,不管传入的是什么View在ListVi ...

  5. 缓存之 ACache

    1.android缓存的介绍 Android开发本质上就是手机和互联网中的webserver之间进行通信,就必定须要从服务端获取数据.而重复通过网络获取数据是比較耗时的.特别是訪问比較多的时候.会极大 ...

  6. salt '*' state.highstate 报错找不到文件,环境如下No Top file or master_tops data matches found.

    salt '*' state.highstate 报错找不到文件,环境如下No Top file or master_tops data matches found. file_roots:    b ...

  7. dubbo 常见错误 通配符的匹配很全面, 但无法找到元素 'dubbo:application' java.lang.reflect.MalformedParameterizedTypeException 通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明。 Unsupported major.minor version 52.0 (unable to l

    dubbo 常见错误 1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 启动时报错,原因是dubbo 依赖 spr ...

  8. jar/war/ear文件的区别

     jar/war/ear三种文件,在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压缩格式.但是它们的使用目的有所区别: Jar文件(扩展名为. Jar)包含Java类的普通库.资源 ...

  9. html块状元素、内联元素

    html块状元素.内联元素 原文在这 块级元素的分类 块级元素按照其应用于结构还是内容分为三种:结构化块状元素,终端块状元素,多目标块状元素. 一.结构化块状元素 这类元素用于构造文档的结构,一个好的 ...

  10. Hbase rowkey设计一

    转自 http://blog.csdn.net/lifuxiangcaohui/article/details/40621067 hbase所谓的三维有序存储的三维是指:rowkey(行主键),col ...