Collision only counted first time
I'm trying to follow a tutorial, in which the player is supposed to navigate a ball around a room, and hit all the cubes. Each time you hit a cube, the score counter should display one number higher. Here's the script I've applied to all the cubes:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DoggyStyle : MonoBehaviour {
public int speed=1;
public int counter=2;
public Text counting;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime*speed);
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
counter= counter+ 1;
counting.text = "Score:"+counter;
GetComponent<Collider>().isTrigger = false;
speed = 0;
GetComponent<Rigidbody>().isKinematic = false;
GetComponent<Rigidbody>().useGravity = true;
}
}
}
Everything about it except the counting seems to work. I've got four cubes right now, with the script applied to their prefab. When I test the game, the counter only goes up for the first cube that I hit, after which it doesn't change. How do I fix this?
Answer by dgoyette · Feb 24, 2018 at 01:22 AM
You have the counter
on the cube, not on the ball. Shouldn't it be on the ball? The way you have it here, when you hit a cube, the cube's counter will increase by one, but then you're disabling the trigger, so you'll never hit OnTriggerEnter again.
It sounds like you want you want to call something like other.gameObject.GetComponent<Ball>()
(or whatever script is on your ball), and put a counter on your Ball script, and increment that.
I tried to do what you said. Here's the script on my ball:
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class playermove : $$anonymous$$onoBehaviour {
private Rigidbody rb;
public float speed;
public float height;
private float high=0.0f;
public int counter;
public Text counting;
private Rigidbody ab;
private Collider cb;
public GameObject Cube;
public void Start()
{
rb = GetComponent<Rigidbody>();
ab = Cube.GetComponent<Rigidbody>();
cb = Cube.GetComponent<Collider>();
}
public void FixedUpdate()
{
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
bool y = Input.GetButton("Jump");
if (0.63>=transform.position.y && transform.position.y>= 0.37)
{
if (y == true)
{
high = height;
}
else
{
high = 0.0f;
}
}
else
{
high = 0.0f;
}
Vector3 movement = new Vector3(x, high, z);
rb.AddForce(movement*speed);
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("ball"))
{
counter = counter + 1;
counting.text = "Score:" + counter;
ab.is$$anonymous$$inematic = false;
speed = 0;
cb.isTrigger=false;
ab.useGravity= true;
}
}
}
But now the ball just passes through the cubes...
Your answer
![](https://koobas.hobune.stream/wayback/20220612153310im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Why is GetComponent returning null when trying to fetch a script from a GameObject? 1 Answer
Help! Script won't work. 1 Answer
Making UI block rays with touch inputs 0 Answers
The score/count only goes to 1 and not further. 0 Answers
Template object and script,GameObject scripts duplicated from a template game object 0 Answers