I’m looking for some help! I’m trying to add a dot product and a raycast to my lunar lander. The lander is supposed to detect the platform that I created and, if the lander doest land flat, I what to call and explosion animation, if = true to play a sound. I’m confused about how to do that. Here is my script.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LunarLanderControl : MonoBehaviour
{
public GameObject GameManagerGO; //Reference to our game manager
public GameObject Explosion; //Explosion Animation
public Text LivesUIText; //Reference to lives ui text
const int MaxLives = 3; //reference to the player lives
int lives; //current player lives
public float maxSpeed = 2f; // max speed
public float rotationSpeed = 180f; //rotation speed
public void Init()
{
lives = MaxLives; // player lives
LivesUIText.text = lives.ToString();//update the lives UI text
gameObject.SetActive(true); // Set this player game object to active
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Quaternion rotation = transform.rotation;
float z = rotation.eulerAngles.z;
z += Input.GetAxis(“Horizontal”);
rotation = Quaternion.Euler(0, 0, z);
transform.rotation = rotation;
//Move the lander
Vector3 pos = transform.position;
Vector3 velocity = new Vector3(0, Input.GetAxis(“Vertical”) * maxSpeed * Time.deltaTime, 0);
pos += rotation * velocity;
transform.position = pos;
}
// Needs to land flat(relatively) and on flat surfaces
bool CanLand2()
{
// Get the hit from a raycasts that starts at the lander and goes negative along the world y axis 100 units
RaycastHit2D hit = Physics2D.Raycast(transform.position, -transform.up, 100.0f);
// Draw line
Debug.DrawLine(transform.position, transform.position + 100.0f * -transform.up, Color.green);
// Draw normal line
Debug.DrawLine(hit.point, hit.point + 50 * hit.normal, Color.red);
// Log the dot product
//Debug.Log(Vector2.Dot(hit.normal, -transform.up));
return Vector2.Dot(hit.normal, -transform.up) > -1 && Vector2.Dot(hit.normal, -transform.up) < -.999f ? true : false; // ternary operator
}
//Function returns true if landing on flat surface, false if not.
void OnTriggerEnter2D(Collider2D collision)//collisions references
{
if (collision.tag == “MountainTag”)
PlayExplosion();//ExplosionAnimation
lives–; //Subtract one life
LivesUIText.text = lives.ToString(); // update lives UI text
if (lives == 0) //Game Over
{
//Change the game manager to game over state
GameManagerGO.GetComponent().SetGameManagerState(GameManager.GameManagerState.GameOver);
gameObject.SetActive(false); //hide the moon lander
}
//Function to instantiate an explosion
void PlayExplosion()
{
GameObject explosion = (GameObject)Instantiate(Explosion);
//set the position of the explosion
explosion.transform.position = transform.position;
}
}
}