Why I can't change the moving objects position/s and also not the parents position/s?












0














The main goal is to be able to change the position of each Stairs 0,1,2,3,4...12 and/or each Stairs children.



For example I can't change Stairs 0 position and not any of it's children.



Stairs



This script is attached to the Stairs 0:
This script make the children objects to move.



If I disable and not using this script I can move Stairs 0 and the children. But when the script is on enabled I can't.



using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class MoveObjects : MonoBehaviour
{
public enum LineType
{
Curve, Straight
}

public List<GameObject> objectsToMove = new List<GameObject>();
public AnimationCurve curve;
public float stepsPerSecond = 1f;
public bool changeDirection = false;
//public LineType lineType;

private Vector3 trackStart;
private Vector3 trackEnd;
private Vector3 horizontalTravel;
private float verticalTravel;
private float divisor;
private float phase = 0f;

// Use this for initialization
public void Init()
{ // TO USE TAGS TO FIND THE STAIRS/STAIR BETWEEN SCRIPTS


//lineType = LineType.Curve;

if (curve == null)
{
curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));
}
curve.preWrapMode = WrapMode.Clamp;
curve.postWrapMode = WrapMode.Clamp;

trackStart = objectsToMove[0].transform.position;
int count = objectsToMove.Count;
var span = objectsToMove[count - 1].transform.position - trackStart;

divisor = 1f / count;
horizontalTravel = (count + 1) * span * divisor;
horizontalTravel.y = 0f;

verticalTravel = span.y;
trackEnd = trackStart + (count + 1) * span / count;
}

// Update is called once per frame
void Update()
{
if (objectsToMove != null && objectsToMove.Count > 0 && curve != null)
{
AnimationCurve();
/*curve = new AnimationCurve(curve.keys[0], curve.keys[1]);

if (lineType == LineType.Straight)
{
StraightLineTrack();
}

else if (lineType == LineType.Curve)
{
AnimationCurve();
}*/
}
}

private void AnimationCurve()
{
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
// Get the height of the curve at this step.
float curveHeight = curve.Evaluate(t) * verticalTravel;

if (changeDirection)
{
objectsToMove[i].transform.position = trackStart // First step
- horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
else
{
objectsToMove[i].transform.position = trackStart // First step
+ horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
}
}

private void StraightLineTrack()
{
float divisor = 1f / objectsToMove.Count;

// Compute the current phase of the escalator,
// from 0 (1st step at track start) to 1 (1st step at track end)
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

// Place each step a proportional distance along the track.
for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
objectsToMove[i].transform.position = Vector3.Lerp(trackStart, trackEnd, t);
}
}
}









share|improve this question


















  • 1




    It's because your script is overwriting the position on each frame. you could change everything from transform.position to transform.localPosition then put all of the stairs into a parent GameObject that you could move around and it would keep all of the stairs together..
    – Ruzihm
    Nov 20 at 23:04


















0














The main goal is to be able to change the position of each Stairs 0,1,2,3,4...12 and/or each Stairs children.



For example I can't change Stairs 0 position and not any of it's children.



Stairs



This script is attached to the Stairs 0:
This script make the children objects to move.



If I disable and not using this script I can move Stairs 0 and the children. But when the script is on enabled I can't.



using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class MoveObjects : MonoBehaviour
{
public enum LineType
{
Curve, Straight
}

public List<GameObject> objectsToMove = new List<GameObject>();
public AnimationCurve curve;
public float stepsPerSecond = 1f;
public bool changeDirection = false;
//public LineType lineType;

private Vector3 trackStart;
private Vector3 trackEnd;
private Vector3 horizontalTravel;
private float verticalTravel;
private float divisor;
private float phase = 0f;

// Use this for initialization
public void Init()
{ // TO USE TAGS TO FIND THE STAIRS/STAIR BETWEEN SCRIPTS


//lineType = LineType.Curve;

if (curve == null)
{
curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));
}
curve.preWrapMode = WrapMode.Clamp;
curve.postWrapMode = WrapMode.Clamp;

trackStart = objectsToMove[0].transform.position;
int count = objectsToMove.Count;
var span = objectsToMove[count - 1].transform.position - trackStart;

