unity renderer.material.mainTextureOffset.x 不起作用
本文关键字:不起作用 mainTextureOffset material renderer unity | 更新日期: 2023-09-27 18:32:24
大家好,我的游戏遇到了问题,问题是基于我切换材质以便它可以面向另一个方向(这是一个 2D 游戏)。这会影响由渲染器控制的动画.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;
}
}}
我不确定你的问题到底是什么,但听起来你正在尝试在第一个脚本中调整一个设置,然后在第二个脚本中添加一个新材料。如果是这种情况,那么当您在第二个脚本中分配新材料时,您将完全替换材料,这意味着您在第一个脚本中设置的renderer.material.mainTextureOffset.x
将被覆盖。
尝试将偏移量保留在单独的变量中,当在第二个脚本中添加新纹理时,可以将该变量分配给新纹理。
尝试使用其他着色器。例如,漫反射。
另外,检查器,此值是否真的更改了。你可以用其他脚本重写吗?
我在 Unity 论坛的一些帮助下花了一段时间才弄清楚,但这里是:
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);
}
}