Как изменить цвет всего объекта после нажатия на его триггер? - PullRequest
0 голосов
/ 28 декабря 2018

Я играю в химию на основе молекул.Пока у меня есть молекула с триггером на рецепторном сайте, и когда я перетаскиваю правильный атом близко к этому сайту, атом меняет цвет и присоединяется.Как изменить цвет всей молекулы (а не только сайта триггера / рецептора) после присоединения этого атома?

Код, используемый для этой части моей игры, взят из: https://gamedev.stackexchange.com/questions/123929/snap-an-object-to-another-object

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Snap : MonoBehaviour
{

    public string partnerTag;
    public float closeVPDist = 0.05f;
    public float farVPDist = 1;
    public float moveSpeed = 40.0f;
    public float rotateSpeed = 90.0f;

    private Vector3 screenPoint;
    private Vector3 offset;
    private bool isSnaped;
    Color color = new Color(2, 1, 3);

    float dist = Mathf.Infinity;
    Color normalColor;
    GameObject partnerGO;
    // Use this for initialization
    void Start()
    {
        normalColor = GetComponent<Renderer>().material.color;
        partnerGO = GameObject.FindGameObjectWithTag(partnerTag);
    }
    void OnMouseDown()
    {
        screenPoint = Camera.main.WorldToScreenPoint(transform.position);
        offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
        Cursor.visible = false;
    }
    void OnMouseDrag()
    {
        //transform.SetParent(null);
        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
        transform.position = curPosition;
        Vector3 partnerPos = Camera.main.WorldToViewportPoint(partnerGO.transform.position);
        Vector3 myPos = Camera.main.WorldToViewportPoint(transform.position);
        dist = Vector2.Distance(partnerPos, myPos);
        GetComponent<Renderer>().material.color = (dist < closeVPDist) ? color : normalColor;
    }
    void OnMouseUp()
    {
        Cursor.visible = true;
        if (dist < closeVPDist)
        {
            transform.SetParent(partnerGO.transform);
            StartCoroutine(InstallPart());
            isSnaped = true;
        }
        if (dist > farVPDist)
        {
            //  transform.SetParent(null);
        }
    }
    IEnumerator InstallPart()
    {
        while (transform.localPosition != Vector3.right || transform.localRotation != Quaternion.identity)
        {
            transform.localPosition = Vector3.MoveTowards(transform.localPosition, Vector3.right, Time.deltaTime * moveSpeed);
            transform.localRotation = Quaternion.RotateTowards(transform.localRotation, Quaternion.identity, Time.deltaTime * rotateSpeed);
            yield return new WaitForEndOfFrame();
        }
    }
}

1 Ответ

0 голосов
/ 28 декабря 2018

В OnMouseUp добавьте строку, чтобы изменить материал / цвет вашей молекулы.Код:

public Color newColor;
public GameObject objectToChangeColour;    
void OnMouseUp()
{
    Cursor.visible = true;
    if (dist < closeVPDist)
    {
        transform.SetParent(partnerGO.transform);
        StartCoroutine(InstallPart());
        isSnaped = true;
        objectToChangeColour.GetComponent<Renderer>().material.color = newColour; // Change the color of object to the newColour
    }
    if (dist > farVPDist)
    {
        //  transform.SetParent(null);
    }
}

И просто замените objectToChangeColour на объект, для которого вы хотите изменить его цвет (родительский элемент / молекула / и т. Д.), И newColour на новый цвет.

...