簡體   English   中英

Unity單擊一個對象以觸發另一個對象

[英]Unity Click on 1 object to trigger another object

請記住,我是Unity新手。 我有兩個要“組合”的腳本,但嘗試時不起作用。

我有一個腳本(Name : RobotController) 該腳本控制播放器的移動。 上/下,下,左和右。 (這僅適用於鍵盤鍵atm)

這個腳本可以正常工作,但是現在我想添加電話的觸摸鍵功能。 我的意思是,如果有人單擊“向上箭頭”,則玩家將跳下。

向上箭頭是一個對象。

這是我的問題。 我用對撞機和腳本創建了向上箭頭。

向上腳本:

public class NewJumpScript : MonoBehaviour {



// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}

void OnMouseOver()
{
    if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0))) 
    {
        Debug.Log("test");
    }
}
}

這是帶有地面檢查等內容的RobotController腳本。

public class RobotController : MonoBehaviour {
//This will be our maximum speed as we will always be multiplying by 1
public float maxSpeed = 2f;
public GameObject player;
public GameObject sprite;
//a boolean value to represent whether we are facing left or not
bool facingLeft = true;
//a value to represent our Animator
Animator anim;
//to check ground and to have a jumpforce we can change in the editor
bool grounded = true;
public Transform groundCheck;
public float groundRadius = 1f;
public LayerMask whatIsGround;
public float jumpForce = 300f;
private bool isOnGround = false;
void OnCollisionEnter2D(Collision2D collision) {
        isOnGround = true;  
    }

void OnCollisionExit2D(Collision2D collision) {
    anim.SetBool ("Ground", grounded);

    anim.SetFloat ("vSpeed", rigidbody2D.velocity.y);
    isOnGround = false;
}

// Use this for initialization
void Start () {

    player = GameObject.Find("player");

    //set anim to our animator
    anim = GetComponent <Animator>();
}


void FixedUpdate () {
    //set our vSpeed
    //set our grounded bool

    grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
    //set ground in our Animator to match grounded
    anim.SetBool ("Ground", grounded);

    float move = Input.GetAxis ("Horizontal");//Gives us of one if we are moving via the arrow keys
    //move our Players rigidbody
    rigidbody2D.velocity = new Vector3 (move * maxSpeed, rigidbody2D.velocity.y);   
    //set our speed
    anim.SetFloat ("Speed",Mathf.Abs (move));
    //if we are moving left but not facing left flip, and vice versa
    if (move > 0 && !facingLeft) {

        Flip ();
    } else if (move < 0 && facingLeft) {
        Flip ();
    }

}

void Update(){
    if ((isOnGround == true && Input.GetKeyDown (KeyCode.UpArrow)) || (isOnGround == true && Input.GetKeyDown (KeyCode.Space))) {
        anim.SetBool("Ground",false);
        rigidbody2D.AddForce (new Vector2 (0, jumpForce));
    }

    if (isOnGround == true && Input.GetKeyDown (KeyCode.DownArrow)) 
    {
        gameObject.transform.localScale = new Vector3(transform.localScale.x, 0.2f, 0.2f);
    }
    if (isOnGround == true && Input.GetKeyUp (KeyCode.DownArrow)) 
    {
        gameObject.transform.localScale = new Vector3(transform.localScale.x, 0.3f, 0.3f);
    }
}


//flip if needed
void Flip(){
    facingLeft = !facingLeft;
    Vector3 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}
}

需要發生的是,當單擊游戲中的“向上箭頭”時,該人將跳起與RobotController腳本相同的淚水。 我希望你能理解我的問題。

感謝您的時間和幫助。

我對兩個問題都發布了相同的答案,因為它們是如此相似。 您可以輕松地根據需要修改代碼。

這只是做到這一點的一種方法。 可能還有更多,但這是我到目前為止遇到的最好的。

在QUI按鈕上,需要這樣的腳本:

private Mover playerMover;
void Start()
{
    playerMover = GameObject.Find("Character").GetComponent<Mover>();
}
void OnMouseOver()
{
    if (Input.GetMouseButton(0)) 
    {
        Debug.Log("pressed");
        playerMover.MoveButtonPressed();
    }
}

請注意,find僅在start函數中完成,因為它在計算上很繁瑣。

在角色游戲對象上,需要這樣的腳本組件:

using UnityEngine;
using System.Collections;

public class Mover : MonoBehaviour {
    public void MoveButtonPressed()
    {
        lastPressedTime = Time.timeSinceLevelLoad;
    }

    public double moveTime = 0.1;
    private double lastPressedTime = 0.0;
    void Update()
    {
        if(lastPressedTime + moveTime > Time.timeSinceLevelLoad)
        {
            // Character is moving
            rigidbody.velocity = new Vector3(1.0f, 0.0f, 0.0f);
        }
        else
        {
            rigidbody.velocity = new Vector3(0.0f, 0.0f, 0.0f);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM