游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:558

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 435|回复: 7

[脚本] 关于空指针错误的问题

[复制链接]  [移动端链接]

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熟悉之中
514/1000
排名
5610
昨日变化

1

主题

131

帖子

514

积分

Rank: 5Rank: 5

UID
238064
好友
2
蛮牛币
1308
威望
0
注册时间
2017-9-7
在线时间
144 小时
最后登录
2018-10-23
发表于 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熟悉之中
514/1000
排名
5610
昨日变化

1

主题

131

帖子

514

积分

Rank: 5Rank: 5

UID
238064
好友
2
蛮牛币
1308
威望
0
注册时间
2017-9-7
在线时间
144 小时
最后登录
2018-10-23
发表于 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熟悉之中
514/1000
排名
5610
昨日变化

1

主题

131

帖子

514

积分

Rank: 5Rank: 5

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

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

回复

使用道具 举报

4四处流浪
409/500
排名
7724
昨日变化

9

主题

94

帖子

409

积分

Rank: 4

UID
82036
好友
4
蛮牛币
191
威望
0
注册时间
2015-3-19
在线时间
154 小时
最后登录
2018-10-23
QQ
发表于 2018-8-8 11:37:30 | 显示全部楼层
错的是哪一行,你把错误弄出来,是不是引用缺失
[发帖际遇]: 墨鸣 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

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就运行正常了,最佳给你了

回复

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表