- Home /
Question by
Chocolade · Feb 27, 2017 at 01:38 PM ·
c#scripting problemscript.
How do i add a trigger to gameobject ?
I have array of waypoints
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityStandardAssets.Characters.ThirdPerson;
public class WayPoints : MonoBehaviour {
public GameObject[] waypoints;
public Transform target;
public float moveSpeed = 1f;
public float rotationSpeed = 1f;
private Transform myTransform;
private int targetsIndex = 0;
private Vector3 originalPosition;
public float walkSpeed = 15f;
void Awake()
{
myTransform = transform;
}
// Use this for initialization
void Start()
{
waypoints = GameObject.FindGameObjectsWithTag("ClonedObject");
originalPosition = myTransform.position;
}
// Update is called once per frame
void Update()
{
if (MyCommands.walkbetweenwaypoints == true)
{
WayPointsAI();
}
DrawLinesInScene();
}
private void WayPointsAI()
{
if (targetsIndex == waypoints.Length)
targetsIndex = 0;
target = waypoints[targetsIndex].transform;
float distance = Vector3.Distance(myTransform.position, target.transform.position);
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
//move towards the player
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
if (distance < 2f)
targetsIndex++;
}
void DrawLinesInScene()
{
// draw lines between each checkpoint //
for (int i = 0; i < waypoints.Length - 1; i++)
{
Debug.DrawLine(waypoints[i].transform.position, waypoints[i + 1].transform.position, Color.blue);
}
// draw a line between the original transform start position
// and the current transform position //
Debug.DrawLine(originalPosition, transform.position, Color.red);
// draw a line between current transform position and the next waypoint target
// each time reached a waypoint.
if (target != null)
Debug.DrawLine(target.transform.position, myTransform.position, Color.green);
}
}
In the Start function i want to add to each waypoint a trigger. So after that i will be able to use this scripts with the waypoints
using UnityEngine;
public class WayPoints : MonoBehaviour
{
//setters for setting everything in Unity editor
public float moveSpeedSetter = 1f;
public float moveSpeedSlowedSetter = 0.5f;
public CharacterMotor motorSetter;
//static objects changeable via any script
public static float moveSpeed;
public static float moveSpeedSlowed;
public static CharacterMotor motor;
public static void SetSpeed(float speed)
{
motor.movement.maxForwardSpeed = speed;
}
private void Start()
{
moveSpeed = moveSpeedSetter;
moveSpeedSlowed = moveSpeedSlowedSetter;
motor = motorSetter;
motor.movement.maxForwardSpeed = moveSpeed;
}
}
After that create empty object in all your waypoints and add trigger to them. Then put this script on that newly created object with trigger.
using UnityEngine;
class SlowDown : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
Debug.Log("Object " +other.name+" entered "+ name);
WayPoints.SetSpeed(WayPoints.moveSpeedSlowed);
}
private void OnTriggerExit(Collider other)
{
Debug.Log("Object " + other.name + " exited " + name);
WayPoints.SetSpeed(WayPoints.moveSpeed);
}
}
Comment
Best Answer
Answer by tanoshimi · Feb 27, 2017 at 01:45 PM
SphereCollider sc = gameObject.AddComponent<SphereCollider>( ) as SphereCollider;
sc.isTrigger = true;
Your answer
Follow this Question
Related Questions
How do i use a public sealed class to create objects and destroy them ? 0 Answers
How can I call the Load method and/or the ShootingSettings method also only once in the Update ? 1 Answer
How can i check and fire an event when the user look at specific object ? 0 Answers
How can i List objects by name but also in small text or big text or any kind ? 1 Answer