- Home /
How can i roll sphere/Ball having rigidbody with Rigidbody properties
Hi, I want to rotate and move sphere horizontally just like can knock down. Can anyone help please. I dont want to do this with transform.position or rigidbody.movePosition because after using this my ball passes throw colliders. I want to do this with mouse position like ball should move horizontally with mouse and properly sync. Here is my code with RigidBody.MovePosition. Anyone could help. Thanks in advance.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotation1 : MonoBehaviour {
public float factor = 10; //adjust as desired
Vector3 previousMousePosition;
bool isMouseDown;
Vector3 mouseDelta;
// Update is called once per frame
void Update ()
{
if (isMouseDown)
{
}
if (Input.GetButtonDown ("Fire1"))
{
if (castRay (Input.mousePosition))
{
previousMousePosition = Input.mousePosition;
GetComponent<Rigidbody> ().drag = 0;
GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
}
}
if (isMouseDragged ())
{
if (castRay (Input.mousePosition))
{
mouseDelta = Input.mousePosition - previousMousePosition;
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint)+offset;
print (GetComponent<Rigidbody> ().velocity+"Velocity "+ curPosition);
transform.GetComponent<Rigidbody>().MovePosition(curPosition);
}
} else
{
}
if (!isMouseDown)
{
GetComponent<Rigidbody>().AddForce(mouseDelta.x * factor, 0, 0);
GetComponent<Rigidbody> ().drag = 5;
}
}
bool castRay(Vector3 pos)
{
Ray ray = Camera.main.ScreenPointToRay(pos);
if (Physics.Raycast (ray))
return true;
return false;
}
Vector3 screenPoint,offset;
void OnMouseDown()
{
isMouseDown = true;
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
void OnMouseUp()
{
isMouseDown = false;
}
bool isMouseDragged()
{
if (isMouseDown != vector3Equals(previousMousePosition, Input.mousePosition))
return true;
return false;
}
bool vector3Equals(Vector3 vec1, Vector3 vec2)
{
if (vec1.x == vec2.x && vec1.y == vec2.y && vec1.z == vec2.z)
return true;
return false;
}
}
(edited, use the code block tool please :D )
Your answer
Follow this Question
Related Questions
How to roll a ball along a curved tube. 2 Answers
Non-rotating collider fixed to a rolling ball 1 Answer
Object slope rotation issue 0 Answers
Is there any way to keep increasing an object's angular velocity? 1 Answer
Can i Move/Rotate triggers without Rigidbodies? And other collider questions. 3 Answers