public GameObjectAutoMoveClass(GameObjectAutoMoveClass gameObjectAutoMoveClassCopy) { generalToJump = new General(); generalToStep = new General(); gameObj = gameObjectAutoMoveClassCopy.gameObj; Speed = gameObjectAutoMoveClassCopy.Speed; StopDistance = gameObjectAutoMoveClassCopy.StopDistance; timeToStep = gameObjectAutoMoveClassCopy.timeToStep; NoAutoMove = gameObjectAutoMoveClassCopy.NoAutoMove; jump = gameObjectAutoMoveClassCopy.jump; jumpForce = gameObjectAutoMoveClassCopy.jumpForce; timeErrorJump = gameObjectAutoMoveClassCopy.timeErrorJump; rb = gameObjectAutoMoveClassCopy.rb; typeAutoMove = gameObjectAutoMoveClassCopy.typeAutoMove; if (timeErrorJump > 0f) { timeToJump += UnityEngine.Random.Range(-timeErrorJump * timeToJump, timeErrorJump * timeToJump); } }
/// <summary> /// Создание движущихся объектов /// </summary> private void ControlMovableGameObjs() { if (moveableObjects.Count < currLevel.maxCountOfMovableObjs && currLevel.moveableObjs.Count > 0) { GameObjectAutoMove gobAM = currLevel.moveableObjs[Random.Range(0, currLevel.moveableObjs.Count)]; GameObjectAutoMoveClass gobAMClass = new GameObjectAutoMoveClass(gobAM.gameObjectAutoMoveClass); GameObject gobj = CreateObjRndPOint(gobAMClass.gameObj, true); gobAMClass.rb = gobj.GetComponent <Rigidbody>(); moveableObjects.Add(gobj, gobAMClass); } }
private void Moveobject(GameObject gobj, GameObjectAutoMoveClass gameObjectAutoMove) { if (gameObjectAutoMove.NoAutoMove == false) { Vector3 playerPosition = playerTransform.position; if (gameObjectAutoMove.typeAutoMove == GameObjectAutoMoveClass.TypeAutoMove.follow) { if (Vector3.Distance(gobj.transform.position, playerPosition) > gameObjectAutoMove.StopDistance) { if (gameObjectAutoMove.generalToStep.GetTimeOut(gameObjectAutoMove.timeToStep, Time.fixedDeltaTime)) { gobj.transform.LookAt(playerPosition, gobj.transform.up); } //Quaternion rotation = Quaternion.FromToRotation(-gobj.transform.up, transform.position - gobj.transform.position); Quaternion rotation = Quaternion.FromToRotation(gobj.transform.up, gobj.transform.position.normalized); gobj.transform.rotation = rotation * gobj.transform.rotation; Vector3 down = Vector3.Project(gameObjectAutoMove.rb.velocity, gobj.transform.up); Vector3 forward = gobj.transform.forward * gameObjectAutoMove.Speed * Time.fixedDeltaTime; if (gameObjectAutoMove.rb) { gameObjectAutoMove.rb.velocity = down + forward; } } else { gameObjectAutoMove.rb.angularVelocity -= gameObjectAutoMove.rb.angularVelocity; gameObjectAutoMove.rb.velocity -= gameObjectAutoMove.rb.velocity; } } else if (gameObjectAutoMove.typeAutoMove == GameObjectAutoMoveClass.TypeAutoMove.rnddir) { //Quaternion rotation = Quaternion.FromToRotation(-gobj.transform.up, transform.position - gobj.transform.position); Quaternion rotation = Quaternion.FromToRotation(gobj.transform.up, gobj.transform.position.normalized); gobj.transform.rotation = rotation * gobj.transform.rotation; if (gameObjectAutoMove.generalToStep.GetTimeOut(gameObjectAutoMove.timeToStep, Time.fixedDeltaTime)) { int rndQ = Random.Range(-1, 1); if (rndQ == 0) { rndQ = 1; } Quaternion rotationAdd = Quaternion.FromToRotation(gobj.transform.forward, rndQ * gobj.transform.right); gobj.transform.rotation = rotationAdd * gobj.transform.rotation; //gobj.transform.Rotate(gobj.transform.up, rndQ * 90); } Vector3 down = Vector3.Project(gameObjectAutoMove.rb.velocity, gobj.transform.up); Vector3 forward = gobj.transform.forward * gameObjectAutoMove.Speed * Time.fixedDeltaTime; if (gameObjectAutoMove.rb) { gameObjectAutoMove.rb.velocity = down + forward; } } else if (gameObjectAutoMove.typeAutoMove == GameObjectAutoMoveClass.TypeAutoMove.nope) { //Quaternion rotation = Quaternion.FromToRotation(-gobj.transform.up, transform.position - gobj.transform.position); Quaternion rotation = Quaternion.FromToRotation(gobj.transform.up, gobj.transform.position.normalized); gobj.transform.rotation = rotation * gobj.transform.rotation; } if (gameObjectAutoMove.jump) { if (gameObjectAutoMove.generalToJump.GetTimeOut(gameObjectAutoMove.timeToJump, Time.fixedDeltaTime)) { if (gameObjectAutoMove.rb) { gameObjectAutoMove.rb.AddForce(gobj.transform.up * gameObjectAutoMove.jumpForce, ForceMode.VelocityChange); } } } } }