UnityScript를 C #으로 변환하려고했지만 오류가 발생합니다. 다음은 내 소스 코드입니다.
GameObject spine;
private float z = 0;
private float ySpeed = 13.0f;
private float zMinLimit = -40.00f;
private float zMaxLimit = 40.00f;
void LateUpdate() {
z -= Input.GetAxis("Mouse Y") * ySpeed;
z = ClampAngle(z, zMinLimit, zMaxLimit);
Quaternion rotation_bone = Quaternion.Euler(0, 0, -z);
spine.transform.localRotation = rotation_bone;
}
static void ClampAngle (float angle, float min, float max) {
if (angle < -360){
angle += 360;
}
if (angle > 360){
angle -= 360;
}
return Mathf.Clamp (angle, min, max);
}
컴파일러 오류를 일으키는 줄은 다음과 같습니다.
z = ClampAngle(z, zMinLimit, zMaxLimit);
오류 :
'void'유형을 'float'로 암시 적으로 변환 할 수 없습니다.
두 번째 줄은 두 개의 추가 컴파일러 오류를 발생시킵니다.
return Mathf.Clamp (angle, min, max);
'rotateBones.ClampAngle (float, float, float) : 메서드가 void를 반환 할 때 반환 키워드 뒤에 표현식이 올 수 없습니다.
'float'유형을 'void'로 암시 적으로 변환 할 수 없습니다.
내 코딩 배경에서 float에서 void로, void로 float 오류를 이해하지만 C #에서이 두 가지를 수정하는 방법을 모르겠습니다.
C #을 사용할 때 void는 값을 반환하지 않는 메서드를 정의하는 데 사용되므로 C # 구문을 준수하기 위해 void의 메서드 유형은 해당 반환 줄을 포함 할 수 없습니다. 그러나 void를 int, bool, float, string 등과 같은 변수 유형 또는 클래스로 변경하면 해당 유형을 반환 할 수 있습니다. 따라서 귀하의 경우에는 float를 반환하는 세 개의 float의 Mathf.Clamp를 반환합니다. 따라서 새 코드는 다음과 같습니다.
public GameObject spine;
private float z = 0;
private float ySpeed = 13.0f;
private float zMinLimit = -40.00f;
private float zMaxLimit = 40.00f;
void LateUpdate() {
z -= Input.GetAxis("Mouse Y") * ySpeed;
z = ClampAngle(z, zMinLimit, zMaxLimit);
Quaternion rotation_bone = Quaternion.Euler(0, 0, -z);
spine.transform.localRotation = rotation_bone;
}
static float ClampAngle (float angle, float min, float max) {
if (angle < -360){
angle += 360;
}
if (angle > 360){
angle -= 360;
}
return Mathf.Clamp (angle, min, max);
}
간단한 수정이지만 C #으로 프로그래밍 할 때 알아야 할 사항입니다.
편집 :
다른 답변의 주석에서 설명한 null 참조 예외는 GameObject 척추가 공개 또는 비공개로 정의되거나 선언되지 않았기 때문입니다. GameObject를 공개하고 인스펙터에서 정의하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다