Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >统一发展中的updata函数问题

统一发展中的updata函数问题
EN

Stack Overflow用户
提问于 2021-09-08 08:11:25
回答 1查看 40关注 0票数 0

在开发统一过程中,我们遇到了updata函数的一个问题:

  1. 首先,在当前脚本的数组中进行实时判断并记录所获得的数据(例如,以前进的人为中心,查找周围的动物,并将其记录下来)(我们不确定该判决将执行多少次,因为一次只能找到一只动物,因此我们使用updata进行连续搜索,以这种方式快速找到周围的所有动物)
  2. 之后,将做出遍历数组的判断,并将根据数组的内容显示结果(继续前面的示例,假设我们想在所有周围的动物中显示“狗的数量”和“猫的数量”)
  3. 我们现在遇到的问题是:每次执行updata时,数组内容都会被重置,导致以前获得的数据消失。我们想做的是:在一定程度上保留在上一次更新数据中获得的信息(因为它只包含一种动物,我们需要记录多个动物),并且可以在人们移动时实时更新“人周围的动物数量”(当人们远离动物时,它不再被记录,当一种新的动物接近它时,它被添加到数组中)
  4. I to Unity,我希望我能得到您的帮助,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-09-08 09:24:16

正如您已经提到的对象在播放器附近,而不是使用Update,我会查看OnEnterTriggerOnEnterTrigger2D,如果您的游戏是2D的。我不确定如何区分不同的动物--无论是标记、基类派生类、名称等等--但是在linq上使用HashSet应该可以很容易地在容器中找到特定的条目。如果你在你的问题上加上更多的信息,我可以缩小如何帮助的范围。我假设您有一个名为Animal的基类,并将每个动物派生到自己的类,即Animal->DogAnimal->Cat。这是一个相当通用的解决方案,如果您有问题,请告诉我。

对于这个片段,我假设这个脚本位于一个作为检测半径的球体或圆圈上。所有属于Animal的对象都将tagged作为Animal,以便在动物进入玩家半径时更容易被检测。

Nearby.cs

代码语言:javascript
代码运行次数:0
复制
using UnityEngine;
using System.Collections.Generic;
using System.Linq;

public class TestScript : MonoBehaviour
{
    private HashSet<Animal> nearbyAnimals = new HashSet<Animal>();

    private void OnTriggerEnter(Collider other)
    {
        if(other.tag == "Animal")
        {
            nearbyAnimals.Add(other.GetComponent<Animal>());
            Debug.Log("Adding Animal!");
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.tag == "Animal")
        {
            nearbyAnimals.Remove(other.GetComponent<Animal>());
            Debug.Log("Removing Animal!");
        }
    }

    private void Update()
    {
        // test - can be removed
        if(Input.GetKeyDown(KeyCode.C))
        {
            FindNumberOfCatsNearby();
        }

        if(Input.GetKeyDown(KeyCode.Space))
        {
            FindNumberOfDogsNearby();
        }
    }

    /// <summary>
    /// Find the number of cats near the player
    /// </summary>
    private void FindNumberOfCatsNearby()
    {
        // simplified thanks for derHugo's comment
        Debug.Log($"There are {nearbyAnimals.Count(animal => animal is Cat)} cats nearby", this);
    }

    /// <summary>
    /// Find the number of dogs near the player
    /// </summary>
    private void FindNumberOfDogsNearby()
    {
        Debug.Log($"There are {nearbyAnimals.Count(animal => animal is Dog)} dogs nearby", this);
    }
}

Animal.cs

代码语言:javascript
代码运行次数:0
复制
using UnityEngine;

/// <summary>
/// Base class of all Animals
/// </summary>
public abstract class Animal : MonoBehaviour
{
    protected abstract void AnimalMovement();
    protected virtual void MakeAnimalSound() { }
}

您可以忽略我添加到类中的各种函数。他们在那里只是为了说明哪些东西可以用来区分每种动物的类型。

Cat.cs

代码语言:javascript
代码运行次数:0
复制
using UnityEngine;

public class Cat : Animal
{
    protected override void AnimalMovement()
    {
        // do unique cat movement
    }

    protected override void MakeAnimalSound()
    {
        Debug.Log("Meow");
    }
}

Dog.cs

代码语言:javascript
代码运行次数:0
复制
using UnityEngine;

public class Dog : Animal
{
    protected override void AnimalMovement()
    {
        // do unique dog movement
    }

    protected override void MakeAnimalSound()
    {
        Debug.Log("Bark");
    }
}

