【发布时间】:2020-04-28 19:46:02
【问题描述】:
我是一名艺术家,注定要为我的大学编写 C# 代码 :D,我很想在这里得到帮助 :)
问题:我有一个小地形,上面有两个对象(通过拖放游戏放置),我在这里有我的循环,它必须检查 ObjectA 是否与 ObjectB 具有相同的值。那么我该怎么做呢?我尝试使用 foreach 循环,但如果其中一个具有正确的值,而不是两者都具有正确的值,则条件为真。
目前,场地或小地形正在检查一切。
它检查是否有水,如果为真 -> 继续,否则返回,
如果它有两个对象,如果为真 -> 继续,否则返回
如果两个对象具有相同的值,则返回,如果一切都为真,则放置对象......我被困在最后一部分 -> 比较两个对象。
每个对象都有一个值,一个整数,有不同的对象...对象一的值是 0,对象 2 的值是 1 等等...但是玩家应该只将对象 - 值 0 与对象 - 值 0 结合起来。这意味着,如果我将对象 - 值 0 和对象 - 值 1 拖到字段上,则只有当我将对象 - 值 2 和对象值 - 2 拖到字段或对象 - 值 3 和对象值 - 3 上时,才会发生任何事情。 ...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Plantgrowing : MonoBehaviour
{
[SerializeField] LayerMask layer, layer2;
[SerializeField] GameObject plantPref;
GameObject plant;
bool compatible = false;
float waterlvl;
private void Update()
{
Collider2D[] hitInfo = Physics2D.OverlapCircleAll(transform.position, .5f, layer);
Collider2D[] hitInfo2 = Physics2D.OverlapCircleAll(transform.position, .5f, layer2);
foreach(Collider2D hit in hitInfo)
{
if (hit && hit.gameObject.CompareTag("Field"))
{
waterlvl = hit.gameObject.GetComponent<Fields>().waterLevel;
}
}
if (hitInfo2.Length == 2)
{
foreach (Collider2D hit2 in hitInfo2)
{
if (hit2.gameObject.GetComponent<Crop>().cropID == 1) //cropID is only a script with one single variable
{
compatible = true;
}
else return;
if (waterlvl >= 5 && compatible)
{
if (!plant) plant = Instantiate(plantPref, new Vector3(transform.position.x, transform.position.y, -2), Quaternion.identity) as GameObject;
Destroy(hit2.gameObject);
}
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(transform.position, .5f);
}
}
【问题讨论】:
-
所以,只有当条件为真时,你才会生成植物:田地有水,两个物体在田地上,两个物体的值相同(但哪个值)?
-
它是一个整数,用于不同的对象...对象 1 的值为 0,对象 2 的值为 1 等等...但玩家只能将对象 - 值 0 与对象 - 值 0 组合。这意味着,如果我将对象 - 值 0 和对象 - 值 1 拖到字段上,则只有当我将对象 - 值 2 和对象值 - 2 拖到字段上时,才会发生任何事情。