执行raycast时,Camera.main为null

时间:2017-01-15 10:13:12

标签: c# unity3d unity3d-2dtools

生成错误的代码:

void Update()
{
    if (Input.touchCount > 0)
    {
        RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero);
        if (hit && hit.collider != null && hit.collider.name == "leftTapArea")
        {
            hit.transform.name = "Hit";
        }
    }
}

它说这个字符串有问题:

  

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position),Vector2.zero);

错误:

  

NullReferenceException:未将对象引用设置为对象的实例   leftScript.Update()(在Assets / leftScript.cs:16)

2 个答案:

答案 0 :(得分:10)

在代码中唯一可以返回null的是 @Entity @Table(name="ITEM") public class Item extends AbstractTimestampEntity{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="itemId", nullable=false) private long itemId; @ManyToOne @JoinColumn(name="merchantId", nullable=false) private Merchant merchant; @Column(name="name", length=45) private String name; @Column(name="description" , length=200) private String description; @Column(name="price") private double price; public Item(){} // getters & setters 。这意味着@Entity @Table(name="MENU") public class Menu { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="menuId", nullable=false) private long menuId; @ManyToOne @JoinColumn(name="merchantId", nullable=false) private Merchant merchant; @Column(name="name", length=45) private String name; @ManyToMany @JoinTable(name="MENU_ITEM", joinColumns = { @JoinColumn(name="menuId", nullable=false, updatable=false)}, //@JoinColumn(name="merchant.merchantId", nullable=false, updatable=false)}, inverseJoinColumns = { @JoinColumn(name="itemId", nullable=false, updatable=false)}) // @JoinColumn(name="merchantId", nullable=false, updatable=false)}) private List<Item> items = new ArrayList<Item>(); // constructor, getters & setters Camera.main.ScreenToWorldPoint。要初始化Camera.main,相机必须具有null标记。

选择Camera GameObject,然后将标签更改为MainCamera。

enter image description here

如果您不希望自己的相机位于MainCamera标签中,您也可以直接通过Camera.main找到机智,然后从中获取MainCamera组件。

GameObject.Find

答案 1 :(得分:1)

确保你的场景中有一个活跃的游戏对象,其中包含Camera组件和标记&#34; MainCamera&#34;

Tag