一旦进入,它就被添加到HashSet中,一旦它离开,它就被移除。要找到一种类型Animal的特定条目,可以使用我使用linq作为示例的函数之一遍历它。您还可以使用HashSet循环迭代遍历foreach

下面是脚本的一部分工作。在这个例子中,狗是立方体,猫是球体。

下面是我用来检测玩家进入动物半径时所用的部件。

这是其中一只动物的部件。除了它们上的派生类之外,它们都是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69106466

复制
相关文章
浅谈快速发展中企业存在的数据污染问题
引言 公司由粗犷式发展转向精细化运营的过程中,数据决策支持发挥着至关重要的作用。而在传统行业里,由于数据量相对较小;业务系统变更相对规律;系统架构相对简单;数据来源相对单一等原因,从而使数据的计算过程更加简单,计算结果更加准确。而作为业务与技术高速发展的京东,用常规的架构设计无法满足公司对数据高 质量的要求。如何在保障业务高速发展的同时,将数据仓库的数据污染降低到最小?我们重点来说说引起数据污染的原因以及解决方案。 业务系统的数据源多样化 随着技术的发展,不同的业务系统由不同的团队开发与维护,造成了公司多
灯塔大数据
2018/04/10
1.6K0
浅谈快速发展中企业存在的数据污染问题
如何解决金融科技发展中的巨大增长问题
  在我们的指南中,我们将详细介绍技术如何帮助您解决这三个关键挑战,并建立一个金融科技业务:
