public override Vector3 ActivateCameraObserver(ref bool notUseCameraLookAt, ref Vector3 lookAtPosition) { Vector3 lookVec = status.GetFootCenter().position - status.GetPlayer().position; if (!status.GetIsInMotion()) { lookVec.y = 0; } lookVec += Camera.main.transform.position; notUseCameraLookAt = true; lookAtPosition = lookVec; float nowAngle = Camera.main.transform.rotation.eulerAngles.y; Vector3 position; position.z = distanceFromCenter * Mathf.Cos(nowAngle * Mathf.Deg2Rad); position.x = distanceFromCenter * Mathf.Sin(nowAngle * Mathf.Deg2Rad); if (!status.GetIsInMotion()) { position.y = height; } else { position.y = status.GetPlayer().position.y + height; } return(status.GetFootCenter().position + position); }
private void SetMovePosition() { //ワールド座標のz軸が0度、時計回りが正、 //Inspectorでは負でもプログラムでは正になる(-90→270) float[] wantedAngle = new float[4]; wantedAngle[0] = status.GetFootCenter().rotation.eulerAngles.y - 45f; wantedAngle[1] = status.GetFootCenter().rotation.eulerAngles.y + 45f; wantedAngle[2] = status.GetFootCenter().rotation.eulerAngles.y - 90f; wantedAngle[3] = status.GetFootCenter().rotation.eulerAngles.y + 90f; //AngleからPositionに変換する //外積で正負を求める回る方向を決めればいい //(真逆の2方向のどちらがいいかを2択で決める場合は外積を使えばいい) Vector3[] wantedPos = new Vector3[4]; for (int i = 0; i < wantedAngle.Length; i++) { wantedPos[i] = status.GetFootCenter().position; wantedPos[i].z += status.GetDistanceFromCenter() * Mathf.Cos(wantedAngle[i] * Mathf.Deg2Rad); wantedPos[i].x += status.GetDistanceFromCenter() * Mathf.Sin(wantedAngle[i] * Mathf.Deg2Rad); wantedPos[i] = Vector3.Lerp(status.GetFoots()[i].position, wantedPos[i], Time.fixedDeltaTime); movePosition[i] = wantedPos[i]; Vector3 bodyPos = status.GetFootCenter().position; bodyPos.y += 3; status.GetBody().position = bodyPos; } }
public void SetInitLookAt() { Vector3[] vecfromCenter = new Vector3[4]; Transform[] foot = status.GetFoots(); Vector3[] lookAtPos = new Vector3[4]; for (int i = 0; i < vecfromCenter.Length; i++) { vecfromCenter[i] = foot[i].position - status.GetFootCenter().position; vecfromCenter[i].y = 0; lookAtPos[i] = foot[i].position + vecfromCenter[i]; } lookAtPos.CopyTo(lookAtPosition, 0); }