divisor = 1f / count;
horizontalTravel = (count + 1) * span * divisor;
horizontalTravel.y = 0f;

verticalTravel = span.y;
trackEnd = trackStart + (count + 1) * span / count;
}

// Update is called once per frame
void Update()
{
if (objectsToMove != null && objectsToMove.Count > 0 && curve != null)
{
AnimationCurve();
/*curve = new AnimationCurve(curve.keys[0], curve.keys[1]);

if (lineType == LineType.Straight)
{
StraightLineTrack();
}

else if (lineType == LineType.Curve)
{
AnimationCurve();
}*/
}
}

private void AnimationCurve()
{
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
// Get the height of the curve at this step.
float curveHeight = curve.Evaluate(t) * verticalTravel;

if (changeDirection)
{
objectsToMove[i].transform.position = trackStart // First step
- horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
else
{
objectsToMove[i].transform.position = trackStart // First step
+ horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
}
}

private void StraightLineTrack()
{
float divisor = 1f / objectsToMove.Count;

// Compute the current phase of the escalator,
// from 0 (1st step at track start) to 1 (1st step at track end)
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

// Place each step a proportional distance along the track.
for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
objectsToMove[i].transform.position = Vector3.Lerp(trackStart, trackEnd, t);
}
}
}









share|improve this question


















  • 1




    It's because your script is overwriting the position on each frame. you could change everything from transform.position to transform.localPosition then put all of the stairs into a parent GameObject that you could move around and it would keep all of the stairs together..
    – Ruzihm
    Nov 20 at 23:04
















0












0








0







The main goal is to be able to change the position of each Stairs 0,1,2,3,4...12 and/or each Stairs children.



For example I can't change Stairs 0 position and not any of it's children.



Stairs



This script is attached to the Stairs 0:
This script make the children objects to move.



If I disable and not using this script I can move Stairs 0 and the children. But when the script is on enabled I can't.



using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class MoveObjects : MonoBehaviour
{
public enum LineType
{
Curve, Straight
}

public List<GameObject> objectsToMove = new List<GameObject>();
public AnimationCurve curve;
public float stepsPerSecond = 1f;
public bool changeDirection = false;
//public LineType lineType;

private Vector3 trackStart;
private Vector3 trackEnd;
private Vector3 horizontalTravel;
private float verticalTravel;
private float divisor;
private float phase = 0f;

// Use this for initialization
public void Init()
{ // TO USE TAGS TO FIND THE STAIRS/STAIR BETWEEN SCRIPTS


//lineType = LineType.Curve;

if (curve == null)
{
curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));
}
curve.preWrapMode = WrapMode.Clamp;
curve.postWrapMode = WrapMode.Clamp;

trackStart = objectsToMove[0].transform.position;
int count = objectsToMove.Count;
var span = objectsToMove[count - 1].transform.position - trackStart;

divisor = 1f / count;
horizontalTravel = (count + 1) * span * divisor;
horizontalTravel.y = 0f;

verticalTravel = span.y;
trackEnd = trackStart + (count + 1) * span / count;
}

// Update is called once per frame
void Update()
{
if (objectsToMove != null && objectsToMove.Count > 0 && curve != null)
{
AnimationCurve();
/*curve = new AnimationCurve(curve.keys[0], curve.keys[1]);

if (lineType == LineType.Straight)
{
StraightLineTrack();
}

else if (lineType == LineType.Curve)
{
AnimationCurve();
}*/
}
}

private void AnimationCurve()
{
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
// Get the height of the curve at this step.
float curveHeight = curve.Evaluate(t) * verticalTravel;

if (changeDirection)
{
objectsToMove[i].transform.position = trackStart // First step
- horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
else
{
objectsToMove[i].transform.position = trackStart // First step
+ horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
}
}

private void StraightLineTrack()
{
float divisor = 1f / objectsToMove.Count;

// Compute the current phase of the escalator,
// from 0 (1st step at track start) to 1 (1st step at track end)
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

// Place each step a proportional distance along the track.
for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
objectsToMove[i].transform.position = Vector3.Lerp(trackStart, trackEnd, t);
}
}
}









share|improve this question