安徽凌讯网络有限公司
2018/08/06
3320
如何解决金融科技发展中的巨大增长问题
力学中在历史发展中的作用
地心说就是罗马教会所要垄断的"真理"。他们对一切反对地心说的人加以迫害。力学学科特别是其中的动力学,就是在反对地心说发展日心说中逐渐成熟起来的。
用户学习笔记
2022/06/13
6650
数据化人才发展中的TD组织构建
在人力资源的数据分析中,其中一个模块就是TD人才发展的数据化转型,TD人才发展是一个结合人力资源多模块技能的模块,作为一个TD人才发展专家我觉得你应该掌握,至少了解以下人力资源专家知识。
王佩军
2022/09/28
8360
restapi(7)- 谈谈函数式编程的思维模式和习惯
国庆前,参与了一个c# .net 项目,真正重新体验了一把搬砖感觉:在一个多月时间好像不加任何思考,不断敲键盘加代码。我想,这也许是行业内大部分中小型公司程序猿的真实写照:都是坐在电脑前的搬砖工人。不过也不是没有任何收获,在搬砖的过程中我似乎发现了一些现象和造成这些现象背后的原因及OOP思维、习惯模式。和大部分IT公司一样,这间公司在行业里存在了一定时间(不是初创)所以在产品和技术方面有一定的积累,通俗点就是一堆现成的c# .net 代码。然后就是项目截止日期压力。为了按时完成任务的我只能在原有代码基础上不断加功能,根本没有机会去考虑用什么样的代码模式、结构去达到更好的效果。在这个过程中有个有趣的现象引起了我的注意:基本上我只需按照某种流程(多数是业务需求)一个个增加环节就可以实现一项完整功能,当然我是不会计较这些环节对软件其它部分是否产生影响,又或者以后代码维护会不会很麻烦,只要能及时交货就行。想想这种做法恰恰是面向对象编程或所谓行令式编程的特点,即:通过逐行执行命令引导程序的状态改变,最终状态就是运行程序的结果了,或者就是功能的实现了。通过一行行增加代码最终总会到达预期的状态,不是吗。这正是OO编程的思维模式:因为程序状态体现在每行代码上,随时可以检查,验证思路,所以OOP比较容易上手(相对函数式编程而言)。
用户1150956
2019/10/08
6400
知识管理在企业竞争发展中的作用
知识管理及其作用 ,就是在组织中建构一个量化与质化的知识系统 ,让组织中的资讯与知识 ,透过获得、创造、分享、整合、记录、存取、更新、创新等过程 ,不断地回馈到知识系统内 ,形成永不间断的累积。
小炮
2022/03/25
3470
pow函数问题
昨天在网上做一道题,其中我写了一句n = (int) pow ( 5.0 , ( double ) k );我认为应该没有问题。因为math库里的pow函数的两个参数和返回值都是浮点型。返回的数我只要它的整数部分(本来也应该是个整数)。
phith0n
2020/10/15
1.1K0
递归函数问题
对于这个实验可以解决许多关于阶乘的问题,依然存在一些缺点,就是举出的例子不够全面。在以后的解决问题中应该多增加例子,对比他们的不同来总结经验。
算法与编程之美
2022/02/17
6600
人工智能发展中的信息安全与监管
2016年3月,阿尔法围棋(AlphaGo)以4比1的总比分,战胜围棋世界冠军、职业九段棋手李世石;2017年5月,在中国乌镇围棋峰会上,又以3比的总比分战胜排名世界第一的围棋冠军柯洁。人们第一次真切地感到人工智能(ArtificialIntelligence,AI)的强大,引发了广泛的讨论和忧虑。阿尔法围棋之所以那么厉害,除了强大的硬件,凭借的是数量达到3000万的棋谱样本,这是任何人类个体都无法比拟的“大数据”。 2017年10月18日,谷歌人工智能团体Deep Mind在《自然》上发表论文,宣布新
企鹅号小编
2018/02/26
9320
人工智能发展中的信息安全与监管
关于Javascript封装函数的问题
在写javascript中大家可能都会遇到一个问题就是一段代码需要给重复使用,感觉很麻烦,如下图
PHY_68
2020/09/16
8070
关于Javascript封装函数的问题
问答 | 优化函数耗时的问题
社长为你推荐来自 AI 研习社问答社区的精华问答。如有你也有问题,欢迎进社区提问。
AI研习社
2018/12/25
6630
问答 | 优化函数耗时的问题
printf函数的求值顺序问题
printf的参数,函数printf从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有从右边开始处理的。
ccf19881030
2019/04/29
1K0
贵重:如何在助推业务发展中成就自我
我是贵重,来自钉钉前端团队,先后在3个BU(B2B-1688、来往、钉钉)工作过,我在阿里没有主动转过岗,2008年就来到阿里B2B实习,然后转正,入职当时是P4,也是从一个一线产品开发做起,一直觉得离业务都很近,以前是一个人干,现在是带着一个团队在干,也有幸参与了钉钉从0到1的发展过程,以及目前正在努力从1到10的发展阶段。我的深刻感受是坚持,耐得住寂寞很重要,刻意让自己拥抱变化和突破,去更好适应当前的环境,业务处也是处在不断变化当中,蕴含的机会很多,关键是不是看见了。
前端森林
2020/11/03
3620
贵重:如何在助推业务发展中成就自我
开发微信小程序,我为什么放弃 setData,使用 upData
鉴于在下使用微信小程序开发时使用 setData 的蹩脚体验,开发了个库函数 wx-updata,项目上线之后,我把这个自用的库函数整理放到 Github 上开源出来 wx-updata,这个库函数在
前端下午茶
2020/07/23
6120
nextline函数_Java中的nextline()函数与next()问题
Scanner in = new Scanner(http://System.in);
全栈程序员站长
2022/09/06
9410
Json乱码问题和返回json数据统一解决
我们可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置!
PHY_68
2020/10/28
1.2K0
关于go函数参数传递的问题
我发现有不少同学对go的函数参数传递知道是值传递,但是一使用的时候却容易掉坑,下面我们来举个例子看,深入理解这个问题。
公众号-利志分享
2022/04/25
9180
关于go函数参数传递的问题
函数式编程中的数组问题
好久没讲技术了,先回忆一下啥是函数式编程(FP)吧,比如FP要求使用表达式,不允许出现语句,这样更接近自然语言。
Jean
2019/09/10
2K0
函数式编程中的数组问题
python中函数的默认参数问题
第三次调用的时候,很容易误以为会L1输出[10],L3输出[20],但是其实都是[10, 20]。这里其实是因为,函数test的x列表参数在没有被指定的时候,这个x列表的值随后就会被利用。其实带有默认参数的会在函数在被定义的时候就被计算,而不是在调用的时候被计算的。L1与L3是在同一个默认列表上操作的,但是L2指定了参数,因此是在另外列表上进行操作的。
生信编程日常
2020/05/26
2K0
关于Python的主(main)函数问题
初次接触Python的人会很不习惯Python没有main主函数。 这里简单的介绍一下,在Python中使用main函数的方法
py3study
2020/01/10
2.6K0

相似问题

Postgresql updata函数

22

显示updata结果但updata结果不起作用的数据PHP

11

玩!发展中的数据库问题

40

飞利浦色调发展中的几个问题

26

Updata表html EJS + Nodejs + Expressjs

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文