Move humanoid body parts at runtime?
As I have to move the humanoid body parts at runtime, I thought that it could to be done by using a script. So I wrote a script that would do so. But when I run the project, the script doesn't function as it is intended to. For example if I need to rotate the leg backwards by 90 degrees, the script is unable to do so, it just rotates the leg in any direction. Are there any corrections I need to do? Or is there any other alternative? Please help.. The script is as follows:
public class rayhit : MonoBehaviour {
RaycastHit hit;
Vector3 startPos1, endPos1;
public GameObject isActive;
public float speed;
public Ray ray;
public Rigidbody rigidBody;
Vector3 targetPoint;
bool Action = false;
public float speed1 = 1.0F;
private float startTime1;
private float journeyLength1;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update () {
if (Action)
{
float distCovered = (Time.time - startTime1) * speed1;
float fracJourney = distCovered / journeyLength1;
//isActive.GetComponent<Rigidbody>().position = Vector3.Lerp(startPos1, endPos1, fracJourney);
//isActive.transform. = Vector3.Lerp(startPos1, endPos1, fracJourney);
Vector3 targetDir = endPos1 - isActive.transform.position;
Vector3 forward = isActive.transform.forward;
float angle = Vector3.Angle(targetDir, forward);
print(angle);
isActive.transform.Rotate(Vector3.up * Time.deltaTime*5,angle, Space.World);
Action = false;
}
}
void FixedUpdate()
{
if (Input.GetMouseButtonDown(0))
{
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//Debug.Log("mousse");
print(ray);
if (Physics.Raycast(ray, out hit))
{
if (hit.rigidbody != null)
{
Debug.Log("Hit = " + hit.collider.gameObject.name);
isActive = hit.collider.gameObject;
isActive.transform.rotation = new Quaternion(0,0,0,0);
//isActive.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation;
startPos1 = isActive.transform.position;
}
}
else
{
print("Else");
ChangeRotationTarget();
Action = true;
}
}
}
void ChangeRotationTarget()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Plane playerPlane = new Plane(Vector3.up, transform.position);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist))
{
targetPoint = ray.GetPoint(hitdist);
}
endPos1 = targetPoint;
print("Target:"+targetPoint);
startTime1 = Time.time;
journeyLength1 = Vector3.Distance(startPos1, endPos1);
print("Distance" + journeyLength1);
}
}
Comment