Единство renderer.material.mainTextureOffset.x не работает

Привет всем, у меня проблема с моей игрой, проблема основана на том, когда я переключаю материалы, чтобы они могли смотреть в другую сторону (это 2d игра). Это влияет на анимацию, которая контролируется renderer.material.mainTextureOffset, но я понятия не имею, почему это не работает.

код в C#:

using UnityEngine;
using System.Collections;

public class character : MonoBehaviour {
    public float forwardSpeed = 10.0f;
    public Material newMaterialRefcs1;
    public Material newMaterialRefcs2;
    // Use this for initialization
    void Start () {

    }
    //error is occurring here !!!!!!!! below Important. The 2 if statements below
    // Update is called once per frame
    void Update () {
    if( Input.GetKey(KeyCode.D)){
            renderer.material.mainTextureOffset = new Vector2(0.25f, 0);
            transform.position += -transform.right * forwardSpeed * Time.deltaTime;
                renderer.material = newMaterialRefcs1;

    }if( Input.GetKey(KeyCode.A)){
            renderer.material.mainTextureOffset = new Vector2(0.25f, 0);
            transform.position += transform.right * forwardSpeed * Time.deltaTime;
                renderer.material = newMaterialRefcs2;

    }

}}

3 ответа

Решение

Я понял это с некоторой помощью форумов единства потребовалось некоторое время, но вот оно:

using UnityEngine;
using System.Collections;

public class character : MonoBehaviour {
    public float forwardSpeed = 20.0f;  public float rot = 0f;public float jumpSpeed = 100;public float gravity = 30f;
    public Material newMaterialRefcs1;
    public Material newMaterialRefcs2;

    void Start () {

    }
    public float scrollSpeed = 0.25F;
     void Update () {
    if( Input.GetKey(KeyCode.RightArrow)){
            scrollSpeed += 0.25f;
            transform.position += -transform.right * forwardSpeed * Time.deltaTime;
            renderer.material = newMaterialRefcs1;
            float offset = scrollSpeed;
        renderer.material.SetTextureOffset("_MainTex", new Vector2(offset, 0));
    }if( Input.GetKey(KeyCode.LeftArrow)){
            scrollSpeed += 0.25f;
            transform.position += transform.right * forwardSpeed * Time.deltaTime;
            renderer.material = newMaterialRefcs2;
            float offset = scrollSpeed;
        renderer.material.SetTextureOffset("_MainTex", new Vector2(offset, 0));

    }
        Vector3 isgrounded = transform.TransformDirection(Vector3.up);
        if( Input.GetKeyDown(KeyCode.Space)&& Physics.Raycast(transform.position, isgrounded, 6)){
            transform.position -= transform.up * jumpSpeed * Time.deltaTime*2;
} 
         Physics.gravity = new Vector3(0, gravity, 0);
        transform.rotation = Quaternion.Euler(0, 0, transform.rotation.eulerAngles.z);
}
}

Попробуйте использовать другой шейдер. Диффузный, например.

Кроме того, проверьте в инспекторе, действительно ли это значение изменилось. Можете ли вы переписать это в другом сценарии?

Я точно не знаю, в чем ваша проблема, но похоже, что вы пытаетесь настроить один параметр в первом сценарии, а затем добавить новый материал во втором сценарии. Если это так, то, когда вы назначаете новый материал во втором сценарии, вы заменяете материал полностью, что означает renderer.material.mainTextureOffset.x то, что вы установили в первом, перезаписывается.

Попробуйте сохранить смещение в отдельной переменной, которую вы можете назначить новой текстуре, когда она будет добавлена ​​во второй скрипт.

Другие вопросы по тегам