想拿起工具或枪支,但想在统一 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)
会将您的播放器设置为您拾取的物品的子项。这似乎不是故意的。 dontpickup
和 needdropdown
系统也很糟糕且难以实施。相反,使用一个变量来存储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# 中一次只选择一个的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试统一编写枪支脚本,但它说命名空间不能直接包含字段或方法等成员[重复]