精华内容
下载资源
问答
  • unity 在地图随机生成不重叠对象

    千次阅读 2019-09-05 18:53:12
    没啥好说的。无非就是利用哈希存储已生成坐标,随机的时候判断一下是否已在该坐标生成对象

    没啥好说的。无非就是利用哈希存储已生成坐标,随机的时候判断一下是否已在该坐标生成对象

    展开全文
  • Unity5之Network随机生成主角位置

    千次阅读 2018-05-25 11:18:18
    这一讲来讲如何设置人物生成的位置并且同步到所有客户端。首先讲如何在两个固定的位置,交替循环生成。就是现在A点生成下一个在B点生成,然后再在A点生成下一个再在B点生成,如此反复循环。首先在场景中新建两个空...

    这一讲来讲如何设置人物生成的位置并且同步到所有客户端。

    首先讲如何在两个固定的位置,交替循环生成。就是现在A点生成下一个在B点生成,然后再在A点生成下一个再在B点生成,如此反复循环。

    首先在场景中新建两个空物体作为生成的位置,分别命名为networkstartposition1和networkstartposition2,放到两个不同的坐标位置。在两个上面都添加Network Start Position组件。如图:


    接下来在network manager里面把人物生成的方式改为Round Robin,如图:


    如此便实现了人物初始生成时,只会在这两个位置轮流生成。

    ------------------------------------------下面实现如何随机生成功能-------------------------------------------------

    上面所做的都是随机生成的前部分步骤,下面要实现的就是要在刚才的两个生成点之间随机生成主角的位置,不过是在主角复活的时候随机生成。

    思路就是将这两个位置作为一个数组,然后随机选取这两个中的一个作为生成点。

    代码如下(依旧是在health里进行改动):

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using UnityEngine.Networking;
    
    public class health : NetworkBehaviour {
    
    
        public const int maxhealth = 100;
    
        [SyncVar (hook ="changevalue")]//同步变量,改变currenthealth的值。一直会调用changevalue方法。
        public int currenthealth = maxhealth;
    
        public Slider healthslider;
    
        private NetworkStartPosition[] spawnpoints;
    
         void Start()
        {   //获取到场景中所有带有NetworkStartPosition组件的物体
            if (isLocalPlayer)
            spawnpoints = FindObjectsOfType<NetworkStartPosition>();               
        }
        /// <summary>
        ///在Server端运行
        /// </summary>
        /// <param name="damage"></param>
        public void Takedamage(int damage)
        {
            if (isServer == false)
            {
                return;
            }
    
            currenthealth -= damage;
            if (currenthealth<=0)
            {
                currenthealth = maxhealth;
                Rpcspawnnew();//满血复活到原点
            }       
            
        }
        /// <summary>
        /// 该方法里需要定义一个参数,传入的参数就是上面定义的同步的currenthealth的值
        /// </summary>
        /// <param name="healthvalue"></param>
        void changevalue(int healthvalue)
        {
            healthslider.value = healthvalue / (float)maxhealth;
        }
    
        /// <summary>
        /// 所有客户端同步执行该方法
        /// </summary>
        [ClientRpc]
        void Rpcspawnnew()
        {
            if (isLocalPlayer == false)
            {
                return;
            }
    
            Vector3 spawnposition = Vector3.zero;
            if (spawnpoints != null && spawnpoints.Length > 0)
            {
                //随机选取数组中的一个NetworkStartPosition作为位置
                spawnposition = spawnpoints[Random.Range(0, spawnpoints.Length)].transform.position;
            }
    
            transform.position = spawnposition;
        }
    }
    

    解释以上代码,在Start方法里获取到所有带有NetworkStartPosition组件的东西,然后放到数组里(本案例里只有两个)。然后在主角死亡后生成的Rpcspawnnew方法里对其位置进行设置。

    这样就实现了主角随机位置生成的功能。这次就不录制gif图片了!

    至此network的基础知识就讲完了。老夫又要陷入潜水状态了。

    展开全文
  • 001-unity2D游戏随机生成地图

    千次阅读 2019-04-15 04:19:45
    unity2D游戏随机生成地图 教程与素材地址出处 地图控制脚本.cs(所有变量使用用中文便于理解,实际开发中请勿这样使用) using System.Collections; using System.Collections.Generic; using UnityEngine; ...

    unity2D游戏随机生成地图

    教程与素材地址出处

    地图控制脚本.cs(所有变量使用用中文便于理解,实际开发中请勿这样使用)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    
    public class 地图脚本 : MonoBehaviour
    {
        public GameObject[] 围墙;
        public GameObject[] 地板;
        public GameObject[] 障碍物;
        public GameObject[] 食物;
        public GameObject[] 敌人;
        public GameObject 出口;
        public GameObject 主角;
    
    
        private int 行 = 10;
        private int 列 = 10;
        private Transform 地图管理;
        private List<Vector2> 地图位置列表 = new List<Vector2>();
    
        private 游戏流程脚本 游戏流程;
    
        void Awake()
        {
            游戏流程 = this.GetComponent<游戏流程脚本>();
            地图初始化();
        }
    
        // Update is called once per frame
        void Update()
        {
        }
    
        private void 地图初始化()
        {
            地图管理 = new GameObject("地图").transform;
            for (int x = 0; x < 行; x++)
            {
                for (int y = 0; y < 列; y++)
                {
                    if (x == 0 || y == 0 || x == 行 - 1 || y == 列 - 1)
                    {
                         GameObject.Instantiate( 随机游戏物品(围墙), new Vector3(x, y, 0), Quaternion.identity).transform.SetParent(地图管理);
                        //游戏对象.实例化(调用方法随机游戏物品(围墙),实例化到指定坐标,实力化旋转.不旋转).形态.设置父对象(地图管理)
                    }
                    else
                    {
                        GameObject.Instantiate(随机游戏物品(地板), new Vector3(x, y, 0), Quaternion.identity).transform.SetParent(地图管理); 
                    }
                }
            }
    
    
            //地图位置列表创建
            地图位置列表.Clear();
            for (int x = 2; x < 行 - 2; x++)
            {
                for (int y = 2; y < 列 - 2; y++)
                {
                    地图位置列表.Add(new Vector2(x, y));
                }
            }
    
            //创建障碍物
            int 障碍物数量 = Random.Range(2, 9);
            物体实力化(障碍物数量, 障碍物);
    
            //创建出口
            GameObject.Instantiate(出口, new Vector2(8, 8), Quaternion.identity);
            //  GameObject.Instantiate(主角, new Vector2(1, 1), Quaternion.identity);
    
            //创建食物
            int 食物数量 = Random.Range(2, 游戏流程.当前关卡 /4 + 1);
            物体实力化(食物数量, 食物);
    
            //创建敌人
            int 敌人数量 = 游戏流程.当前关卡 / 4;
            物体实力化(敌人数量, 敌人);
    
        }
    
    
        //游戏物体实力化方法
        private void 物体实力化(int 数量,GameObject[] 预制体数组) {
            for (int i = 0; i < 数量; i++)
            {
                GameObject.Instantiate(随机游戏物品(预制体数组), 随机位置(), Quaternion.identity).transform.SetParent(地图管理);
            }
        }
    
        //取随机位置方法
        private Vector2 随机位置()
        {
            int 随机位置列表索引 = Random.Range(0, 地图位置列表.Count);
            Vector2 随机生成位置坐标 = 地图位置列表[随机位置列表索引];
            地图位置列表.RemoveAt(随机位置列表索引);
            return 随机生成位置坐标;
        }
    
        //取随机游戏物品方法
        private GameObject 随机游戏物品(GameObject[] 预制体数组)
        {
            int 游戏物品数组索引 = Random.Range(0, 预制体数组.Length);
            return 预制体数组[游戏物品数组索引];
        }
    }
    
    
    

    游戏流程脚本.cs

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class 游戏流程脚本 : MonoBehaviour
    {
        public int 当前关卡 = 1;
        // Start is called before the first frame update
        void Start()
        {
            
        }
    
        // Update is called once per frame
        void Update()
        {
            
        }
    }
    

     

    展开全文
  • drow 随机地牢生成器的 Unity 端口(C#): : 工作正在进行中 学分 图块表: ://opengameart.org/content/instant-dungeon-v14-art-pack 去做 一旦修复了所有错误,让我们开始面向对象! 单元测试
  • unity3d 随机范围内生成怪物

    千次阅读 2018-11-30 22:09:24
      using UnityEngine; using System.Collections;...unity之 怪物 生出 public GameObject mouse;//声明老鼠 public GameObject gold;//声明金币 public GameObject HP;//声明血瓶 ...
     
    1. using UnityEngine;

    2. using System.Collections;

    3.  
    4.  
    5. public class BarrackManager : MonoBehaviour {

    6. public Transform[] address;

    7. public GameObject[] prefabs;

    8.  
    9.  
    10. // Use this for initialization

    11. void Start () {

    12. InvokeRepeating ("setBarrack",1,3f);

    13. }

    14.  
    15. // Update is called once per frame

    16. void Update () {

    17.  
    18. }

    19.  
    20.  
    21.  
    22.  
    23. void setBarrack(){

    24. Transform tf = address [Random.Range (0, address.Length)];

    25. Bound bound = getBound (tf);

    26. Vector3 pos = new Vector3 (bound.getRandomX(),bound.y,bound.getRandomZ());

    27. Instantiate (prefabs[0],pos,Quaternion.identity);

    28. }

    29.  
    30.  
    31. Bound getBound(Transform tf){

    32. Vector3 center = tf.collider.bounds.center;

    33. Vector3 extents = tf.collider.bounds.extents;

    34. Vector3 dL = new Vector3 (center.x - extents.x,center.y,center.z - extents.z);

    35. Vector3 dR = new Vector3 (center.x + extents.x,center.y,center.z - extents.z);

    36. Vector3 sR = new Vector3 (center.x + extents.x,center.y,center.z + extents.z);

    37. Vector3 sL = new Vector3 (center.x - extents.x,center.y,center.z + extents.z);

    38. Bound bound = new Bound (dL,dR,sR,sL,center.y);

    39.  
    40.  
    41. return bound;

    42. }

    43.  
    44.  
    45. class Bound{

    46. public Vector3 dL;

    47. public Vector3 dR;

    48. public Vector3 sR;

    49. public Vector3 sL;

    50. public float y;

    51.  
    52.  
    53. public Bound(Vector3 dL,Vector3 dR, Vector3 sR, Vector3 sL,float y){

    54. this.dL = dL;

    55. this.dR = dR;

    56. this.sR = sR;

    57. this.sL = sL;

    58. this.y = y;

    59. }

    60.  
    61.  
    62.  
    63.  
    64. public float getRandomX(){

    65. float num = Random.Range (dL.x,dR.x);

    66. return num;

    67. }

    68.  
    69.  
    70. public float getRandomZ(){

    71. float num = Random.Range (dL.z,sL.z);

    72. return num;

    73. }

    74.  
    75.  
    76.  
    77.  
    78.  
    79.  
    80. }

    81.  
    82. }

     

    unity之怪物生出

    public GameObject mouse;//声明老鼠     public GameObject gold;//声明金币     public GameObject HP;//声明血瓶 ...

    展开全文
  • Unity对象多个生成

    千次阅读 2015-01-15 20:56:21
    今天做怪物自动生成的时候遇到了一些小问题,下面和大家探讨一下 ,并分享一下解决的方法 因为是多个怪物,首先我们先定义一个数组 public GameObject []go; //定义一个对象名字为go的数组,为敌人 然后定义...
  • Unity随机Prefab,自动前往某点处理

    千次阅读 2015-08-07 12:01:55
    一,在某区域随机产生某个对象 C# 文件名称为RadomAPoint.cs using UnityEngine; using System.Collections; public class RadomAPoint : MonoBehaviour { public GameObject mObjArea; // 随
  • Unity生成随机数

    2021-04-15 22:07:18
    一、Unity生成随机数 generatedSpawnTime = Random.Range(minSpawnTime, maxSpawnTime); //固定代码 生成一个“minSpawnTime”和“maxSpawnTime”之间的随机数。 二、Unity碰撞 Box Collider(立方体碰撞体),一个...
  • Unity C# 生成随机数问题

    千次阅读 2019-06-27 22:29:04
    思想是用一个数组来保存索引号,先随机生成一个数组位置,然后把随机抽取到的位置的索引号取出来,并把最后一个索引号复制到当前的数组位置,然后使随机数的上限减一。这样就保证了取的值一定不会是重复的,但也有个...
  • 本篇讲根据配置随机生成敌机。
  • 需求:编写一个窗口编辑器,实现在指定矩形区域内随机生成规定数值的游戏对象(在游戏未运行的状态下)。面向工具开发: 面向工具开发是面向对象思想的一种延伸,旨在将功能封装成简单易懂的编辑器,来完成一些繁琐...
  • 名字分别为Pattern_1、Pattern_2、Pattern_3、Pattern_4,然后计算地图的长度,我的是160,每次进行无缝衔接的时候,只需将要生成的地图在当前地图的基础上加上160即可进行无缝衔接了,然后每次都是随机生成一个地图...
  • Unity随机随学

    2015-06-15 15:47:00
    1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的步骤很多,都要将几何物体从一个...2.Unity3d中的碰撞器和触发器的区别? 触发器只是碰撞器身上的一个属性,碰撞器是触发器...
  • 基于有限元网格划分,利用AFT法,在给定边界等数据的情况下生成城市道路网络的数据。 并在Unity中做简单的可视化。
  • [教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了​zhuanlan.zhihu.com本文重点:1、创建复合形状2、每个形状支持多个颜色3、为每个生成区选择工厂4、保持对形状原始工厂的追踪这是有关对象管理的系列教程...
  • unity 路径生成模型Synthetic data alleviates the challenge of acquiring labeled data needed to train machine learning models. In this post, the second in our blog series on synthetic data, we will ...
  • 随机生成Sprite

    2017-10-30 16:48:44
    Unity 3D 随机生成Sprite
  • using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameController : MonoBehaviour {  public GameObject tank;  float timer = 0;...// Use this for
  • Unity 2D随机地图

    千次阅读 2019-09-08 16:12:02
    这篇文章就讲讲教程里面的随机2D地图的实现原理,以及代码展示。 首先效果如下: 右边是使用UntiyEditor所编辑的一个生成面板。左边是实际所生成的地图。 下面是实际源码展示 public void CreateTiles(){ ...
  • 我们将介绍一种在Unity生成随机关卡的简单的方法。 项目下载 本文中的项目使用了Unity 2019.1.0f2,Cinemachine 2.3.4和TextMeshPro 2.0.1进行制作。 下载项目 本文将讲解项目所使用方法的逻辑,你可以查看相应...
  • /// 随机生成出口入口,返回为(int,int)元组,为了之后判断,防止出口和入口重叠 /// /// <returns></returns> public ( int , int ) StartRom ( ) { int i = Random . Range ( 1 , 5 ) ; //...
  • Unity 对象

    千次阅读 多人点赞 2018-05-04 17:14:26
    概念我们先讲讲对象池是什么,有什么用。在游戏的制作过程中,我们可能会碰到这样的情况,就像现在最火的吃鸡游戏一样,我们有一把枪,开枪的时候射出子弹。每个子弹即一个对象,正常情况,我们的处理方式可能会是,...
  • unity2d创建一个随机方向运动对象

    千次阅读 2015-12-13 16:24:13
    //facingLeft为一个bool变量,表示天鹅是否向左飞行,随机生成一个0-2的数字,若大于一则为真 float posX = facingLeft?rightSpawnPosX:leftSpawnPosX; float posY = Random.Range (minSpawnPosY, maxSpawnPosY)...
  • 本文将由捷克独立游戏工作室Lonely Vertex的开发工程师Ondřej Kofroň,分享C#脚本的一系列优化方法,并提供改进Unity游戏性能的最佳实践。在开发游戏时,我们遇到了游戏过程中偶尔出现延迟的问题。在使用Unity性能...
  • Unity对象

    2021-01-30 21:09:43
    对象池 主要是CPU优化方面 概念: 对象池顾名思义 ,它能存储很多对象,应用于处理需要大量重复利用的资源的,我们每次都是创建销毁创建销毁,这是很耗计算机性能的,我们完全可以把不用的资源暂时禁用掉而不是销毁...
  • Unity 无限地形生成及玩家控制 这次实验主要实现了无限地形的生成和很常见的玩家控制,相机跟随,雾区设置,unity简单计时器的制作。 素材都是直接在unity asset store 免费下载的。 下面是主要内容: **1.脚本设置...
  • 是这样的,这两天在写一个智熄打地鼠的代码,在生成地鼠的部分,采用了协程的方式,保证间隔一段时间生成一个地鼠(也有用InvokeRepeating试过,基于我第一版的代码,InvokeRepeating可能更方便一些,但是我最后还是...
  • Unity无限地形生成(基于柏林噪声的简单生成) 要求:构建一个户外开放世界游戏,为该游戏添加天空,地形,植物,并支持场景里自由漫游。这里实现一个无限地形的产生; 实现漫游 漫游的功能由玩家移动和摄像机跟随...
  • Unity控制物体生成--协程方法

    千次阅读 2020-12-17 22:51:09
    Unity:使用协程控制物体的生成 (一)协程的概念与使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,571
精华内容 1,028
关键字:

unity随机生成对象