system
1
I seem to have the opposite problem of the answers here.
I want to copy the parent rotation vectors or world rotation vector to a child rotation vectors to force the child to follow the parent spin. I know that the child should follow the parent but it does not. The problem is the parent spins but the child does not. I have had this problem awhile now. It is different.
TIA.
public var target : Transform;
public var distance = 10.0;
public var xSpeed = 250.0;
public var ySpeed = 120.0;
public var xMinLimit = -359; //-20;
public var xMaxLimit = 359; //80;
public var yMinLimit = -359; //-20;
public var yMaxLimit = 359; //80;
static public var x = 0.0;
static public var y = 0.0;
static public var xread = 0.0;
static public var yread = 0.0;
static public var xhbase = 5;
static public var xlbase = 5;
static public var yhbase = 5;
static public var ylbase = 5;
static public var xhigh = 5; //window boundaries
static public var xlow = 5;
static public var yhigh = 5;
static public var ylow = 5;
//private var z = 0.0; //mod
@script AddComponentMenu("Camera-Control/Mouse halo")
function Start () {
//Debug.Log("Made it to Start");
shotaim_neuter();
//z = angles.z; // mod
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
function Update(){
//if (Input.GetKey(KeyCode.Space)) Debug.Log("space pressed");
if (Input.GetButtonDown ("Fire3") || Input.GetKey(KeyCode.RightControl)) {
shotaim_neuter();
//cuebStatic();
//CalculateCuebRotation();
}
}
function cuebStatic(){
//Debug.Log("Made it to cuebStatic");
x = 0;
xread = 0;
xlow = xread - xlbase;
xhigh = xread + xhbase;
y = 0;
yread = 0;
ylow = yread - ylbase;
yhigh = yread + yhbase;
var rotation = Quaternion.Euler(0, 0, 0);
//var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation;
}
//var angles : Transform; // pickup mouse angles
function shotaim_neuter() {
// This resets the mouse window of difference of the distance to the saved dynamic center point
// By creating a new saved x and y center point of the mouse
// It is not x = 0 or y = 0 !!!!!
//Debug.Log("Made it to shotaim_neuter");
//Debug.Log("GameObject.MouseHalo.Mouse neutered");
//xread += Input.GetAxis("Mouse X") * xSpeed * 0.02;
//yread += Input.GetAxis("Mouse Y") * ySpeed * 0.02;
var angles = transform.eulerAngles; // pickup mouse angles
xread = angles.x;
xlow = xread - xlbase;
xhigh = xread + xhbase;
yread = angles.y;
ylow = yread - ylbase;
yhigh = yread + yhbase;
}
function LateUpdate () {
//Debug.Log("Made it to LateUpdate");
CalculateCuebRotation();
}
function CalculateCuebRotation() {
//Debug.Log("Made it to CalculateCuebRotation");
if (target) {
xread += Input.GetAxis("Mouse X") * xSpeed * 0.02;
yread += Input.GetAxis("Mouse Y") * ySpeed * 0.02;
//Debug.Log("New xlow: " + xlow + " ***** " + "New xhigh: " + xhigh);
//Debug.Log("New ylow: " + ylow + " ***** " + "New yhigh: " + yhigh);
//Debug.Log("Xread: " + xread + " Yread: " + yread);
//Debug.Log("X: " + x + " Y: " + y);
if (xread < xlow)
var xlowdiff = (xlow - xread) / 4;
x = x + xlowdiff;
//++x;
//if (x > xhigh) x= xhigh;
if (xread > xhigh)
var xhighdiff = (xread - xhigh) /4;
x = x - xhighdiff;
//--x;
//if (x < xlow) x= xlow;
if (yread < ylow)
var ylowdiff = (ylow - yread) / 4;
y = y + ylowdiff;
//++y;
//if (y > yhigh) y= yhigh;
if (yread > yhigh)
var yhighdiff = (yread - yhigh) / 4;
y = y - yhighdiff;
//--y;
//if (y < ylow) y= ylow;
//z -= Input.GetAxis("Mouse Z") * ySpeed * 0.02; //mod
x = ClampAngle(x, xMinLimit, xMaxLimit); //remd out by me
y = ClampAngle(y, yMinLimit, yMaxLimit); //remd out by me
//**********************************************************************************************
// Feed x,y with a continual, plus or minus sequential value to rotate
// When this synchronizes with the mouse saved angles
// the rotation stops because the mouse to cube difference are zero.
// As the mouse variance is greater from its dynamic center point(set by middle mouse button)
// the rotation is faster.
// Setting tht angle to 0,0,0 will not stop the rotation.
// The mouse parameters need to be fixated also.
//**********************************************************************************************
//Debug.Log("x: " + x + "y: " + y);
var rotation = Quaternion.Euler(y, x, 0);
//var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation; // Rem this out to freeze
//transform.position = position;
}
}
static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
Fixedupdate()
var opponentdirection = GameObject.Find("Opponents").transform.rotation;
Debug.Log('Opponents x: ' + opponentdirection.x + ' y: ' + opponentdirection.y + ' z: ' + opponentdirection.z);
var worlddirection = GameObject.Find("GameObject").transform.rotation;
Debug.Log('world x: ' + worlddirection.x + ' y: ' + worlddirection.y + ' z: ' + worlddirection.z);
Had used localRotation. This now rotates the child. I need to do the same for rigidbody.
But why?
Waz
2
Rigidbodies do not automatically rotate with their parent. If you need to use a Rigidbody, you would need to use a Joint to keep it in some way affected by it’s parent. But it sounds like you do not even need a Rigidbody.