void DirectionGuide() { m_target = new Vector3(Camera.main.transform.position.x, transform.position.y, Camera.main.transform.position.z); transform.LookAt(m_target); Vector3 dirToTarget = (transform.position - agent.transform.position).normalized; transform.position = agent.transform.position; Script_MovtRotationMgr rotationInstance = Script_MovtRotationMgr.instance; switch (rotationInstance.currentDirection) { case Script_MovtRotationMgr.DIRECTION.RIGHT: if (dirToTarget.x < 0) { GetComponent <SpriteRenderer>().flipX = true; } else { GetComponent <SpriteRenderer>().flipX = false; } break; case Script_MovtRotationMgr.DIRECTION.FORWARD: if (dirToTarget.z < 0) { GetComponent <SpriteRenderer>().flipX = true; } else { GetComponent <SpriteRenderer>().flipX = false; } break; case Script_MovtRotationMgr.DIRECTION.LEFT: if (dirToTarget.x > 0) { GetComponent <SpriteRenderer>().flipX = true; } else { GetComponent <SpriteRenderer>().flipX = false; } break; case Script_MovtRotationMgr.DIRECTION.BACK: if (dirToTarget.z > 0) { GetComponent <SpriteRenderer>().flipX = true; } else { GetComponent <SpriteRenderer>().flipX = false; } break; } }
//Script_MovRotationMgr instance used void DirectionMovementGuiding() { Script_MovtRotationMgr rotationInstance = Script_MovtRotationMgr.instance; if (rotationInstance.IsRotating == false && (m_lookingDirection != 0 || m_verticalDirection != 0)) { straffe = m_verticalDirection * Time.deltaTime; translation = m_lookingDirection * Time.deltaTime; transform.Translate(translation, 0f, straffe); switch (rotationInstance.currentDirection) { case Script_MovtRotationMgr.DIRECTION.RIGHT: transform.eulerAngles = new Vector3(0, 0, 0); break; case Script_MovtRotationMgr.DIRECTION.FORWARD: transform.eulerAngles = new Vector3(0, -90, 0); break; case Script_MovtRotationMgr.DIRECTION.LEFT: transform.eulerAngles = new Vector3(0, 180, 0); break; case Script_MovtRotationMgr.DIRECTION.BACK: transform.eulerAngles = new Vector3(0, 90, 0); break; } } else if (rotationInstance.IsRotating == true) { Vector3 target = new Vector3(rotationInstance.Pivot.transform.position.x, transform.position.y, rotationInstance.Pivot.transform.position.z); if (m_lookingDirection != 0) { const float DEGREE = 90f; float looking = (m_lookingDirection / Mathf.Abs(m_lookingDirection)); float dist = Vector3.Distance(target, transform.position); transform.RotateAround(target, Vector3.down, (Time.deltaTime * DEGREE * looking * (m_charSpeed / (dist * 2)))); transform.LookAt(target); } if (m_verticalDirection != 0) { float looking = (m_verticalDirection / Mathf.Abs(m_verticalDirection)); transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * looking * m_charSpeed); } } }
// Start is called before the first frame update void Start() { //currentDirection = DIRECTION.RIGHT; instance = this; }
private void LateUpdate() { PlayerMovement playerInstance = PlayerMovement.instance; Script_MovtRotationMgr rotationInstance = Script_MovtRotationMgr.instance; Vector3 target = Vector3.zero; Vector3 lookTarget = Vector3.zero; float CamHeight = 1f; if (rotationInstance.IsRotating == false) { switch (Script_MovtRotationMgr.instance.currentDirection) { case Script_MovtRotationMgr.DIRECTION.RIGHT: target = new Vector3(playerInstance.transform.position.x, playerInstance.transform.position.y + CamHeight, transform.position.z); lookTarget = new Vector3(playerInstance.transform.position.x, playerInstance.transform.position.y + CamHeight, transform.position.z + 1); break; case Script_MovtRotationMgr.DIRECTION.FORWARD: target = new Vector3(transform.position.x, playerInstance.transform.position.y+ CamHeight, playerInstance.transform.position.z); lookTarget = new Vector3(transform.position.x-1, playerInstance.transform.position.y + CamHeight, playerInstance.transform.position.z); break; case Script_MovtRotationMgr.DIRECTION.LEFT: target = new Vector3(playerInstance.transform.position.x, playerInstance.transform.position.y+ CamHeight, transform.position.z); lookTarget = new Vector3(playerInstance.transform.position.x, playerInstance.transform.position.y + CamHeight, transform.position.z-1); break; case Script_MovtRotationMgr.DIRECTION.BACK: target = new Vector3( transform.position.x, playerInstance.transform.position.y+ CamHeight, playerInstance.transform.position.z); lookTarget = new Vector3(transform.position.x + 1, playerInstance.transform.position.y + CamHeight, playerInstance.transform.position.z); break; } saveStartPos = transform.position; } else { Vector3 pivot = new Vector3(rotationInstance.Pivot.transform.position.x, transform.position.y, rotationInstance.Pivot.transform.position.z); float distToPivot = Vector3.Distance(pivot, saveStartPos); target = new Vector3(pivot.x - playerInstance.transform.forward.x * (distToPivot), playerInstance.transform.position.y + CamHeight, pivot.z - playerInstance.transform.forward.z * (distToPivot)); lookTarget = new Vector3(playerInstance.transform.position.x, transform.position.y, playerInstance.transform.position.z); } float coveredTime = (Time.time - smoothTime); float dist = Vector3.Distance(transform.position, target); float fraction = coveredTime / dist; transform.position = Vector3.Lerp(transform.position, target, fraction); transform.LookAt(lookTarget); }