找回密码
 注册帐号

扫一扫,访问微社区

GUI 关于空指针错误的问题

7
回复
745
查看
[ 复制链接 ]

1

主题

6

帖子

16

积分

Rank: 1

UID
291801
好友
0
蛮牛币
20
威望
0
注册时间
2018-7-30
在线时间
10 小时
最后登录
2018-8-16
2018-8-7 17:38:12 显示全部楼层 阅读模式
10蛮牛币
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAttack : MonoBehaviour {

    private Dictionary<string, PlayerEffect> effectDict = new Dictionary<string, PlayerEffect>();
    public PlayerEffect[] effectArray;
    public float distanceAttackForward=2;
    public float distanceAttackAround= 2;
    public int[] damageArray = new int[] { 20, 30, 30, 30 };


    public enum AttackRange{
        Forward,
        Around
    }
    void Attack(string args)
    {
        string[] proArray = args.Split(',');
        string posType = proArray[0];
        if(posType == "normal")
        {
            ArrayList arrayList = GetEnemyInAttackRange(AttackRange.Forward);
            foreach (GameObject go in arrayList)
            //这里的arrayList里是空的,求解!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            {
                go.SendMessage("TakeDamage", damageArray[0] + "," + proArray[3] + "," + proArray[4]);
            }
        }
    }
    //得到在攻击范围之内的敌人
    ArrayList GetEnemyInAttackRange(AttackRange attackRange)
    {
        ArrayList arrayList = new ArrayList();
        if (attackRange == AttackRange.Forward)
        {
            foreach (GameObject go in TranscriptManager._instance.enemyList)
            {
                Vector3 pos = transform.InverseTransformPoint(go.transform.position);
                if (pos.z > -0.5f)
                {
                    float distance = Vector3.Distance(Vector3.zero, pos);
                    if (distance < distanceAttackForward)
                    {
                        arrayList.Add(go);
                    }
                }
            }
        }
        else
        {
            foreach (GameObject go in TranscriptManager._instance.enemyList)
            {
                float distance = Vector3.Distance(transform.position,go.transform.position);
                if (distance < distanceAttackForward)
                {
                    arrayList.Add(go);
                }
            }
        }
        return arrayList;
    }
}


回复

使用道具 举报

5熟悉之中
841/1000
排名
3457
昨日变化

1

主题

177

帖子

841

积分

Rank: 5Rank: 5

UID
238064
好友
3
蛮牛币
20726
威望
0
注册时间
2017-9-7
在线时间
232 小时
最后登录
2019-5-22
2018-8-7 17:38:13 显示全部楼层
建议你看一下这个方法GetEnemyInAttackRange()中的判断进去执行了没有:
if (pos.z > -0.5f)   和 if (distance < distanceAttackForward)
这两个if语句有没有进入执行。

if (pos.z > -0.5f)
                {
                    float distance = Vector3.Distance(Vector3.zero, pos);
                    if (distance < distanceAttackForward)
                    {
                        arrayList.Add(go);
                    }
                }
回复

使用道具 举报

1

主题

6

帖子

16

积分

Rank: 1

UID
291801
好友
0
蛮牛币
20
威望
0
注册时间
2018-7-30
在线时间
10 小时
最后登录
2018-8-16
楼主 2018-8-7 17:44:01 显示全部楼层
关于引用的其他脚本,应该是没有错的。
回复

使用道具 举报

1

主题

6

帖子

16

积分

Rank: 1

UID
291801
好友
0
蛮牛币
20
威望
0
注册时间
2018-7-30
在线时间
10 小时
最后登录
2018-8-16
楼主 2018-8-7 18:18:36 显示全部楼层
风停云晓 发表于 2018-8-7 18:01
建议你看一下这个方法GetEnemyInAttackRange()中的判断进去执行了没有:
if (pos.z > -0.5f)   和 if (d ...

我改成
foreach (GameObject go in TranscriptManager._instance.enemyList)
            {
                arrayList.Add(go);
            }
后还是错误的
回复

使用道具 举报

5熟悉之中
841/1000
排名
3457
昨日变化

1

主题

177

帖子

841

积分

Rank: 5Rank: 5

UID
238064
好友
3
蛮牛币
20726
威望
0
注册时间
2017-9-7
在线时间
232 小时
最后登录
2019-5-22
2018-8-7 18:22:39 显示全部楼层
菜菜小草 发表于 2018-8-7 18:18
我改成
foreach (GameObject go in TranscriptManager._instance.enemyList)
            {

那你把给list赋值外面的那个foreach改成for循环试试。在arrayList.Add(go);后面加一句debug,打印一下,添加进入的内容。
回复

使用道具 举报

5熟悉之中
841/1000
排名
3457
昨日变化

1

主题

177

帖子

841

积分

Rank: 5Rank: 5

UID
238064
好友
3
蛮牛币
20726
威望
0
注册时间
2017-9-7
在线时间
232 小时
最后登录
2019-5-22
2018-8-7 18:24:30 显示全部楼层
菜菜小草 发表于 2018-8-7 18:18
我改成
foreach (GameObject go in TranscriptManager._instance.enemyList)
            {

你试试行不行,不行了再回我
回复

使用道具 举报

5熟悉之中
742/1000
排名
5084
昨日变化

9

主题

144

帖子

742

积分

Rank: 5Rank: 5

UID
82036
好友
4
蛮牛币
1630
威望
0
注册时间
2015-3-19
在线时间
305 小时
最后登录
2019-5-22
QQ
2018-8-8 11:37:30 显示全部楼层
错的是哪一行,你把错误弄出来,是不是引用缺失
回复

使用道具 举报

1

主题

6

帖子

16

积分

Rank: 1

UID
291801
好友
0
蛮牛币
20
威望
0
注册时间
2018-7-30
在线时间
10 小时
最后登录
2018-8-16
楼主 2018-8-8 14:01:51 显示全部楼层
风停云晓 发表于 2018-8-7 18:24
你试试行不行,不行了再回我

错误已经找到,不是代码错误,是distanceAttackForward设置的太小,改成100就运行正常了,最佳给你了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则