非静态字段、方法或属性 Chunk.generate() 需要对象引用。我想从第一个脚本开始这样做:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TerrainMain : MonoBehaviour
{
private void Start()
{
Chunk.GEN();
}
}
GEN 功能正在运行。它已经在第二个脚本中执行了进一步的操作:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Chunk : MonoBehaviour
{
public GameObject currentBlockType;
public float smooth = 0;
public float multiplier = 0;
public int cols = 50;
public int rows = 50;
public bool CombineChunk;
private Vector3 myPos;
private Transform thisObject;
static private GameObject thisobjscr;
private void Start()
{
thisobjscr = gameObject;
thisObject = gameObject.transform;
}
public static void GEN()
{
generate();
}
public void generate()
{
myPos = this.transform.position;
for (int x = 0; x < cols; x++)
{
for (int z = 0; z < rows; z++)
{
float y = Mathf.PerlinNoise((myPos.x + x) / smooth, (myPos.z + z) / smooth) * multiplier;
y = Mathf.Floor(y);
GameObject newBlock = GameObject.Instantiate(currentBlockType);
newBlock.transform.position = new Vector3(myPos.x + x, y, myPos.z + z);
newBlock.transform.SetParent(thisObject);
if (CombineChunk == true)
{
StartCoroutine(TimerForCombineWait());
}
}
}
}
IEnumerator TimerForCombineWait()
{
CombineChunk = false;
print("waiting for world stabilization: " + Time.time);
yield return new WaitForSeconds(1);
print("world stabilized in " + Time.time);
Combine();
}
public void Combine()
{
MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
CombineInstance[] combine = new CombineInstance[meshFilters.Length];
int a = 0;
while (a < meshFilters.Length)
{
combine[a].mesh = meshFilters[a].sharedMesh;
combine[a].transform = meshFilters[a].transform.localToWorldMatrix;
meshFilters[a].gameObject.SetActive(false);
a++;
}
transform.GetComponent<MeshFilter>().mesh = new Mesh();
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
transform.gameObject.SetActive(true);
gameObject.transform.position = new Vector3(0, 0, 0);
}
}
Unity 仅在 public static void GEN 中抛出错误
谢谢你。
静态方法
public static void GEN()调用非静态方法public void generate(),这显然是行不通的。不完全清楚您想通过常规方法上的附加静态包装器来实现什么 - 您无法欺骗编译器;)