- Home /
Question by
ardahan · Apr 30, 2016 at 11:01 PM ·
transformaddforcetransform.positionforce
Use force instead of transform.position
Hello I have a mouse follow script which is use static velocity. But i want to transform it to force physics How can i do it.
My Script is ;
using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Threading;
public class MouseFollow : MonoBehaviour { #region DEGİSKENLER
private Vector3 Position;
RaycastHit hit;
Ray ray;
public float speed = 10f;
private int sayac = 0;
private bool durum = false;
private int durum2 = 0;
int position = 0;
private bool flag = false;
private Vector3 endPoint;
public float duration = 50.0f;
private float yAxis;
private Rigidbody rb;
#endregion DEGİSKENLER
#region OLAYLAR
void Start()
{
yAxis = gameObject.transform.position.y;
Rigidbody rb = GetComponent<Rigidbody>();
}
void Update()
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
flag = true;
endPoint = hit.point;
endPoint.y = yAxis;
}
if (flag && !Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude))
{
if (sayac % 10 == 0)
{
position = Random.Range(10, 20);
durum2 = Random.Range(0, 1);
if (durum2 == 0)
{
position = position * -1;
}
if (durum)
{
float xx = position;
endPoint.x -= xx;
durum = false;
}
else
{
float xx2 = (float)position;
endPoint.z -= xx2;
durum = true;
}
;
//gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1 / (duration * (Vector3.Distance(gameObject.transform.position, endPoint))));
for (int wait = 0; wait < 5000000; wait++)
{
}
}
else
{
//gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1 / (duration * (Vector3.Distance(gameObject.transform.position, endPoint))));
}
sayac++;
}
else if (flag && Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude))
{
flag = false;
Debug.Log("I am here" + sayac.ToString());
}
}
#endregion OLAYLAR
}
Comment
Answer by Glurth · Apr 30, 2016 at 11:51 PM
I would take the difference between the mouse hit point position, and the following-object's position. (uncomplied, example only code)
Vector3 diff = hit.point - gameObject.transform.position;
If we don't want the distance to effect the force, normalize our diff vector (set length = 1)
diff.Normalize();
Now apply force in that direction:
RigidBody rb = gameObject.GetComponent<RigidBody>();
if(rb!=null)
rb.AddForce(diff*forceMagnitude); //if we did not normalize diff earlier, this force's final magnitude would scale with the distance (might be desirable)