ict.lixian.three/Assets/Scripts/UAV/Moni.cs

121 lines
5.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class Moni : MonoBehaviour
{
public UAVController Controller;
public float xspeed = 50;
[Range(0, 10)]
public float fin0, fin1, fin2, fin3;
// Start is called before the first frame update
void Start()
{
}
public Rigidbody rigidBody;
public Vector3 frontForce;
public Vector3 rightForce;
public Vector3 backForce;
public Vector3 leftForce;
public float driveInputFront;
public float driveInputRight;
public float driveInputBack;
public float driveInputLeft;
public Transform frontTilt;
public Transform rightTilt;
public Transform backTilt;
public Transform leftTilt;
public ForceMode forceMode = ForceMode.Acceleration;
public bool setall;
public float publicInputForce;
[Range (0, 1)]
public float stability = 0.1f;
public float turnForce;
// Update is called once per frame
void FixedUpdate()
{
if (!setall)
{
//rigidBody.AddForceAtPosition(frontForce * (Mathf.Abs(driveInputFront) * 0.3f), frontTilt.position, forceMode);
//rigidBody.AddForceAtPosition(rightForce * (Mathf.Abs(driveInputRight) * 0.3f), rightTilt.position, forceMode);
//rigidBody.AddForceAtPosition(backForce * (Mathf.Abs(driveInputBack) * 0.3f), backTilt.position, forceMode);
//rigidBody.AddForceAtPosition(leftForce * (Mathf.Abs(driveInputLeft) * 0.3f), leftTilt.position, forceMode);
//rigidBody.AddForceAtPosition(frontTilt.forward * (Mathf.Abs(driveInputFront) * 0.3f), frontTilt.position, forceMode);
//rigidBody.AddForceAtPosition(rightTilt.forward * (Mathf.Abs(driveInputRight) * 0.3f), rightTilt.position, forceMode);
//rigidBody.AddForceAtPosition(backTilt.forward * (Mathf.Abs(driveInputBack) * 0.3f), backTilt.position, forceMode);
//rigidBody.AddForceAtPosition(leftTilt.forward * (Mathf.Abs(driveInputLeft) * 0.3f), leftTilt.position, forceMode);
rigidBody.AddForceAtPosition(frontTilt.up * (Mathf.Abs(driveInputFront) * 0.3f), frontTilt.position, forceMode);
rigidBody.AddForceAtPosition(rightTilt.up * (Mathf.Abs(driveInputRight) * 0.3f), rightTilt.position, forceMode);
rigidBody.AddForceAtPosition(backTilt.up * (Mathf.Abs(driveInputBack) * 0.3f), backTilt.position, forceMode);
rigidBody.AddForceAtPosition(leftTilt.up * (Mathf.Abs(driveInputLeft) * 0.3f), leftTilt.position, forceMode);
Quaternion quaternion = Quaternion.FromToRotation(base.transform.up, Vector3.up);
rigidBody.AddTorque(new Vector3(quaternion.x, 0f, quaternion.z) * 100f, ForceMode.Acceleration);
//Controller.SingleDrone(0, fin0 * xspeed);
//Controller.SingleDrone(1, fin1 * xspeed);
//Controller.SingleDrone(2, fin2 * xspeed);
//Controller.SingleDrone(3, fin3 * xspeed);
Controller.SingleDrone(0, driveInputFront * xspeed);
Controller.SingleDrone(1, driveInputRight * xspeed);
Controller.SingleDrone(2, driveInputBack * xspeed);
Controller.SingleDrone(3, driveInputLeft * xspeed);
}
else
{
//rigidBody.AddForceAtPosition(frontForce * (Mathf.Abs(publicInputForce) * 0.3f), frontTilt.position, forceMode);
//rigidBody.AddForceAtPosition(rightForce * (Mathf.Abs(publicInputForce) * 0.3f), rightTilt.position, forceMode);
//rigidBody.AddForceAtPosition(backForce * (Mathf.Abs(publicInputForce) * 0.3f), backTilt.position, forceMode);
//rigidBody.AddForceAtPosition(leftForce * (Mathf.Abs(publicInputForce) * 0.3f), leftTilt.position, forceMode);
//rigidBody.AddForceAtPosition(frontTilt.forward * (Mathf.Abs(publicInputForce) * 0.3f), frontTilt.position, forceMode);
//rigidBody.AddForceAtPosition(rightTilt.forward * (Mathf.Abs(publicInputForce) * 0.3f), rightTilt.position, forceMode);
//rigidBody.AddForceAtPosition(backTilt.forward * (Mathf.Abs(publicInputForce) * 0.3f), backTilt.position, forceMode);
//rigidBody.AddForceAtPosition(leftTilt.forward * (Mathf.Abs(publicInputForce) * 0.3f), leftTilt.position, forceMode);
rigidBody.AddForceAtPosition(frontTilt.up * (Mathf.Abs(publicInputForce) * 0.3f), frontTilt.position, forceMode);
rigidBody.AddForceAtPosition(rightTilt.up * (Mathf.Abs(publicInputForce) * 0.3f), rightTilt.position, forceMode);
rigidBody.AddForceAtPosition(backTilt.up * (Mathf.Abs(publicInputForce) * 0.3f), backTilt.position, forceMode);
rigidBody.AddForceAtPosition(leftTilt.up * (Mathf.Abs(publicInputForce) * 0.3f), leftTilt.position, forceMode);
rigidBody.angularVelocity *= 1f - Mathf.Clamp(InputMagnitude(), 0.2f, 1f) * stability;
Quaternion quaternion = Quaternion.FromToRotation(base.transform.up, Vector3.up);
rigidBody.AddTorque(new Vector3(quaternion.x, 0f, quaternion.z) * 100f, ForceMode.Acceleration);
rigidBody.angularVelocity = new Vector3(rigidBody.angularVelocity.x, turnForce, rigidBody.angularVelocity.z);
//Controller.SingleDrone(0, fin0 * xspeed);
//Controller.SingleDrone(1, fin1 * xspeed);
//Controller.SingleDrone(2, fin2 * xspeed);
//Controller.SingleDrone(3, fin3 * xspeed);
Controller.SingleDrone(0, publicInputForce * xspeed);
Controller.SingleDrone(1, publicInputForce * xspeed);
Controller.SingleDrone(2, publicInputForce * xspeed);
Controller.SingleDrone(3, publicInputForce * xspeed);
}
}
private float InputMagnitude()
{
//return (Mathf.Abs(driveInput) + Mathf.Abs(strafeInput) + Mathf.Abs(liftInput)) / 3f;
return 0;
}
}