maybe audiosource problem
i am developing my game skill by following the guide book making unity game. Book says ok to proceed this code but my unity can't let it go. the game's goal is moving a basket to get apples and avoid bombs.
=======================================================
this code means if basket got an apple, play appleSE and else (other object got), play bombSE. so i want to add a two audio clips to basketcontroller script. i put public AudioClip variables to outlet. Writing code is done, i put my audio clips to appleSE,bombSE in basketcontroller script by drag&drop. and play game to see how it work. when basket get an apple or bomb, there's no sounds. why..??
here is my error=============================================
NullReferenceException: Object reference not set to an instance of an object BasketController.OnTriggerEnter (UnityEngine.Collider other) (at Assets/BasketController.cs:16)
cs: 16 maybe this.appleSE is wrong, but i checked thousands and i think it's not wrong.....
here is my code=============================================
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class BasketController : MonoBehaviour { public AudioClip appleSE; public AudioClip bombSE; AudioSource aud;
void start(){
this.aud=GetComponent<AudioSource>();
}
void OnTriggerEnter(Collider other) {
if(other.gameObject.tag=="Apple"){
this.aud.PlayOneShot(this.appleSE); -----------------------cs:16 -- error point
} else {
this.aud.PlayOneShot(this.bombSE);
}
Destroy(other.gameObject);
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0)){
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit,Mathf.Infinity)){
float x=Mathf.RoundToInt(hit.point.x);
float z=Mathf.RoundToInt(hit.point.z);
transform.position=new Vector3(x,0,z);
}
}
}
}
Answer by Felipe_Drude · Oct 18, 2021 at 02:45 PM
It seems you did not Add an AudioSource component to your Game Object, with GetComponent you need the component in the same GameObject your script is attached to.
An alternative would be to just reference it on the inspector.
If you added an AudioSource than what's missing is the "appleSE".
[SerializeField] private AudioSource aud;
void start(){
// this.aud=GetComponent<AudioSource>(); // don't need this anymore }
void OnTriggerEnter(Collider other) {
if(other.gameObject.tag=="Apple"){
aud.PlayOneShot(this.appleSE);
-----------------------cs:16 -- error point
} else {
aud.PlayOneShot(this.bombSE);
}
Destroy(other.gameObject); } // Update is called once per frame void Update() {
if(Input.GetMouseButtonDown(0)){
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit,Mathf.Infinity)){
float x=Mathf.RoundToInt(hit.point.x);
float z=Mathf.RoundToInt(hit.point.z);
transform.position=new Vector3(x,0,z);
}
} }
omg!! i write 'public audiosource aud' in BasketController script and drag audiosource component in object('basket') into BasketController script and it worked!!! thank you for your replying. you saved my life.
Your answer
Follow this Question
Related Questions
I'm trying to play a sound OnCollisionEnter, but something isn't working right. Can you help me ? 0 Answers
Overriding audio priority with PlayOneShot()? 0 Answers
Getting nullReferenceException when respawning a gameObject and trying to access the audio source. 0 Answers
How to play audio while reloading a weapon ammo in unity 3d C# Scripting ? 0 Answers
dontDestroyOnLoad() - When is the gameObject destroyed? 0 Answers