0

大家好,我的游戏有问题,这个问题是基于我切换材料的时候,所以它可以面向另一个方向(这是一个 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;

    }

}}
4

3 回答 3

0

我不确定您的问题到底是什么,但听起来您正在尝试调整第一个脚本中的一个设置,然后在第二个脚本中添加新材料。如果是这种情况,那么当您在第二个脚本中分配新材料时,您将完全替换该材料,这意味着renderer.material.mainTextureOffset.x您在第一个脚本中设置的材料将被覆盖。

尝试将偏移量保存在一个单独的变量中,当它添加到第二个脚本中时,您可以将其分配给新纹理。

于 2013-09-22T18:28:41.327 回答
0

尝试使用其他着色器。例如,漫射。

另外,检查检查员,这个值是否真的改变了。你可以用其他脚本重写它吗?

于 2013-09-25T10:48:34.380 回答
0

在统一论坛的帮助下,我花了一段时间才弄清楚,但这里是:

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);
}
}
于 2013-09-26T12:11:27.940 回答