Why can't I stop my boat from rotating when it hits terrain? ,BoatController (player) rotates when collide with terrain
Hi all,
I would appreciate very much if you could help me with my problem.
I have a Boat Controller (player) which rotates when it collides with my terrain. I want it to stop. My script looks like this:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement;
public class BoatController : MonoBehaviour { public float speed = 2.0f; public float acceleration = 20.0f; public float maxspeed = 30.0f; public float minspeed = 1.0f; public float heading = 5.0f; public float rudder = 40.0f; public float rudderDelta = 40.0f; public float maxRudder = 1000.0f; public float bob = 0.2f; public float bobFrequency = 0.5f; public GameObject fish; public AudioClip correctSound; public AudioClip wrongSound; public AudioSource soundSource; public Text winText; public Text loseText; public Button winButton; public Button loseButton;
private float elapsed = 0.0f;
private float seaLevel = 0.0f;
private GameObject rudderControl;
private float rudderAngle = 5.0f;
private Rigidbody rb;
float signedSqrt(float x)
{
float r = Mathf.Sqrt(Mathf.Abs(x));
if (x < 0)
{
return -r;
}
else
{
return r;
}
}
void Start() { winText.text = ""; loseText.text = ""; winButton.gameObject.SetActive(false); loseButton.gameObject.SetActive(false);
}
void Update()
{
Debug.Log("Sailing script activated");
// Bobbing
elapsed += Time.deltaTime;
float tempY = seaLevel + bob * Mathf.Sin(elapsed * bobFrequency * (Mathf.PI * 2));
transform.position = new Vector3(transform.position.x, tempY, transform.position.z);
// Steering
rudder += Input.GetAxis("Horizontal") * rudderDelta * Time.deltaTime;
if (rudder > maxRudder)
{
rudder = -maxRudder;
}
else if (rudder < -maxRudder)
{
rudder = maxRudder;
}
heading = (heading + rudder * Time.deltaTime * signedSqrt(speed)) % 360;
// transform.Rotate(0, rudder * Time.deltaTime, 0);
//transform.eulerAngles.y = heading;
transform.eulerAngles = new Vector3(transform.eulerAngles.x, heading, transform.eulerAngles.z);
//transform.eulerAngles.z = -rudder;
transform.eulerAngles = new Vector3(transform.eulerAngles.x, -rudder, transform.eulerAngles.z);
if (rudderControl != null)
{
rudderAngle = ((-60 * rudder) / maxRudder + heading) % 360;
//rudderControl.transform.localEulerAngles.y = (70 * rudderAngle) % 360;
rudderControl.transform.eulerAngles = new Vector3(0, rudderAngle, 0);
}
// Sail
speed += Input.GetAxis("Vertical") * acceleration * Time.deltaTime;
if (speed > maxspeed)
{
speed = maxspeed;
}
else if (speed < minspeed)
{
speed = minspeed;
}
transform.Translate(0, 0, speed * Time.deltaTime);
void Awake()
{
seaLevel = transform.position.y;
rudderControl = GameObject.Find("rudderControl");
}
},
Your answer
Follow this Question
Related Questions
Rotate object on another object 1 Answer
Quaternion RotateTowards issue 0 Answers
Sun Variable Rotation 1 Answer
Finding Touching Faces Based on Rotation for Cubes in 3D 1 Answer
How could I rotate an object relative to its movement on an axis? 0 Answers