The main goal is to be able to change the position of each Stairs 0,1,2,3,4...12 and/or each Stairs children.



For example I can't change Stairs 0 position and not any of it's children.



Stairs



This script is attached to the Stairs 0:
This script make the children objects to move.



If I disable and not using this script I can move Stairs 0 and the children. But when the script is on enabled I can't.



using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class MoveObjects : MonoBehaviour
{
public enum LineType
{
Curve, Straight
}

public List<GameObject> objectsToMove = new List<GameObject>();
public AnimationCurve curve;
public float stepsPerSecond = 1f;
public bool changeDirection = false;
//public LineType lineType;

private Vector3 trackStart;
private Vector3 trackEnd;
private Vector3 horizontalTravel;
private float verticalTravel;
private float divisor;
private float phase = 0f;

// Use this for initialization
public void Init()
{ // TO USE TAGS TO FIND THE STAIRS/STAIR BETWEEN SCRIPTS


//lineType = LineType.Curve;

if (curve == null)
{
curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));
}
curve.preWrapMode = WrapMode.Clamp;
curve.postWrapMode = WrapMode.Clamp;

trackStart = objectsToMove[0].transform.position;
int count = objectsToMove.Count;
var span = objectsToMove[count - 1].transform.position - trackStart;

divisor = 1f / count;
horizontalTravel = (count + 1) * span * divisor;
horizontalTravel.y = 0f;

verticalTravel = span.y;
trackEnd = trackStart + (count + 1) * span / count;
}

// Update is called once per frame
void Update()
{
if (objectsToMove != null && objectsToMove.Count > 0 && curve != null)
{
AnimationCurve();
/*curve = new AnimationCurve(curve.keys[0], curve.keys[1]);

if (lineType == LineType.Straight)
{
StraightLineTrack();
}

else if (lineType == LineType.Curve)
{
AnimationCurve();
}*/
}
}

private void AnimationCurve()
{
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
// Get the height of the curve at this step.
float curveHeight = curve.Evaluate(t) * verticalTravel;

if (changeDirection)
{
objectsToMove[i].transform.position = trackStart // First step
- horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
else
{
objectsToMove[i].transform.position = trackStart // First step
+ horizontalTravel * t // evenly spaced horizontal
+ curveHeight * Vector3.up; // curving vertical
}
}
}

private void StraightLineTrack()
{
float divisor = 1f / objectsToMove.Count;

// Compute the current phase of the escalator,
// from 0 (1st step at track start) to 1 (1st step at track end)
phase = Mathf.Repeat(phase + stepsPerSecond * divisor * Time.deltaTime, 1f);

// Place each step a proportional distance along the track.
for (int i = 0; i < objectsToMove.Count; i++)
{
float t = Mathf.Repeat(phase + i * divisor, 1f);
objectsToMove[i].transform.position = Vector3.Lerp(trackStart, trackEnd, t);
}
}
}






c# unity3d






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 at 22:28









Benzi Avrumi

39110




39110








  • 1




    It's because your script is overwriting the position on each frame. you could change everything from transform.position to transform.localPosition then put all of the stairs into a parent GameObject that you could move around and it would keep all of the stairs together..
    – Ruzihm
    Nov 20 at 23:04
















  • 1




    It's because your script is overwriting the position on each frame. you could change everything from transform.position to transform.localPosition then put all of the stairs into a parent GameObject that you could move around and it would keep all of the stairs together..
    – Ruzihm
    Nov 20 at 23:04










1




1




It's because your script is overwriting the position on each frame. you could change everything from transform.position to transform.localPosition then put all of the stairs into a parent GameObject that you could move around and it would keep all of the stairs together..
– Ruzihm
Nov 20 at 23:04






It's because your script is overwriting the position on each frame. you could change everything from transform.position to transform.localPosition then put all of the stairs into a parent GameObject that you could move around and it would keep all of the stairs together..
– Ruzihm
Nov 20 at 23:04



















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402543%2fwhy-i-cant-change-the-moving-objects-position-s-and-also-not-the-parents-positi%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402543%2fwhy-i-cant-change-the-moving-objects-position-s-and-also-not-the-parents-positi%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wiesbaden

Marschland

Dieringhausen