- Home /
Access other gameObject's components in C# script
Hey, I'm trying to create a character switching function in my game, so when you aim at a character and press a key ('x') in this case, you assume control of the character you aimed at and the camera moves to the other character.
So far, I've setup a basic movement and aiming script, and casts a raycast so when you are aiming at another character, it changes colour (A placeholder function).
I'm wanting to have the PlayerSwitch script (Which is located in the other character) enable in the Input.GetKey('x') function.
Here's my script:
using UnityEngine;
using System.Collections;
[RequireComponent (typeof(CharacterController))]
public class FirstPersonController : MonoBehaviour {
public float movementSpeed = 5.0f;
public float mouseSensitivity = 5.0f;
public float jumpSpeed = 20.0f;
public float aimedSpeed = 2.5f;
private GameObject Ped1;
float verticalRotation = 0;
public float upDownRange = 30.0f;
float verticalVelocity = 0;
CharacterController characterController;
// Use this for initialization
void Start () {
Screen.lockCursor = true;
transform.Translate(new Vector3(3,3,1));
characterController = GetComponent<CharacterController>();
Ped1 = GameObject.Find("Ped1");
}
// Update is called once per frame
void Update () {
// Rotation
float rotLeftRight = Input.GetAxis("Mouse X") * mouseSensitivity;
transform.Rotate(0, rotLeftRight, 0);
verticalRotation -= Input.GetAxis("Mouse Y") * mouseSensitivity;
verticalRotation = Mathf.Clamp(verticalRotation, -upDownRange, upDownRange);
Camera.main.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0);
// Movement
float forwardSpeed = Input.GetAxis("Vertical") * movementSpeed;
float sideSpeed = Input.GetAxis("Horizontal") * movementSpeed;
verticalVelocity += Physics.gravity.y * Time.deltaTime;
if( characterController.isGrounded && Input.GetButton("Jump") ) {
verticalVelocity = jumpSpeed;
}
Vector3 speed = new Vector3( sideSpeed, verticalVelocity, forwardSpeed );
speed = transform.rotation * speed;
characterController.Move( speed * Time.deltaTime );
if(Input.GetMouseButtonDown(1)){
Camera.main.transform.Translate(new Vector3(0,0,2));
movementSpeed = 2.5f;
}
if(Input.GetMouseButtonUp (1)){
Camera.main.transform.Translate (new Vector3(0,0,-2));
movementSpeed = 5.0f;
}
if(Input.GetButtonDown("Sprint")){
movementSpeed = 10.0f;
}
if(Input.GetButtonUp ("Sprint")){
movementSpeed = 5.0f;
}
Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
RaycastHit hitInfo;
if(Physics.Raycast (rayOrigin, out hitInfo, 10f) && hitInfo.transform.tag == "Pedestrian"){
print ("You are casting a ray");
Debug.DrawRay (rayOrigin.direction, hitInfo.point);
hitInfo.collider.gameObject.renderer.material.color = Color.red;
if(Input.GetKey ("x")){
gameObject.GetComponent ("PlayerSwitch");
}
}
}
}
Answer by tanoshimi · Oct 31, 2013 at 12:37 PM
There's a whole page dedicated to this question in the manual. You know the gameobject on which to call the script from hitInfo.collider.gameObject.
Also, the tutorial from UnityGems on that subject is very comprehensive.
Thanks! I haven't been able to view this page until today for some reason.
Your answer
Follow this Question
Related Questions
switch player and npc follow player 0 Answers
changing player (getting in vehicles) 3 Answers
Switching between multiple classes 2 Answers
Switching between scripts within the inspector using code 1 Answer
Unity Networking Problem 1 Answer