Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Assets/Scripts/Unit2.cs(19,51):错误CS0120:访问非静态成员'CameraOperator.InvertMouseY(float)需要对象引用_C# - Fatal编程技术网

C# Assets/Scripts/Unit2.cs(19,51):错误CS0120:访问非静态成员'CameraOperator.InvertMouseY(float)需要对象引用

C# Assets/Scripts/Unit2.cs(19,51):错误CS0120:访问非静态成员'CameraOperator.InvertMouseY(float)需要对象引用,c#,C#,嗨,我正在制作一款RTS风格的游戏,在选择和突出显示我的车辆时遇到了困难。这是我犯的错误。任何帮助都将不胜感激 Assets/Scripts/Unit2.cs(19,51):错误CS0120:访问非静态成员“CameraOperator.InvertMouseY(float)”需要对象引用 这是剧本 using UnityEngine; using System.Collections; using System.Collections.Generic; public class Unit2

嗨,我正在制作一款RTS风格的游戏,在选择和突出显示我的车辆时遇到了困难。这是我犯的错误。任何帮助都将不胜感激

Assets/Scripts/Unit2.cs(19,51):错误CS0120:访问非静态成员“CameraOperator.InvertMouseY(float)”需要对象引用

这是剧本

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

public class Unit2 : MonoBehaviour
{
    public bool selected = false;
    public float floorOffset = 1;
    public float speed = 5;
    public float stopDistanceOffset = 0.5f;

    private Vector3 moveToDest = Vector3.zero;

    private void Update ()
    {
        if (renderer.isVisible && Input.GetMouseButtonDown (0)) 
        {
            Vector3 camPos = Camera.main.WorldToScreenPoint (transform.position);
            camPos.y = CameraOperator.InvertMouseY(camPos.y);  "This Line Error"
            selected = CameraOperator.Selection.Contains (camPos);

            if (selected)
            {
                renderer.material.color = Color.red;
            }
            else 
            {
                renderer.material.color = Color.white;
        }
        if(selected && Input.GetMouseButtonUp(1))
        {
            Vector3 destination = CameraOperator.getDestination();

            if(destination != Vector3.zero)
            {
                moveToDest = destination;
                moveToDest.y += floorOffset;
            }
        }
    }
    UpdateMove();
    }
    private void UpdateMove()
    {
        if((moveToDest != Vector3.zero) && (transform.position != moveToDest))
        {
            Vector3 direction = (moveToDest - transform.position).normalized;
            direction.y = 0;
            transform.rigidbody.velocity = direction * speed;

            if(Vector3.Distance(transform.position, moveToDest) < stopDistanceOffset)
            {
                moveToDest = Vector3.zero;
            }
        }
        else
        {
            transform.rigidbody.velocity = Vector3.zero;
        }
    }
}




Here is the CameraOperator script.

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

public class CameraOperator : MonoBehaviour
{
        public Texture2D selectionHighlight = null;
        public static Rect Selection = new Rect (0, 0, 0, 0);
        private Vector3 StartClick = -Vector3.one;
        private static Vector3 moveToDestination = Vector3.zero;
        private static List<string> passables = new List<string> () {"Floor"};


        private void Update ()
        {
                CheckCamera ();
                CleanUp ();
        }

        public void CheckCamera ()
        {
                if (Input.GetMouseButtonDown (0)) {
                        StartClick = Input.mousePosition;
                } 
                if (Input.GetMouseButtonUp (0)) {
                        StartClick = -Vector3.one;
                }
                if (Input.GetMouseButton (0)) {
                        Selection = new Rect (StartClick.x, InvertMouseY (StartClick.y), Input.mousePosition.x - StartClick.x, InvertMouseY (Input.mousePosition.y) - InvertMouseY (StartClick.y));
                        if (Selection.width < 0) {
                                Selection.x += Selection.width;
                                Selection.width = -Selection.width;
                        }
                        if (Selection.height < 0) {
                                Selection.y += Selection.height;
                                Selection.height = -Selection.height;
                        }
                }
        }

        public float InvertMouseY (float y)
        {
                return Screen.height - y;
        }

        private void CleanUp ()
        {
                if (!Input.GetMouseButtonUp (1)) {
                        moveToDestination = Vector3.zero;
                }
        }

        public static Vector3 getDestination ()
        {
                RaycastHit hit;
                Ray r = Camera.main.ScreenPointToRay (Input.mousePosition); 

                if (moveToDestination == Vector3.zero) {                
                        if (Physics.Raycast (r, out hit)) {
                                while (!passables.Contains(hit.transform.gameObject.name)) {
                                        if (!Physics.Raycast (hit.transform.position, r.direction, out hit))
                                                break;
                                }
                        }
                        if (hit.transform != null) {
                                moveToDestination = hit.point;
                        }
                }
                return moveToDestination;
     }
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
公共课单元2:单一行为
{
所选公共布尔=假;
公共浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮球浮点数=1;
公共浮动速度=5;
公共浮动停止距离偏移=0.5f;
私有向量3 moveToDest=Vector3.0;
私有无效更新()
{
if(renderer.isVisible&&Input.GetMouseButtonDown(0))
{
Vector3 camPos=Camera.main.WorldToScreenPoint(transform.position);
camPos.y=cameracoperator.InvertMouseY(camPos.y);“此行错误”
selected=CameraOperator.Selection.Contains(camPos);
如果(选定)
{
renderer.material.color=color.red;
}
其他的
{
renderer.material.color=color.white;
}
如果(已选择&&Input.GetMouseButtonUp(1))
{
Vector3 destination=CameraOperator.getDestination();
if(目的地!=矢量3.0)
{
moveToDest=目的地;
moveToDest.y+=楼层设置;
}
}
}
UpdateMove();
}
私有void UpdateMove()
{
if((moveToDest!=Vector3.zero)&&(transform.position!=moveToDest))
{
Vector3方向=(moveToDest-transform.position)。标准化;
方向y=0;
transform.rigidbody.velocity=方向*速度;
if(矢量3.距离(transform.position,moveToDest)这是无效的:
如果(!moveToDest==Vector3.zero)
,因为编译器需要bool变量


应该是:
如果(!(moveToDest==Vector3.zero)和(!(transform.position==moveToDest))
向量上有
运算符。我猜您希望在整个计算中使用它,所以将
移到括号外

if(!(moveToDest == Vector3.zero) && !(transform.position == moveToDest))
     {
或者将运算符更改为使用
!=
运算符:

if((moveToDest != Vector3.zero) && (transform.position != moveToDest))
    {

的优先级高于
=
,因此
!destination==Vector3.zero
等同于
(!destination)==Vector3.zero
,这毫无意义。试试
!(destination==Vector3.zero)
或者更好的方法,
destination!=Vector3.zero
。它说所有这些方法都是无效的(!)