santosxz Дата: Вс, 19 Июл 2015, 00:11 | Сообщение # 1
Сообщений: 3
Награды:
0
Репутация:
0
Статус: Offline
Объект(Игрок) двигается по прямой, и я не могу сделать так что бы когда перед ним появляется препятствие(с тэгом "trafficCar" и "Obstacle ) он его обходил самостоятельно, сделал по туториалу по рейкастам не работает как надо, помогите пожалуйста как правильно сделать, в скрипте присутствует управление кнопками и для андроида управление акселерометром, их по сути нужно заменить на рейкасты.Заранее благодарен float moveHorizontal ; #if UNITY_IOS || UNITY_ANDROID || UNITY_WP8 float smoothX = Input.acceleration.x ; if(smoothX < -0.5f && smoothX < 0) smoothX = Mathf.Lerp(smoothX,-1,Time.deltaTime/6); //smoothX = -1; else if(smoothX > 0.5f ) smoothX = Mathf.Lerp(smoothX,1,Time.deltaTime/6); ; moveHorizontal = smoothX * 2 ; #endif #if UNITY_EDITOR || UNITY_WEBPLAYER moveHorizontal = Input.GetAxis ("Horizontal"); Vector3 Centr; Vector3 Left; Vector3 Right; Centr = transform.position; Left = transform.position; Right = transform.position; Centr.y += RayHeight; Left.y += RayHeight; Right.y += RayHeight; Vector3 forward = transform.TransformDirection(Vector3.forward) * 5; Debug.DrawRay(Centr, transform.forward*RayLenght, Color.green); Debug.DrawRay(Left, (transform.forward+transform.right*-.5f)*RayLenght, Color.green); Debug.DrawRay(Right, (transform.forward+transform.right*.5f)*RayLenght, Color.green); RaycastHit hit; if(Physics.Raycast(Centr,transform.forward, out hit, 9)) { if(hit.collider.gameObject.tag == "trafficCar" ||hit.collider.gameObject.tag == "Obstacle"){ //transform.Rotate(Vector3.up, 90 * 5* Time.smoothDeltaTime); //moveHorizontal =+2f; moveHorizontal = Mathf.Lerp(moveHorizontal,-1,Time.deltaTime/6); Debug.DrawRay(Centr,(transform.forward)*RayLenght, Color.red); //Debug.DrawRay(transform.position, transform.forward, Color.red); } } if(Physics.Raycast(Left,(transform.forward+transform.right*-.5f)*RayLenght, out hit, 8)) { if(hit.collider.gameObject.tag == "trafficCar" ||hit.collider.gameObject.tag == "Obstacle"){ //transform.Rotate(Vector3.up, 90 * 2* Time.smoothDeltaTime); //moveHorizontal =-2f; moveHorizontal = Mathf.Lerp(moveHorizontal,-1,Time.deltaTime/6); //Debug.DrawRay(transform.position, (transform.forward+transform.right*-.5f)*RayLenght, Color.red); Debug.DrawRay(Left,(transform.forward+transform.right*-.5f)*RayLenght, Color.red); } } if(Physics.Raycast(Right,(transform.forward+transform.right*.5f)*RayLenght, out hit, 8)) { if(hit.collider.gameObject.tag == "trafficCar" ||hit.collider.gameObject.tag == "Obstacle"){ //moveHorizontal =+2f; moveHorizontal = Mathf.Lerp(moveHorizontal,1,Time.deltaTime/6); //transform.Rotate(Vector3.up, -90 * 2* Time.smoothDeltaTime); Debug.DrawRay(Right,(transform.forward+transform.right*.5f)*RayLenght, Color.red); //Debug.DrawRay(Right, (transform.forward+transform.right*.5f)*RayLenght, Color.green); } }
Сообщение отредактировал santosxz - Вс, 19 Июл 2015, 00:11
Сообщение Объект(Игрок) двигается по прямой, и я не могу сделать так что бы когда перед ним появляется препятствие(с тэгом "trafficCar" и "Obstacle ) он его обходил самостоятельно, сделал по туториалу по рейкастам не работает как надо, помогите пожалуйста как правильно сделать, в скрипте присутствует управление кнопками и для андроида управление акселерометром, их по сути нужно заменить на рейкасты.Заранее благодарен float moveHorizontal ; #if UNITY_IOS || UNITY_ANDROID || UNITY_WP8 float smoothX = Input.acceleration.x ; if(smoothX < -0.5f && smoothX < 0) smoothX = Mathf.Lerp(smoothX,-1,Time.deltaTime/6); //smoothX = -1; else if(smoothX > 0.5f ) smoothX = Mathf.Lerp(smoothX,1,Time.deltaTime/6); ; moveHorizontal = smoothX * 2 ; #endif #if UNITY_EDITOR || UNITY_WEBPLAYER moveHorizontal = Input.GetAxis ("Horizontal"); Vector3 Centr; Vector3 Left; Vector3 Right; Centr = transform.position; Left = transform.position; Right = transform.position; Centr.y += RayHeight; Left.y += RayHeight; Right.y += RayHeight; Vector3 forward = transform.TransformDirection(Vector3.forward) * 5; Debug.DrawRay(Centr, transform.forward*RayLenght, Color.green); Debug.DrawRay(Left, (transform.forward+transform.right*-.5f)*RayLenght, Color.green); Debug.DrawRay(Right, (transform.forward+transform.right*.5f)*RayLenght, Color.green); RaycastHit hit; if(Physics.Raycast(Centr,transform.forward, out hit, 9)) { if(hit.collider.gameObject.tag == "trafficCar" ||hit.collider.gameObject.tag == "Obstacle"){ //transform.Rotate(Vector3.up, 90 * 5* Time.smoothDeltaTime); //moveHorizontal =+2f; moveHorizontal = Mathf.Lerp(moveHorizontal,-1,Time.deltaTime/6); Debug.DrawRay(Centr,(transform.forward)*RayLenght, Color.red); //Debug.DrawRay(transform.position, transform.forward, Color.red); } } if(Physics.Raycast(Left,(transform.forward+transform.right*-.5f)*RayLenght, out hit, 8)) { if(hit.collider.gameObject.tag == "trafficCar" ||hit.collider.gameObject.tag == "Obstacle"){ //transform.Rotate(Vector3.up, 90 * 2* Time.smoothDeltaTime); //moveHorizontal =-2f; moveHorizontal = Mathf.Lerp(moveHorizontal,-1,Time.deltaTime/6); //Debug.DrawRay(transform.position, (transform.forward+transform.right*-.5f)*RayLenght, Color.red); Debug.DrawRay(Left,(transform.forward+transform.right*-.5f)*RayLenght, Color.red); } } if(Physics.Raycast(Right,(transform.forward+transform.right*.5f)*RayLenght, out hit, 8)) { if(hit.collider.gameObject.tag == "trafficCar" ||hit.collider.gameObject.tag == "Obstacle"){ //moveHorizontal =+2f; moveHorizontal = Mathf.Lerp(moveHorizontal,1,Time.deltaTime/6); //transform.Rotate(Vector3.up, -90 * 2* Time.smoothDeltaTime); Debug.DrawRay(Right,(transform.forward+transform.right*.5f)*RayLenght, Color.red); //Debug.DrawRay(Right, (transform.forward+transform.right*.5f)*RayLenght, Color.green); } } Автор - santosxz Дата добавления - 19 Июл 2015 в 00:11