想拿起工具或枪支,但想在统一 c# 中一次只选择一个

Posted

技术标签:

【中文标题】想拿起工具或枪支,但想在统一 c# 中一次只选择一个【英文标题】:want to pick up tools or guns but want to pick only one at a time in unity c# 【发布时间】:2021-12-10 19:05:57 【问题描述】:

想一次只捡起一把枪,但当我按下按钮时玩家正在捡起两把枪,所以请有人解决这个问题我想在玩家按下特定键时只捡起一把枪,但当玩家按下按钮时放下枪,然后唯一的玩家可以选择另一把枪

public void pickup() //this is a function when player presses to pick up guns 

    if (Input.GetKeyDown(KeyCode.E) && Vector3.Distance(s.transform.position, transform.position) <=  5  && dontpickup)
    
        //var a = gameObject.FindWithTag("player");
        transform.SetParent(s);
        Vector3 temp = transform.position;
        temp.x = player.transform.position.x;
        temp.y = player.transform.position.y;
        transform.position = temp + new Vector3(4, 0, 0);
        Rigidbody2D rb = GetComponent<Rigidbody2D>();
        rb.isKinematic = true;
        Collider2D c = GetComponent<Collider2D>();
        c.isTrigger = true;
        needdropdown = true;
    


public void dropdown() //this is a function when player presses to drop down the guns

    if (Input.GetKeyDown(KeyCode.Q) && needdropdown)
    
        //var a = gameObject.FindWithTag("player");
        transform.SetParent(null);
        
        Rigidbody2D rb = GetComponent<Rigidbody2D>();
        rb.isKinematic = false;
        Collider2D c = GetComponent<Collider2D>();
        c.isTrigger = false;
    


void OnTriggerStay2D(Collider2D trig)

    if(f.gameObject != null && gameObject.tag == "player")
    
        dontpickup = true;
    

【问题讨论】:

你能多加一点你的代码上下文吗..很难理解你到底在做什么...... 兄弟,我已经编辑了我的问题,希望您能理解这个问题并感谢您的帮助 我会添加一些字段来存储当前拾取的武器实例 => 在拾取之前检查您是否已经拥有一个 我错过了关于如何分配 s 变量的代码部分。这是至关重要的。您的代码中也有很多错误。 transform.SetParent(s) 会将您的播放器设置为您拾取的物品的子项。这似乎不是故意的。 dontpickupneeddropdown 系统也很糟糕且难以实施。相反,使用一个变量来存储highlighting object 和另一个用于pickedup object,并检查它们是否是null 【参考方案1】:

您可以添加变量,例如 _gunPickedUpTimeStamp。当玩家拿起枪时,分配值 DateTime.Now。 并添加每次玩家拿起枪时评估的条件。类似的东西

if ((_gunPickedUpTimeStamp - DateTime.Now) > TimeSpan.FromSeconds(5)) 
   do something...
  _gunPickedUpTimeStamp = DateTime.Now

【讨论】:

【参考方案2】:

我猜你应该在这两个方法中修改dontpickup的值:

    public void pickup() //this is a function when player presses to pick up guns 
    
        if (Input.GetKeyDown(KeyCode.E) && Vector3.Distance(s.transform.position, transform.position) <=  5  && dontpickup)
        
            //before code
            needdropdown = true;
            dontpickup = false;
            
        
    
    
    public void dropdown() //this is a function when player presses to drop down the guns
    
        if (Input.GetKeyDown(KeyCode.Q) && needdropdown)
        
            //before code
            needdropdown = false;
            dontpickup = true;
        
    

【讨论】:

以上是关于想拿起工具或枪支,但想在统一 c# 中一次只选择一个的主要内容,如果未能解决你的问题,请参考以下文章

Lodash - 如何从嵌套的json中一次只选择一项?

UITableview如何一次只显示一个单元格

如何在 Flutter 中一次只在屏幕上显示一个表单域?

我正在尝试统一编写枪支脚本,但它说命名空间不能直接包含字段或方法等成员[重复]

UIScrollView 或 UIPageViewController

一次只打开一个子窗体的实例c#